Emacs' feature of being a platform for Lisp is really something that needs to be restated again and again.
You can do practically anything to text or other objects. If you can think of it, I'm pretty sure that Emacs can accomplish that for you. Any transform, file action, font changes, etc etc.
Example, this auto-saves a given file. In this case, whenever I archive an org-mode subtree, the archive file is auto-saved:
435 │ ;; The `save-some-buffers` function can run silently, and it also accepts a
436 │ ;; function argument to predicate whether a buffer is saved or not.
437 │ ;; This predicate simply says "save the buffer's file if it's the notes archive
438 │ ;; file"
439 │ (defun redacted/save-notes-archive-file ()
440 │ (interactive)
441 │ (save-some-buffers 'no-confirm (lambda ()
442 │ (equal buffer-file-name
443 │ (expand-file-name redacted/notes-archive-file)))))
444 │
445 │ ;; Finally, the newly-defined function can advise the archive function. So,
446 │ ;; after a subtree in org is archived, the archive file will be automatically saved.
447 │ (advice-add 'org-archive-subtree :after #'redacted/save-notes-archive-file)
Before I learned lisp, I remember seeing this sentiment expressed a lot and thinking people were underselling the difficulty and overselling the usefulness of "programming your text editor" as opposed to just configuring it via standard options.
After I learned enough Common Lisp to build a few small projects, I realized how powerful it is to write small, bespoke functions for odd text editing jobs. You can write and save functions that do something very specific but powerful to any project you're working on, regardless of the language or tooling used, because everything uses text. I'm so glad I learned it.
I'm glad to hear that because so far my impression agrees with yours (before you learned Lisp) and this comment[0]. Do you happen to know a good tutorial to learn Emacs Lisp?
I learned it from the manual built into Emacs itself, which you can access by entering "C-x r" and then following the link to "Emacs Lisp" near the top. I had literally never heard of Lisp at the time I stumbled on it.
But the way that I actually got competent enough to do anything interesting with it was to learn Common Lisp, because they are similar in that learning to solve problems in Common Lisp lets you do the same in Elisp. I learned Common Lisp by reading Practical Common Lisp by Peter Seibel and writing small programs.
I would really recommend spending a little time learning both dialects because it's easy to learn "just enough" elisp to configure your setup but not enough to appreciate what you can do with it.
I really wish emacs had evolved a model for dealing with simple vector graphics. I know part of that falls on the market for not choosing a common model..but
I agree completely. I made a big push to switch from vim to spacemacs so that I could use org-mode for note taking and reduce my dependence on paper notebooks, but the lack of ability to easily sketch really killed it. I'm a geologist so I need to sketch out maps and other kinds of figures that aren't just scatterplots and flowcharts or whatever (which can be done programmatically). If I could have something even quite crude it would be revolutionary, especially if the org clients were improved for iOS with better editing/syncing capabilities and less of a focus on agenda and calendar capabilities (todoist and native calendar apps work better for my job situation, personally). The rest of org is so easy and powerful... I still dream my little dreams but am not willing to learn how to implement something like that myself I guess.
Emacs lisp is something you can figure out a bit at a time: mostly you're writing 'snippets', rather than organizing some huge codebase where you have to know all the ins and outs.
I second this. At my first Real Job after university, I was challenged by a teammate to learn to use Emacs. He laughed at how primitive my (non-Vim!) vi editor was. In hindsight, it was absolutely true. I bought the O'Reilly book for Emacs and spent many weekends teaching myself the basics.
You are right: Bit by bit you write tiny macros that do things you need or want. After 1/2/5/10/30 years, your personal macros compound to create real efficiency. I don't use Emacs today, but I do appreciate that the ecosystem is enormous and well-developed.
I agree that elisp, itself, is quite easy to learn. I wish I could say the same about the emacs API. M-x apropos is somewhat useful, but quite a lot of my editor customizations come down to either 1) reading the source of the functionality that I'm trying to customize and reading what variables it accesses or 2) random Googling to see what others have customized.
That said, to emacs' credit, it makes (1) extraordinarily easy. C-h k to see which function is being called by a given key-combination and C-h f to get to the source of that function makes it very easy to look at the internals of the editor and figure what I should setq in order to make the editor behave in the way I want.
For Common Lisp: Practical Common Lisp is a good introductory text. ANSI Common Lisp is older, but still relevant (the standard is from 1994, it hasn't changed, though the community and tooling has the language is stable). On Lisp and Let over Lambda are good follow-on texts if you want to learn about macros, in particular. Common Lisp Recipes is another good one for after PCL.
For Emacs Lisp: I just looked at the info pages for emacs. There are some books, never touched them so can't comment. But if you know CL, Emacs Lisp is not a stretch to learn as it's about 90% the same (especially since they made some changes in the past decade or so to better support lexical scope by default).
For Scheme: Check out The Little Schemer and the rest of that book series. Unique presentation style, but very approachable if you get past it (some people don't, I liked them).
Back in the day I started out with the "Emacs Lisp Intro" also known as "An Introduction to Programming in Emacs Lisp" that comes with Emacs. I remember printing it out and devouring it before going to sleep.
It looks like it's been kept up to date and you could do worse than starting there, especially in an Emacs context.
Here is the online version in case you don't know how to navigate info manuals yet:
You can do practically anything to text or other objects. If you can think of it, I'm pretty sure that Emacs can accomplish that for you. Any transform, file action, font changes, etc etc.
Example, this auto-saves a given file. In this case, whenever I archive an org-mode subtree, the archive file is auto-saved: