4 ms·
I've thought about writing a blog post trying to capture the magic of Emacs. By "magic" I really just mean having a super low barrier to having your code runni
by cyrialize 5y ago
I've thought about writing a blog post trying to capture the magic of Emacs.
By "magic" I really just mean having a super low barrier to having your code running and working in Emacs. You just open your config files, put in a line of code, and then you're done.
Of course there are other barriers - Emacs has a huge learning curve and Elisp is harder to learn if you aren't familiar with Lisp like languages.
Still, there are no other programs out there like Emacs. You always have to either create your own extension, modify the source code, etc.
Realizing that you could kinda just make whatever you'd like in Emacs is an amazing feeling. I don't even use Emacs as my primary editor at work and I still think about cool things I could hack in my config files.
- yissp 5y agoThis is a huge part of the appeal of emacs to me as well. Other editors / IDEs might offer a comparable level of extensibility but it feel like there's so much more friction involved in taking advantage of it. With emacs you don't even need to restart the application.
- sillysaurusx 5y agoBelieve it or not, a lot of it is due to a shared global namespace with global variables as the norm. It's hard to capture the qualities you mention without that. (Raise your hand if you can think of a system that did; I'd love to know.) There's more to it than that, of course – the design is excellent – but convention matters, and elisp has a convention not seen in most other large-scale programming systems.
- emacsuser31 5y agoDefinitely this. It just feels so natural to have all those functions in the same scope without dealing with modules, hierarchies or something involving both. I also believe that none of the languages with module hierarchies are suitable for some kind of REPL driven development. You can't just dump all of your program into the REPL and expect it to work. You need globally unique names for these. And I believe this is a must for a language that is running inside an editor.
- Jtsummers 5y agoCommon Lisp has packages and is certainly as suited for REPL-driven work as Emacs Lisp. I'm not convinced that a lack of at least a flat set of namespaces (like CL) wouldn't be an improvement on Emacs' "prefix everything" approach. Perhaps more important to Emacs Lisp is that everything is open. If you took just something like CL's packages but had every symbol exported by default you'd get something that's not a far cry from Emacs' present approach but with better code organization capabilities.
- dan-robertson 5y agoBut of course Common Lisp has similar qualities: one can still write unexported symbols, there is just the worry that the internals may change. I think the important qualities are that the configuration is typically done with global and buffer-local variables (a super-lightweight and extensible solution to the obvious problem of per-buffer state) with simple types (alists, hooks, etc). One issue with Common Lisp style packages is that they may interfere with lazy loading. In emacs you can setq a symbol before the package loads and then the defvar will not change the value, but in CL you cannot read the symbol until the package is defined so things like eval-after-load (ie lazy load then configure) suck.
- nverno 5y ago> there are no other programs out there like Emacs Emacs is the most organic feeling software I've used- it really feels like it has evolved like something in the natural world, with all sorts of warts and wrinkles. Kinda like a piece of DNA with large portions seemingly unused and occasionally dropped or upgraded, but at the end of the day it's all about functionality and adaptability. May it live forever
- sigjuice 5y agoBy "magic" I really just mean having a super low barrier to having your code running and working in Emacs. You just open your config files, put in a line of code, and then you're done. Most of the time it isn’t even necessary to restart emacs to do this.