2
votes

I am trying to override Meta + left / right arrow keys in my emacs config and cannot figure out how to refer to the key sequence.

If I interact with Emacs directly I can type "M-x, global-set-key, M-, next-buffer", and it works fine. But I can't figure out how to type this into my init.el file. These are some things that I have tried:

(global-set-key "\M right" 'next-buffer)
(global-set-key "\M <right>" 'next-buffer)
(global-set-key [\M right] 'next-buffer)
(global-set-key [M right] 'next-buffer)
(global-set-key [M-right] 'next-buffer)
(global-set-key (kbd M-<right>) 'next-buffer)
(global-set-key [M (kbd <right>)] 'next-buffer)

etc.

More Info:

OK, this does work natively: (global-set-key [M-right] 'next-buffer) (thank you) - it's not working on iTerm2 in a VM (minor detail :) And for that environment: M-x describe-key does not open help but in *Messages* prints: ESC <right> (translated from ESC M-[ C) is undefined

And that's why I was confused and was not able to just paste that into kbd. And that's why I don't think it is being trumped by another mode.

2
(global-set-key [M-right] 'next-buffer) works for me, so you probably have a major-mode or minor-mode that is trumping (taking precedence) over the global setting. Type M-x describe-key and then M-right and update your question or post a comment with the result. Also, provide what major-mode you are running and minor-modes that are active. You can type M-x describe-mode to find out all of that information. - lawlist
Re: edit, why do you say you were not able to use either (kbd "ESC <right>") or (kbd "ESC M-[ C") ? - phils
"why do you say..." sounds like M-x doctor - ray

2 Answers

4
votes

The easiest way to specify a key binding is always to use kbd.

(global-set-key (kbd "<M-right>") 'next-buffer)

kbd takes as argument an external key description, i.e., what Emacs tells you when you use C-h k.

Use C-h k, press and hold the Meta (e.g. Alt) key, and hit the right arrow key. Buffer *Help* tells you that this key sequence is written "<M-right>". So that's what you pass to kbd.

0
votes

Solved: (global-set-key (kbd "ESC <right>") 'next-buffer)

Thanks - I needed the combination of kbd and what to pass it.