Emacs: Remapping Keys Using key-translation-map

By Xah Lee. Date: . Last updated: .

If you want to define a key for inserting a Unicode character such as BULLET , the best way is to use key-translation-map.

Here's how to set a key to insert bullet character:

(define-key key-translation-map (kbd "<f8>") (kbd "•")) ; 【F8】 insert bullet char

Here's how to set a key sequence to insert different Unicode characters:

;; set keys to type Unicode
(define-key key-translation-map (kbd "<f9> u <down>") (kbd "↓"))
(define-key key-translation-map (kbd "<f9> u <left>") (kbd "←"))
(define-key key-translation-map (kbd "<f9> u <right>") (kbd "→"))
(define-key key-translation-map (kbd "<f9> u <up>") (kbd "↑"))

You can use it to swap keys.

;; swap keys
(define-key key-translation-map (kbd "<f11>") (kbd "<f12>"))
(define-key key-translation-map (kbd "<f12>") (kbd "<f11>"))

(info "(elisp) Translation Keymaps")

Problem Using global-set-key

You could also use global-set-key, but it has problems.

;; using global-set-key to insert unicode arrow. This won't work when in isearch
(global-set-key (kbd "<f8>") (lambda () (interactive) (insert "→")))

When you do interactive search Ctrl+s, then when you type your key, it'll exit the search instead of inserting the char.


Note: there's the function keyboard-translate. However, it is designed to translate character only. So, key combination isn't a character and you can't use it for Hyper key combination. (Due to historical reasons, keyboard-translate does work for some Ctrl combination key. (thanks to Stefan Monnier [http://www.iro.umontreal.ca/~monnier/] and Deniz Dogan for this tip. (http://groups.google.com/group/gnu.emacs.help/msg/e0dc12074c776bda)))

ErgoEmacs mascot-s276x226
Buy Xah Emacs Tutorial

Emacs Keys



Key Tips

Emacs Pinky

Keybinding Design