Remix.run Logo
wilkystyle 3 months ago

The advice system that you mentioned is such a good example of this! I recently realized that I had come to rely deeply on xref navigation for going to a definition and then xref-go-back/forward to hop between different jumps. I was bummed that it wasn't a more general backward/forward capability, but then I remembered the advice system. In like 10 minutes I whipped up some quick elisp to add some :before advice around various navigation functions to call xref-push-marker-stack. Not only did it work perfectly to turn the xref marker system into a general navigation capability, I also had complete control over which navigation functions push a marker and which do not.

I think this is the difference with Emacs. Not only is it primarily a lisp environment and then secondarily a text editor, but it goes above and beyond to add general capabilities for modifying its own behavior. With most any other piece of software I can think of, you are relying upon the developers to provide you with the exact APIs to control the software. With Emacs, you control the entire lisp environment, and therefore control the editor running within it.

edit: Siri typo