I have just switched from using Emacs.app to emacs server and emacsclient in terminal mode using iterm2 as my terminal emulator. I am having some trouble with some keybindings though. Particularly M-left arrow prints the character D, M-right arrow prints C, M-up arrow prints A, and M-down arrow prints B. M-ret seems to work though, at least for org mode. I am using the xterm defaults for keys in iterm2 and have the left and right option keys bound to +Esc. I can get the M-left functionality in org-mode with Esc-left or Esc-right This is particularly annoying in org-mode. Am I going to have to just rebind the keys in my .emacs? How would I go about doing that?
I have looked at this http://orgmode.org/manual/TTY-keys.html#TTY-keys, but I don't understand why the arrow keys should be unavailable in the terminal.
edit:
Cat meta-up: ^[[1;9A
Cat meta-down: ^[[1;9B
Cat meta-right: ^[[1;9C
Cat meta-left: ^[[1;9D
Main problem solved, but I am now having trouble with shift-up
. "<select> undefined"
. I tried a similar mapping with the escape sequence I got from cat
: ^[[1;2A
. Reluctant to create another question for a similar problem.
The META key is sometimes labelled ALT . If you do not have it, press ESCAPE instead, followed by, say, x . frame: the rectangular "area" in which Emacs runs; Emacs starts with only one, but you can create more (look under the menu Files, or type C-x 5 2 ).
Meta is Alt in Practice By default on all major operating systems in use (Windows, Linux, OS X), emacs maps its Meta to Alt key. So, practically speaking, the Meta key is the Alt key.
Solution 1
Based on the info you provided here's one thing you can try. You tell emacs to map those escape sequences to the proper key sequences:
(add-hook 'term-setup-hook
'(lambda ()
(define-key function-key-map "\e[1;9A" [M-up])
(define-key function-key-map "\e[1;9B" [M-down])
(define-key function-key-map "\e[1;9C" [M-right])
(define-key function-key-map "\e[1;9D" [M-left])))
Solution 2
I also found another possible solution with a little googling: redefine the iTerm bindings instead to match what emacs is looking for.
http://offbytwo.com/2012/01/15/emacs-plus-paredit-under-terminal.html
Quote from the above page:
Go back to the profile key bindings under iTerm2 and add bindings for the following:
M-up : Esc-[1;4A
M-down : Esc-[1;4B
M-right : Esc-[1;4C
M-left : Esc-[1;4D
I'm answering in reply to your 'main problem solved, but new one' edit.
I found this guy's blog post on this issue: - http://webframp.com/emacs/2013/02/22/fixing-emacs-bindings-on-the-in-iterm2/
Basically, you can use the 'run cat' and push buttons trick to see what escape codes are getting sent by your system/terminal, then add 'define-key' lines to define M-{up,down,right,left} and also M-S-{up,down,right,left}.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With