- `ts` stands for "tree-sitter", meaning this mode uses tree-sitter under the hood, which is, among other things, very performant.
- There's support for the CommonMark spec and GFM, so things like `- [ ]` checkboxes and ~~strikethrough~~ work out of the box, along with many other small QoL features.
- This mode is BUILT-IN, so no extra packages are needed.
- This is currently in the experimental phase, so users need to "opt in" and load the mode to play with it, hence the first part of the guide.
Eglot won't help you get your system ready for LSP work, it will only avail itself if what's there. It doesn't even auto detect and configure that, either. There's no user prompting, so you'll have to read the docs to know that this even needs to be done.
Similarly, tree sitter support doesn't include the grammars! And those aren't typically sitting in your package repository, so users have to find a grammar and compile it themselves. There's not even a good recommendation given by Emacs on where to get them, leaving users to hope that whatever repository showed up on a Google search is both in good working order and safe to use.
It's really quite a failure on Emacs.
https://www.reddit.com/r/emacs/comments/1utghab/treesitter_s...
But note that this is not the default. Users have to enable that behaviour, and know to enable it. That's a bad default.
IIRC, for eglot I had to install a Python language server. There are a bunch of them. Why would I want it to pick one by default?
I don't know if Emacs will ever have an IDE with TS and LSP working "out of the box" without some configuration. From my experience with Eglot, if it were enabled by default, it would confuse the heck out of some users who just want to, say, edit a Python script.
There are always opinionated releases like Doom Emacs or Spacemacs that can set whatever nice defaults you think should be there. Leave vanilla Emacs to be, well, vanilla. Emacs, while it can be a decent IDE, is not an IDE and shouldn't default to being one.
Typescript is a perfect example of why Emacs shouldn't own that setup. Typescript version 6 uses the "typescript-language-server" which is a totally stand alone nom package for lsp support.
Typescript 7, is incompatible with typescript-language-server and the compiler itself now acts as a lsp.
If Emacs handles that all by default it then needs to handle versioning of each language server itself across all operating systems, handle cases when different machines have different npm version managers, upgrades, etc...
It's not impossible but it's a lot to ask, and it requires more frequent version upgrades just to keep things in sync.
I couldn't even use the built in version of eglot and had to use ELPA version for bug fixes that affect c# LSP support that were committed to the package back in December.
What's important is that _you can change it_. Good defaults ensure that Emacs doesn't repel new users and casual users and users who are not interested in fiddling.
And this isn't a matter of color theme default, or font default; this is a shipped feature that _does not function_ without changes to the defaults! By default, it does not work.
I'm confused. Have things changed? The scratch buffer it starts with is for writing elisp.
> this is a shipped feature that _does not function_ without changes to the defaults!
Do you know how many shipped features come with Emacs that don't function without changes to defaults?
A huge number of them! Stuff like hippie-expand, ibuffer, etc. This isn't something new - it's been that way for decades.
> Good defaults ensure that Emacs doesn't repel new users and casual users and users who are not interested in fiddling.
This has been argued to death forever. While even I think they can and should change some defaults, the reality is that Emacs as an ecosystem is doing just fine without so many new/casual users, and will continue to do so. They don't want to be something for everyone.
And while I don't have the latest Emacs, in my experience with eglot - it's simply not ready for the masses. I frequently get timeouts, and would often have to shut down and restart eglot. It's been a while since I had to, so perhaps they've fixed all the issues, but it's simply not as robust as what you'd get with other IDEs. I'd rather they address those issues than the ease of use.
And yes, much of Emacs is broken out of the box and it's been that way a long while. That's not a good thing.
Emacs isn't ready for the masses. Broken defaults, and a brittle experience once features are made working is standard.
I've used Emacs for thirty years now. I don't recommend it to new users.
It never will be. It's simply not a goal they have. It's tiring to keep hearing people point it out. Emacs is also not ready to be your web server. Or your Jira replacement. It's not a lot of things - we don't need to itemize them all.
I've written a lot of stuff. Some of it I released publicly. None of it is for the masses. There are better tools for the masses - let them use those!
> I don't recommend it to new users.
"New" to what? In general, I don't recommend Emacs unless someone shows genuine curiosity. I always tell people "Give me any task, and I'll find a better tool than Emacs." And "If you want to get up and running quickly for your task, Emacs is not a good choice." Followed by "What makes Emacs worthwhile is you get it all in one package where they can interact with one another." And "It's a lifelong journey."
Nevertheless, some not technically savvy users do use Emacs today because they needed help editing files on a remote machine and I couldn't teach vim because Emacs was all I knew :-)
That is the proper response. These tools are designed for someone that does need them as they are, not for someone that just need some tools. Software like vim and emacs are in fact a whole workshop that you need to make your own. If you just want a tool, there are better software out there, but people that usually go for emacs wants a workspace, not just one tool.
They host binaries already; why not host all of the binaries necessary for the supported features to function?
Or I can do ESC enable-this-mode-option and then press a single key.
I'm struggling with this. If it's cheaper in keystrokes to type the codes inline why enable the mode?
This isn't a vi vs emacs hate thing, It's a key count efficiency thing. I don't see the motivation even if translated to minimum prefix TAB complete terms. Its like 20x more presses.
It would be interesting for me to have a new markdown-centric org-mode thing. I'd love to vibe lisp to customize my workflows, and I don't totally love Obsidian, which is what I've setup and configured now. I'd prefer to just have the config living in/around init.el/config.el (I used DoomEmacs most recently).
I realize that org/agenda, etc does a ton more than markdown offers, but most of my flow is just around: raw notes to be consumed, check lists, due dates on items, and other "basics" of org-mode.
Any recent Emacsers have similar workflows that are tgenible these days? I'd love to get Emacs back in use in my new antigenic Tmux-centric coding flows, and have it be a first class markdown editor, organizaer, and potentially collaboration.....
I wrote a bit about this back in 2021, in response to a query on Reddit "Why didn't org-mode just use Markdown?".
https://rpdillon.net/why-doesnt-emacs-org-mode-just-use-mark...
To me Orgmode (after years of using it) feels like .docx. A weird poorly specified format that is only fully editable from one editor. Granted you ran read it from anywhere, but you won't want to edit it from anywhere other than Emacs. That feels like it defeats the point of using markup - which is supposed to be editable/usable from anywhere, even Notepad.
.adoc is usually sufficient (the only part I miss is tangle). Lots of options to specify at the top of a document like the images directory, or the CSS file to use, line SVG on HTML export etc. (which Markdown lacks). But the asciidoc converter runs from the command line or from code ( I write .adocs and convert them in Clojure). So you're less married to your editor.
Ideally there'd be some markup that's specified with a regex of PEGs or something that you could easily make a parse for in any context. I thought djot would be that, but it looks like making a grammar is secondary for them. I hope some day one could navigate to markup file in the browser and they'd automatically render with your own specified CSS.
Nothing. It's just not Org-mode, and thus many great features of Org just not possible - sparse tree search; timestamps with built-in calendaring features; outline features like narrow-to-subtree; editing the subtree in an indirect buffer; executable code blocks; embedded LaTeX snippets; real tables with spreadsheet-like capability; checkbox statistics cookies - [/] and [%]; org-sort; column views; tags and tag inheritance; etc.
Anyone who's familiar with even a small subset of things that's possible in Org-mode and unlikely ever be supported in Markdown (just because there's no agreed format standard) have no confusion about it - Org-mode is absolutely superior. But superior doesn't mean universally better for everyone. The biggest drag of Org-mode is that it can never fully exist outside of Emacs. Yet Markdown can't ever fully cover its grounds (even in Emacs), simply because Markdown has to exist and work outside of Emacs as well.
So, you need to invent slots. Logseq did exactly that - all the org-mode specific lines get lifted verbatim into .md. Obsidian did it differently with emoji fields or Dataview inline fields (or whatever they called). Neither produces portable Markdown. GitHub renders those files as literal noise. The portability benefit that motivated the move evaporates the moment you add the metadata you need.
And then you'd have to build a specialized parser - there's no equivalent of `org-element` for Markdown. Sure, tree-sitter helps to some extent, but you're still lacking a semantic layer that turns nodes into records.
In essence - for Emacs to treat Markdown as Org-mode, we need to change Markdown, once that happens (if ever) Emacs can follow. But at this point it is already such a mess, it's crazy. Take front-matter alone - it's not CommonMark, it is a Jekyll convention that each tool does differently, and it is per-file, so your unit of thought is limited to become a file. That is the Obsidian/Denote/zk design, it works - but it moves your outline into the filesystem. You lose refile, subtree archive, narrowing, cut-and-yank of a subtree, and "this TODO belongs under that project heading". Org gives you both: file keywords at the top, property drawers on every heading, with inheritance down the subtree that front-matter structurally cannot express.
The point is that markdown could have todo's or virtually any other aspect that org mode supports put into it without changing the markdown standard and layer org functionality and various features on top for example todo's could simply be italic's starting with todo: so `# todo:todo hello` could be parsed as a todo entry marked as todo.
If you want to use markdown for Agenda and calendaring in Emacs you'd have to invent a different subset of markdown, most likely poorly supported anywhere else. And if you get there, then it begets a question - why? If we already have something far better and it's called Org-mode?
Since markdown is becoming so prevalent. Even our product managers are becoming natively conversant with it, I'd just prefer to have as markdown first world.
(don't get me started ranting about how Atlassian and Slack have migrated away from markdown and to proprietary formats....).
I definitely think markdown has won (at org was never going to 'win' of course given it's limited scope) and actually is probably what we should just all be using and accept.
- have it look through all md files in a directory, collect all the todos into a main view
- look for items tagged with a date
- support customer tagging, and provide workflow exports for each one...
- behind the scenes git management for files
- etc...
I've been wanting to build a collaborative markdown editor for awhile now, making it so that different front-ends could work with it is an interesting thing to think about....
Of course one might also want to actually build out todo nodes as CLOS style objects. Only caveat hear is that you would need to decide how the object should be serialized and deserialized and the deserializing has to be more precise.
serializing and deserializing to MD should be easy I think since all we need to do is read in headings and list items into lists with some denotation to the type it was.
Those are just my thoughts on the topic. My thinking has been I have gotten fed up with emacs modes that are good and a lot of effort to write but just end up adding a lot of stuff on top that make it difficult to customize or customize the the standard way and returning to simple lists could be good.
That’s why you got org files and a handful of lisp functions to turn them into a living documents. Using lists take that aspect away while markdown is just not that good to serve such a role.
emacs -nw directly on the shell.
its like working on a linux computer, but from windows.
I run vterm inside emacs, and claude code inside vterm. I have special commands for extracting file routes, and flow between dired and magit. Everything runs like magic.
I also have copilot-chat and copilot-mode installed. From time to time I use it to review what claude has done, or to chat a little bit.
My use case is resuming a session and not being able to scroll back to the past history. Otherwise if I start a new session, it works fine.
It’s probably related to me being on an old version of vterm, but I’m just wondering if you ever have come across this.
Ubuntu has a fair number of elpa packages in its repos, so I’m trying to make it work if possible. Not sure if I’m missing anything config wise within the confines of vterm
I then use mAgit to review it.
Setting up a keyboard replacement is the way to go here. Solves the issue for all devices.
Uhm, no, I haven’t.
Why should I care if the Markdown mode uses Treesitter or not…? Does it affect the performance or UX somehow?