This is an introduction to my setup to avoid Repeat Strain Injury (RSI) in Emacs. It's very simple.
Here is a list describing how I use Emacs:
ESC..emacs.d but I also regularly check some popular
.emacs.d repos on GitHub. For example, Steve Purcell's emacs.d, Prelude,
and of course, the very popular Spacemacs.I mainly use Emacs on Arch Linux and I have a US layout laptop PC keyboard, which is probably not possible to be replaced by other more ctrl-friendly keyboards.
Only two steps are needed!
This can be achieved by different tools on differnt platforms. I use xcape in
Arch Linux. Just install it from AUR, and use the following script(found in
xcape's README) to use Space as both SPC and Ctrl:
# Map an unused modifier's keysym to the spacebar's keycode and make it a # control modifier. It needs to be an existing key so that emacs won't # spazz out when you press it. Hyper_L is a good candidate. spare_modifier="Hyper_L" xmodmap -e "keycode 65 = $spare_modifier" xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default xmodmap -e "add Control = $spare_modifier" # Map space to an unused keycode (to keep it around for xcape to # use). xmodmap -e "keycode any = space" # Finally use xcape to cause the space bar to generate a space when tapped. xcape -e "$spare_modifier=space"
Now you can now hold down the Space key to use it as the Ctrl key. You can
reach the Space key by your thumb without any problem. On a regular PC, Alt
keys are beside the Space key, so you can easily press either Ctrl (remember
it's Space now!) or Meta. To produce a real space, just press the Space
key and release it, without holding it.
I Never use Escape in Emacs, then why on earth do I ever want to swap Caps
Lock with Escape? Actually, Escape key in Emacs is kind of special. You
don't need to hold down the Escape key while using the key bindings starting
with ESC, which is very different from Ctrl and Meta. I don't know how
Escape key event is generated in Emacs or in X11, but from a user point of
view, it is quite like other non-modifier keys. You press it down and release
it, one key is generated. This is really nice since we can then use it as the
"leader" key for the Emacs just like the Space key in Spacemacs.
So first, let's swap Escape and Caps Lock so we can easily reach Escape by
our left pinky. I use setxkbmap:
setxkbmap -option caps:swapescape
Then remap ESC to C-c since it is the standard prefix key reserved for
users:
(define-key key-translation-map (kbd "ESC") (kbd "C-c"))
So why is this useful? If you like the way Spacemacs organizes its key bindings,
you can replace its key bindings with C-c as the prefix instead of Space,
since all the single letter key bindings starting with C-c are reserved for
users. Now let's assume that you bind C-c b b to behave like SPC b b, which
is helm-mini in the case of Spacemacs. You can press the key bindings in
following ways(note ESC has been remapped to C-c and swapped with Caps
Lock so you can easily press it by your left pinky):
ESC, b, b, just like SPC, b, b, one keystroke at a time.ESC and b at the same time and then release ESC and press
b, just like how you would press C-x b.ESC and press b, b, just like how you would press C-x
C-x.
The latter two are valid because ESC key event is only generated once, but I
would just use the first one because in that case the pinky doesn't have to be
in a stressed state by holding down some key. Just press it and release it. No
extra effort needed. What's more, the Escape key, after swapped with Caps
Lock, is almost as easy to be pressed as the Space key! And there is one
addtional benifit: it is more robust since if you accidentally press your
keyboard in the second or the third way, you can still generate the key sequence
you want! You can now imagine you use Escapemacs because Escape is taking
the role of Space in Spacemacs.
Sorry, I lied. Actually we need an additional step:-). Why? Because we use
Space as both Space and Ctrl. We should carefully think about how to deal
with key bindings that contain Ctrl and Space. Of course, you can use the
physical Ctrl key in this case, then you don't need any addition step. For me,
I rebind those commands to C-c SPC, and combined with other packages such as
hydra and expand-region.
(defhydra hydra-mark (:body-pre (call-interactively 'set-mark-command) :exit t) "hydra for mark commands" ("SPC" er/expand-region) ("P" er/mark-inside-pairs) ("Q" er/mark-inside-quotes) ("p" er/mark-outside-pairs) ("q" er/mark-outside-quotes) ("d" er/mark-defun) ("c" er/mark-comment) ("." er/mark-text-sentence) ("h" er/mark-text-paragraph) ("w" er/mark-word) ("u" er/mark-url) ("m" er/mark-email) ("s" er/mark-symbol) ("j" (funcall 'set-mark-command t) :exit nil))
key-chord-mode, avy and hydra
key-chord-mode is great. You can press two key strokes quickly to invoke a
command. I have defined many key chords, quite similar as what you can find
on other people's blog on key-chord-mode, such as xf to open a file, xs
to save a buffer and bb to switch buffers. I bind jj to change to a
simple VI mode which is defined by hydra, and jk to avy-goto-word-1.
avy is a really awesome package. It helps you quickly navigate in the
visual area. I can't live in Emacs without it. Thanks to abo-abo for creating
so many useful packages(hydra, avy, ace-window, lispy, ace-link, etc.)!
I know someone would always recommend me to use Evil to avoid RSI in Emacs.
Evil is awesome, but I thought for me, it is too heavy-weight. I used to use
Evil very often, and I used Emacs key bindings in insert mode. However, I
found that I stayed in insert mode too long because of my Emacs muscle
memory: all the C-a, C-e, M-f, M-b kind of commands to navigate the
buffers and of course I also heavily use avy. Although sometimes I do enjoy
using the VI's hjkl and other key bindings, I thought I don't really need
the power of Evil. So after hydra comes out, I used it to define a very
tiny and simple VI mode for myself, and that's just enough for me.
Just don't rebind Caps Lock to Ctrl. It harms your pinky.
[ UPDATE 2016-02-25 ] Note: This article describes only part of my settings because I think my own full key remapping settings might be too opinionated(and thus not that helpful). Here describes a little more.