Search code examples
emacselisp

"Emacs Pinky" :: Batteries Included Solution?


I started getting RSI and I was browsing around for solutions when I read this:

What is the best way to avoid getting "Emacs Pinky"?

I love the solution of Mapping spacebar as both space and control but here's the problem:

I usually travel around a lot and don't have access to one computer. I make edits to my documents on several different computers where I don't have root access (heck, I don't even have normal access in some).

Is there a batteries included way of implementing the space bar solution? A small lisp code maybe?


Solution

  • (this is way too long for a comment but it may help you)

    The space bar solution looks interesting although, at first sight, a bit too "hackish" for me but I may try it out...

    Anyway I'd say the "Emacs pinky" problem is due to the default Emacs shortcuts, which have to be one of the most pain-inducing and RSI-provoking shortcuts ever conceived for a program (and this comes from a big Emacs fan so don't take that as Emacs criticism).

    There are way too many defaults shortcuts that require using the pinky: CTRL-p (previous-line) comes to mind. That's two pinkies for you and it's supposed to be so smart because 'p' stands for 'previous'. All the C-x something and C-c something require way too much finger stretching too and I find M-x to be a terribly inneficient shortcut too...

    I know this may comes as heresy, but quite some people are happy to use Emacs with vim-style navigation and, honestly, I can't blame them.

    Personally I love the fact that under Emacs everything is configurable and so I came up with a personalized configuration that tries to:

    • minimize hand/fingers and pinky movements
    • maximize use of the "strong fingers"
    • maximize use of keys on which the fingers are already located ( (a)sdf and jkl(;) on a QWERTY keyboard, but 'a' and ';' means using the pinkies

    I'm not against using the pinkies once in a while: but to me it's the repetition of way too many pinkies usage that may damage your hands.

    So, as an example, instead of using CTRL-{p,n,f,b} to move around I use:

    • ALT-{i,j,k,l} (moving hands to the arrow keys is a big no-no).

    • ace-jump-mode

    If you've never used ace-jump-mode you probably want to use it. It's one of the biggest time saver for Emacs. I've bound ace-jump-char-mode to M-e, which means I can get to any character I can see in a buffer in four or five keystrokes (including the two needed to hit M-e). This beats using CTRL-{p,n,f,b} any day and shall definitely help save your pinkies.

    One may get fancy and modify ace-jump-mode so that the actual jump (the last keystroke) is performed without ever needing to hit a key requiring the pinky: looking at the source it looks quite easy (but then in some cases you'll need to use one additional keystroke: in any case this shall still be much faster than manually navigating around).

    Here's a two minutes demonstration as to how to blazingly fastly jump around using ace-jump-mode (but even that great video doesn't do that mode justice: you really have to use it to realize how great it is):

    "Emacs rocks! Episode 10: jumping around":

    http://emacsrocks.com/e10.html

    And then in addition to C-x and M-x, I've added C-, and M-, to act as C-x and M-x.

    For example:

    (define-key global-map [(control ,)] ctl-x-map)
    

    I'd say that whether you find or not a portable way to use your SPC as a CTRL, you may also want to look in alternatives to C-{p,n,f,b} and C-x / M-x ('x', even if it's not requiring the pinky, is not very convenient IMHO).

    tl;dr

    To save your pinkies you can either:

    • turn on some ready-to-use vim-style mode

    • or spent the time needed to (re)configure entirely your Emacs to your liking and so that it stops destroying your pinkies (which may implies, but would not be limited to, using SPC as a CTRL if you find a portable way to do so)

    In addition to that you may want to use emacs modes (like ace-jump-mode) allowing to save many keystrokes.