Skip to main content

The Strange Case of Emacs, # and the UK Keyboard

Programmers typing on the UK Mac keyboard have a problem with #

# is commonly used in programming languages and the Mac UK layout puts # on ⌥ 3 (Alt-3), as opposed to Shift-3 on the US layout or Windows UK layout.

This is a particular problem in Emacs, which interprets the ⌥ (Alt) key press as the Meta key and so Emacs receives M-3 instead of #.

My first approach was just to make M-3 insert #:

(define-key brf-mode-map "\M-3" (lambda () (interactive) (insert ?#)))

This hoses bookmark 3 in brf-mode, but losing one bookmark seemed like a compromise I could live with.

However it turns out this was a pretty dumb idea (😖), as it stops all the uses of # other than inserting, for example searching for # ! It also stops me typing the command for server-edit (C-x #), which is a very common usage for me.

Looking around the web, people had some "creative solutions" for this problem:

Inserting # handling into all the various keymaps

This seems to be the most popular "solution", but for me this is like playing "whack-a-mole" and doomed to failure (apart from being really ugly). You really want to do the translation at a much earlier stage in the input chain.

Pretending to be Australian

The Mac Australian layout is identical to the UK layout, but # is back on Shift-3 (and £ is removed). While this works well unless you want to type a £, having the Australian flag permanently displayed on my Mac menu bar is step too far for me 😀

Changing Low-level Keyboard Translation

This looks a lot more promising, as the earlier in the input chain you do the translation the better:

(define-key key-translation-map "\M-3" "#")

This still hoses Bookmark 3 for me, but will work well for most people.

Make Emacs ignore Right Alt

Emacs for MacOS has some specific settings of how the meta keys are handled. One of which is to ignore the key press (ie don't interpret it as a meta key press).

So I decided to ignore the right ⌥ (Alt)  key with:

(setq ns-right-alternate-modifier (quote none))

This means I can use right ⌥ (Alt) for # and € and retain left ⌥ (Alt) for normal Emacs usage, like brf-mode Bookmark 3.

This is a great solution for my usage, but your mileage my vary!

Comments

Popular posts from this blog

My Work in new Top Trumps Birds of Prey Pack

The new Top Trumps "Birds of Prey" pack has my picture illustrating the Secretary Bird card 😀 Here's the original picture: From Flickr

On BBC Springwatch !

BBC Springwatch featured one of my Goldfinch pictures last night: Goldfinch on Springwatch Shame they spelt my name wrong though! See the original on Flickr.

Emacs and MacOS Catalina

Catalina introduced a lot of security changes and the most intrusive is probably all the popups asking to give permission for apps to access directories under Home, like Documents. Worse still, apps which weren't written to handle the new security measures might just fail silently with no clues for the user. A solution is to give apps like Emacs "Full Disk Access" under "Security & Privacy" in Preferences, to give unfettered access to your files and avoid all the popups and silent failures. Sounds good, but that doesn't actually work for Emacs because "Emacs" in the app bundle is actually a Ruby script which decides which flavour of Emacs executable to run. This never mattered before, but it does under Catalina because MacOS thinks the executable is /usr/bin/ruby . Conventional wisdom is therefore to give "Full Disk Access" to Ruby. While this does work, I've always been uncomfortable giving all Ruby scripts full access...