I recently had help fixing M-left
and so forth here: emacs in terminal meta arrow keybindings, but am unable to fix Shift-up
using a similar solution.
This sounds like a trouble I had accessing a Ubuntu 12.04 machine via Putty, when END caused Emacs 23.3.1 to say <select> is undefined
. That turned out to be an issue with the terminfo that lets programs use terminals in a device independent way.
Based on this 2008 bug report discussion, I solved my problem by adding the following to the top of my ~/.bashrc:
#so the END key will work correctly in Emacs over PuTTY
TERM=xterm-vt220
N.B., with either xterm-vt220 or the default xterm, emacs -Q -nw
is getting ESC [ 4 ~
when I press END, ESC O A
for Up, and ESC [ A
for Shift-Up. (To see what keycodes Emacs is getting, press some buttons and then C-h,l
.) For the same keys in the same order, cat
says [4~
, [A
, and [OA
...so Up and Shift-Up are oddly reversed.
You should be able to work around the issue with something like:
(define-key input-decode-map "\e[1;2A" [S-up])
And for this to take effect at the right time, you will have to use in your .emacs something like:
(if (equal "xterm" (tty-type))
(define-key input-decode-map "\e[1;2A" [S-up]))
Just to add more information about the solution: https://github.com/arthurnn/dotfiles/blob/8d56f2419da9a4cb654d8941f379d6d5783bdb90/.emacs.d/init.d/setup-bindings.el#L3-L10 this should fix all the cases including emacsclient. The last line is responsible for fixing the Shift-up when using emacsclient.