Emacs: Remapping Keys Using key-translation-map
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.
keyboard-translate
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)))