I spent a good six hours today using Emacs. It's by far one of the most infuriating pieces of software I've ever used.
Just to get this little question out of the way, can anyone tell me why when I hit backspace 10 times to delete a 10-letter word in Emacs, it adds 10 undo actions to my undo history? Can that ever possibly be what someone wants? This is the action of MS Visual Studio, for God's sake. You KNOW there's something wrong when you're doing the same thing as Microsoft. Is this a consequence of not being a modal editor? Vim would combine all the text deletion all into one undo action, no matter what keys you pressed to delete the text.
I know the real Emacs answer is that instead of using the primitive Backspace key I should really type
CTRL-ALT-SHIFT-F12 ESC-TRIPLEBACKFLIP-] while simultaneously typing
CTRL-ALT-CAPSLOCK-WINDOWSKEY-OTHERCTRL-_ M * C TAB TAB D on another keyboard with my feet to invoke the
sexp-maybe-kill-eval-backwards-and-reindent command, but sometimes that big backspace key is kind of convenient.
But that's not my real problem today. My real problem is message Emacs windows. When I
C-c to compile/load a Lisp form sitting in one of my text file buffers, Emacs will do one of three things seemingly at random:
- Spew output into my REPL, including ERRORS, WARNINGS and STYLE WARNINGS. This is acceptable.
- Open a separate debugger window, if the Lisp I just loaded threw an error, to let me pick a restart. This is reasonable.
- Open a window called *compiler notes* that includes ERRORS, WARNINGS and STYLE WARNINGS. Pretty much the same thing that gets dumped into my REPL. Why?
The location of where one of those two random message windows appears is either below or above my text file's window. I can't figure out a deterministic way to predict whether it'll be above or below my text file, at any given moment.
However if I have two windows open at once, Emacs will pick one of MY windows and reuse it to display its messages at me. So then I have to C-x o, and bang on C-x b BUFFERNAME TAB to find my buffer again. When doing C-x b to get my buffer back, Emacs will always have a default buffer to switch to if I just hit Enter. About 15% of the time, it's the buffer I want. The other 85% of the time it's a random buffer that I don't want.
On that topic, Emacs is also too stupid to figure out that if I type
replTAB for my buffer name, I want the buffer named
*slime-repl sbcl*. Instead I have to type
*slime-replTAB, which means my hands get to search for asterisks and hyphens; the frequency with which I have to do this probably explains the searing pain in my hands and wrists right now. Vim on the other hand lets me
:b and type ANY part of a filename, and TAB cycles through all filenames that match. When you hit TAB in Emacs, instead it launches yet another obnoxious message window showing me the tab completions.
If I hit
q in any of these random message windows, it closes the message window. Sometimes. Sometimes it doesn't work and I don't know why. Most of the time these message windows steal focus from my text file, which means I can't even ignore them. But sometimes, it doesn't steal focus, and so I end up typing a bunch of q's into my text file.
Sometimes when I hit q it just whines that the buffer I'm trying to hit q in is read-only and does nothing. On the other hand, in my REPL window, parts that probably should in my opinion be read-only, aren't. I can type over top of previously-output compiler warnings and messages. And then things start getting all screwed up unless I'm very careful to undo it.
When I do manage to close all these message windows, sometimes I end up with two windows left open, and sometimes I end up with just one. So then I get to bang on C-x 2 C-x b BUFFERNAME TAB C-x o to get my second window back. Which will again be usurped by Emacs the next time it decides to barf compiler warnings at me.
Eventually I tried opening four or five windows, one to display everything Emacs could possibly think of nagging me with. But this doesn't work. Emacs cycles through ALL of my open windows to display its messages at me. First it'll use the top window, then the one under it, then the next one, then the next one.
So I tried to resize all the windows to a small size to get them out of my way. But funny enough, Emacs sucks at something as simple as resizing windows using the mouse. If you have four windows open, stacked vertically, and you drag the border of the bottom one with your mouse upward, as soon as it hits the border of the window above it, it stops. So to resize four windows, first you manually resize the top one, then the one under that, then the one under that, and finally the one under that. Vim on the other hand lets you grab any border and drag it to your heart's content, and it bangs the other window borders out of its way.
I just noticed there's also yet another buffer that's actually called
*messages*, but it never auto-appears so I don't want to think about it.
I must be doing something wrong, because there's no way any sane person could live with this behavior for more than a few hours of coding. This is ridiculous.