Reputation: 21557
I've redefined key bindings for some basic movement functions in my init.el
file:
(global-set-key "\C-j" 'backward-char)
(global-set-key "\C-k" 'next-line)
(global-set-key "\C-l" 'forward-char)
(keyboard-translate ?\C-i ?\H-i)
(global-set-key [?\H-i] 'previous-line)
(global-set-key "\M-j" 'backward-word)
(global-set-key "\M-l" 'forward-word)
And in general (text editing) it perfectly works, but in some modes it executes multiple commands, e.g. in Buffer
mode when I press C-k aside from moving the cursor down Emacs marks the listed buffer for deletion. Also, when I call helm-prelude
with C-c p h and press one of these key bindings Emacs either doesn't react at all or, in case of C-k, clears the search bar. I thought that the purpose of global-set-key
was to bind commands to specific keys everywhere, am I wrong?
Upvotes: 0
Views: 64
Reputation: 30708
Local (e.g., major-mode) keymap bindings trump global keymap (global-map
) bindings. And minor-mode keymap bindings trump both of these.
There is a hierarchy of several keymap types that determines which maps take precedence. See the Elisp manual, node Controlling Active Maps
(and nearby nodes about keymaps). The full hierarchy is a bit complicated, but most of the time what you need to be aware of is what I stated in the preceding paragraph.
Upvotes: 1
Reputation: 41618
Yes, the global keymap is only used when there is no binding for the key being pressed in a local keymap. For example, the buffer menu mode uses Buffer-menu-mode-map
, where C-k
is bound to Buffer-menu-delete
.
You may have better luck using keyboard-translate
to translate these keys to the "normal" Emacs bindings for those commands, i.e. C-p
, C-n
etc.
Upvotes: 0