1. 38
  1.  

  2. 11

    This article is much more than its title. It ties together a lot of interesting threads about project values, what emacs/vim/neovim/vscode all stand for, discusses software freedom and the evolution of mature projects, and more. Long, but highly recommended.

    1. 3

      I think the title is intended as being very tongue-in-cheek! But yeah, great article.

      1. 6

        I think the title is intended as being very tongue-in-cheek!

        You got it.

        But yeah, great article.

        Thanks Phil. You’re one of my inspirations for starting to use Emacs by the way :)

        1. 5

          I think the title is intended as being very tongue-in-cheek!

          You got it.

          No doubt. I just wanted to make sure it wasn’t being overlooked because of that.

          1. 1

            nods

            Props for going through the whole thing!

          2. 4

            “Now, back to work. What was I doing again? Oh yeah, let’s open that file.”

            That was a really great payoff for those of us who made it to the end :)

            1. 6

              Heh. Funny thing, when I started writing the essay I had the first and the last sentence ready. From there, I only had to fill in the middle… which took a few months.

          3. 1

            I hadn’t actually finished the article when I posted this yesterday. =)

            It is very easy to either freeze Emacs or cause it to run very slowly. Multiple times a day I have to hit C-g incessantly to bring it back from being frozen. When that fails, I am sometimes able to get it back with pkill -SIGUSR2 Emacs. At least once per week I have to pkill -9 Emacs because it turned completely unresponsive.

            This is wild for me to hear! I run Emacs as my entire window manager, and the situation of having to cancel a long-running operation with C-g happens … maybe a couple times a month for me. I wonder if the situation for the author is worse because he’s running it on a proprietary platform, or is there some other confounding factor?

            1. 2

              Off the top of my head, my main culprits for freezes and slowdowns are (1) Tramp, (2) Flycheck+Tramp interactions, (3) accidentally opening files with long lines (the many mitigations don’t seem to work consistently), (4) magit with large git repositories (especially via Tramp) and (5) eshell output with long lines.

              1. 1

                In that case this is a nice validation of my choice to run Emacs over SSH. =)

                I have a similar situation where all my work stays on my work computer (which is fast and has a lot of ram, but has a terrible display) so I use my personal laptop most of the time. Using Emacs inside mosh+tmux allows me to maintain the illusion that it’s all local; when I wake my laptop up the connection is re-established in a second or two.

                The only downside is that pressing enter on URLs can’t open them in my local browser, so I have to handle that part using my terminal emulator. So far urxvt is the only one I’ve found that allows me to open URLs without using the mouse, so I’ve stuck with it all these years.

                1. 2

                  I’ve recently switched to Emacs over SSH for work too. It works surprisingly well, but I do miss the graphical interface, especially for posframe and Org. Also, I still have to configure my terminal app so that I can use the command key for the Emacs meta and have yanked text be put into the system clipboard.

                  I’m curious if you have any ideas or reactions to “The values of Emacs” or “From catching up to getting ahead”. Were the arguments and characterizations fair? Does the “Emacs wishlist” intersect with what you envision for the future?

                  1. 2

                    but I do miss the graphical interface, especially for posframe and Org

                    I’m not a big Org user but I’ve noticed that Org has some curious key bindings; is the main problem that these can’t be represented within the limitations of terminals?

                    I’m curious if you have any ideas or reactions to “The values of Emacs” or “From catching up to getting ahead”.

                    I agree with your characterization of the values, except I might frame it differently. To me the most important thing about Emacs is a combination of extensibility and introspectability, but those two words on their own don’t really capture it fully; it’s the “live-ness” of the extensibility and introspectability. If I had to sum it up in one word, the only word I can think of is “smalltalkness”. The seamless reprogram-as-you-go-ness.

                    When it comes to the specifics of competing with VS Code, I’ve long ago made my peace with the idea that I lost the ability to put my head in the place of the “typical new user” and so it’s difficult for me to look at VS Code and see what it is about it that has caused it to become so successful; all I can see is a program that isn’t built around the quality of smalltalkness. That one factor has become so dominant in my view that it obscures everything else. (Similarly my view of LSP is colored by the fact that it’s emphatically not repl-driven and that the implementations I’ve seen for things like Clojure do a poor job of a lot of core functionality that we have long had great repl-based tooling for, so I never bothered to set it up.)

                    I realized while reading that section that Doom and Spacemacs functionally acts as Emacs forks in some less-severe ways; like XEmacs their popularity places pressure on the mainline Emacs to modernize and change with the needs of newer users. I had never really thought about it in those terms before.

                    As for the wishlist, I think I am less concerned with single-core efficiency; the main thing I would like to see is a kind of actor-based system. Multi-core support in Emacs that uses threads with shared memory is just a fundamentally doomed idea, but splitting off threads that use message passing to communicate seems promising, especially if you could send a buffer to another thread (and lose access to it from your current thread). The compatibility problems this brings are serious and severe, so I can understand why not a lot of progress has been made.

                    The rendering engine is something I abstractly see as needing a lot of improvement, but it’s not a pain point I run into personally. Same with stability; I can’t remember the last crash I witnessed; it’s probably been around two years.

                    From a language level I would love to see a good module system. That could be done in an incremental way and allow for much cleaner patterns around hiding implementation details. I would also like to see a good associative data structure; hash tables have always been an absolute disaster when I’ve tried to use them. But admittedly I haven’t kept up with the new core functions so maybe it’s gotten better.

        2. 7

          I’ve used emacs for years and I still managed to learn some tricks from the first section. The rest is insightful. Upvoting both for the effort put into this and the actual content.

          1. 3

            Emacs runs either as a standalone graphical application (GUI) or in a terminal emulator (TUI).

            Also as a batch job (useful for accessing elisp from scripts).

            1. 3

              The article is so refreshing and synthesize a lot of moving parts that were in my head. Thank you mpereira ! I passed by some many mental states and “Oh” and “Ah” moments reading it. In a way, I wish I had invested the time to be able to use emacs as in the first part and be able to treat emacs interface as the main interaction interface for my computer use. On the other part, I invested my time in a lot of different stuff making me learn more specialized tools one at the time based on needs and habits.

              I remember the feeling of being mesmerized the first time I discovered lisp environment, smalltalk environment, emacs and after that pandoc also (for some different reason). One to rule them all design have something magical.

              1. 2

                I’m glad you enjoyed it!

                I wish I had invested the time to be able to use emacs as in the first part and be able to treat emacs interface as the main interaction interface for my computer use

                For what it’s worth, knowing how to use the profiler and how to interpret the results is more than half the battle.