Like many avid users, I essentially live in Emacs and have been for over twenty years. What a home it is! I love that I can move a wall, tweak the plumbing, landscape the yard just as I like it whenever I need to. While at times our relationship has bordered on obsessive, Emacs has helped me be efficient and effective at what I need to do.
I use Emacs on Linux and Mac OS X, currently versions 23 and 24. I spend a large portion of every day in Emacs, more than in any other application, with only Firefox even in the running and that a distant second. Within Emacs, I make heavy use of OrgMode, Icicles, Yasnippet, AucTeX, EmacsSpeaksStatistics, SLIME, CEDET, W3M, and WinSwitch.
My packages that are currently on the wiki:
Packages in Progress:
Using Emacs regularly leads you think about software technology differently, to expect that the software environment adapt to you more than you must adapt to it. *ATTN:more of this rant/musing coming soon, gotta run now*
Other Emacs Related Items
Emacs’s massive customizability is central to its facilitating an efficient working environment. You can tailor the environment and interface to your style, memory, usage patterns, and tasks. The first layer of customization people encounter and the one that has the most immediate effect on the user experience is individualized key bindings.
I have experimented regularly over years, tweaking and adjusting my keybindings for coherence and efficiency, and I make heavy use of non-standard keys. There are many who believe that one should definitely stick to the standard bindings for the main global keys. I reject that view because I think significant mnemonic and physical efficiency can be wrung out of adapting the keybindings to one’s own style – especially for the most commonly used navigation and other global keys. And while I’m sure the standard keys were carefully thought out, they are still arbitrary, and many just don’t work well for me. The problem – really the irony given the customizability of Emacs – is that using non-standard keys for the most frequently used commands imposes a cost on the user. Every package that hard-codes C-w or M-v, for instance, forces me to add a hook to rebind those keys, which is a bit of overhead I’d rather avoid. I think this problem is unnecessary. Below, I show some of the non-standard bindings that I find most useful along with some of the rationale for them. (This is just for information sharing purposes; I’m live-and-let-live when it comes to keybindings.) Then, I propose, soon with some code to back it up, a mechanism to solve that problem – an abstraction of the most common functions one level higher up and an interface for package writers to avoid the hard coded global key problem.
The following are some non-standard bindings that I find useful and efficient, along with some of my rationales for them.
delete-backward-char and backward-kill-word much more, and it’s especially handy to have both of those on a nice home key. This minimizes pinky use and gives a noticeable increase in efficiency. Hence, I bind: C-M-h to help-command (and set ‘help-char’ to that as well)C-h to delete-backward-charM-h to backward-kill-word C-v/M-v combination for scrolling annoying and slow because the change is on the modifier keys which are usually pressed by the pinky or other weaker fingers. I also like to have access to beginning-of-buffer and end-of-buffer, which I also use a lot. (I don’t have a home key on my keyboard but also would prefer not to move that far.) Instead I use C-v/C-w for the scrolling pairs and M-v/M-w for the beginning and end of buffer pairs. This keeps the modifier thematic and is spaced for quick execution. In particular, I bind C-v to scroll-up-or-beg (like scroll-up but moves to beginning of the buffer near the top instead of signaling an error)C-w to delete-backward-charM-v to end-of-bufferM-w to beginning-of-buffer You probably meant something like ‘scroll-down-command’ for ‘C-w’ above.
C-w for kill-region, I associate the most common kill commands to k: C-k to kill-lineM-k to kill-regionC-M-k to kill-sexpC-S-k to kill-sentenceC-M-S-k to kill-paragraph C-u followed by a number. The good news is that this opens up prime territory for useful key bindings. I use most of the C-number for common operations. I leave C-- and C-0 as negative and zero arguments because they come up from time to time, but the rest I almost never used until I bound them to keys. For instance: C-3 to kmacro-start-macro-or-insert-counterC-4 to kmacro-end-or-call-macrC-5 to query-replaceC-6 to query-replace-regexpC-7 to align-regexp C-x C-m to execute-extended-command. It’s just a little faster than M-x.A simple proposal to make the cost of using non-standard bindings negligible without sacrificing backward compatibility.
Coming Soon
‘Wysent’ in the SemanticBovinator is great, but speed and integration, especially for on-the-fly parsers are still an issue.Page Still Under Construction
Welcome to the wiki! – AlexSchroeder
Thanks! I really appreciate this site and the work you all put into it. It’s been indispensable to me. – ChristopherGenovese