Emacs: Remapping Keys Using key-translation-map

Buy Xah Emacs Tutorial. Master emacs benefits for life.
, , …,

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

Example of using define-key with key-translation-map:

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

More examples:

;; 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 and Deniz Dogan for this tip. (http://groups.google.com/group/gnu.emacs.help/msg/e0dc12074c776bda)))

Like it? Buy Xah Emacs Tutorial.
blog comments powered by Disqus