Emacs keyboard configuration on Mac
A rite of passage, and some would say trial by fire, of working with Emacs on Mac, is getting your keyboard configuration set up correctly. The actual setup depends on your needs. For example, things might be simpler if you only ever use Terminal Emacs. Although I mostly use Emacs in the terminal, there have been a number of occasions where working with the Desktop (Cocoa) version of Emacs is useful - mainly when I wanted to copy and paste large blocks of code to another app. This is tricky with the terminal version of Emacs, especially when you have split frames. I also used to be an avid user of Aquamacs before I had problems with upgrading it, so a cross-Emacs configuration is certainly a very nice thing to have.
This article assumes you know a bit about Emacs such as the importance of the Control and Meta keys as used for correct Emacs operation.
Getting a '#' character
When you start using Emacs on the Mac, one of the first issues you run
into is how to get the darn '#' character to work! It seems like such a
basic thing. But many fall at this first hurdle. The easiest solution
I have come across is to insert the following line of Elisp into your
;; get hash key working on Apple Mac! (global-set-key (kbd "M-3") '(lambda () (interactive) (insert "#")))
Ah, so now we have a working '#' character at least! Or do we?
The problem at this point, if you are running Emacs in a terminal, is
that the key combination you use to insert a '#' character is the Mac
option key followed by the '3' key, also marked '£' and '#' if you
are in the UK. In other countries this may well be
different. Sigh. Another complication.
option key is normally designated as the very important
Meta key in Emacs. On PC type keyboards the
option key is actually
alt key and is also next to the
Ctrl key which makes it very
convenient for Emacs users. Both Ctrl and Alt keys, or
they are usually designated in Emacs are the two most important keys
So, for example, to execute a command in Emacs you would use
where M is the Meta key, which is the
option key on Mac. There is
thus a conflict here where Mac wants to use the
option key as, well,
the option key, and Emacs wants to use it as the Meta key.
So, how to get around this conflict between Option and Meta in the terminal?
Well there's a sneaky little keyboard config option in the Terminal Preferences (Terminal/Preferences/Keyboard) known as 'Use Option as Meta key'. Make sure that checkbox is ticked and lo and behold your option key now works correctly as the Emacs Meta key.
Start and end of buffer hot keys
If you only ever use the terminal version of Emacs then everything is plain sailing, more or less, from now on.
Let's look at an example.
I personally find the default key options of
M-> to be
awkward as they require the use of the shift key. You can fix that
(global-set-key (kbd "M-,") 'beginning-of-buffer) (global-set-key (kbd "M-.") 'end-of-buffer)
Here you are using the same keys but without the for the additional shift.
But I prefer the use of
M-down (Meta with the arrow
keys). So you want to configure
M-up as 'go to start of
M-down as 'go to end of buffer', you could use some
config such as:
(global-set-key [27 up] (quote beginning-of-buffer)) (global-set-key [27 down] (quote end-of-buffer))
You can now easily jump to the start or end of a buffer with
M-down (Meta and up arrow key or Meta and down arrow key).
This works well in the Terminal version of Emacs. However, if you then use the desktop version of Emacs on Mac this will not work. Oh dear...
When you fire up the Desktop version of Emacs you'll find the previous
key setup no longer works - you can't jump to start and end of buffer
Well the first thing we did was configure Terminal to 'Use Option as Meta key'. Still, it should be possible to achieve the same effect. We are treating the Meta key slightly differently in the Terminal version.
You can achieve the same thing in the desktop version using a slightly different configuration:
(global-set-key [(meta up)] 'beginning-of-buffer) (global-set-key [(meta down)] 'end-of-buffer)
This fixes things. This won't work in the Terminal version as we
currently have it configured though due to that "Use Option as Meta
key" thing we checked. But the two configurations can remain in your
.emacs file and they will work quite happily together.
So we configured Emacs so the '#' key worked. We also configured
M-down for both the Terminal and Desktop version.
For your convenience here's the complete config:
;; get hash key working on Apple Mac! (global-set-key (kbd "M-3") '(lambda () (interactive) (insert "#"))) ;; Terminal Emacs (global-set-key [27 up] (quote beginning-of-buffer)) (global-set-key [27 down] (quote end-of-buffer)) ;; Desktop Emacs (global-set-key [(meta up)] 'beginning-of-buffer) (global-set-key [(meta down)] 'end-of-buffer) ;; Also convenient (global-set-key (kbd "M-,") 'beginning-of-buffer) (global-set-key (kbd "M-.") 'end-of-buffer)
I can't pretend that keyboard configuration for Emacs on Mac isn't something of a Battle Royale, but with a bit of playing around you will get something that works for you in the end. I will keep playing with it - eventually I will get the "Perfect Emacs Configuration", but don't hold your breath on that one! :)