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)))

Put $5 at https://www.patreon.com/xahlee , or goto paypal.com and pay to Xah@XahLee.org . Message me on XahLee discord, say so, ask me questions.
Or Buy Xah Emacs Tutorial

Emacs Tutorial

Emacs Init

Emacs Keys


ELisp Examples

ELisp Write Major Mode

Emacs Keys



Key Tips

Emacs Pinky

Keybinding Design