Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

shift up-arrow doesn't highlight text emacs iterm2

Tags:

terminal

emacs

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. When I try shift-up I get an error <select> is undefined. I've tried re-mapping it using:

(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;2A" [S-up])                                                                                                                                                
 (define-key function-key-map "\e[1;9D" [M-left])))  

But shift remains undefined. I also tried rebinding the key by setting it using the escape sequence returned from cat which is ^[[1;2A. Oddly enough shift down does work. shift-select-mode is marked at t as well.

like image 761
Zach Avatar asked Jun 03 '12 15:06

Zach


2 Answers

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.


If you don't want to change your terminfo, see this discussion for a workaround http://lists.gnu.org/archive/html/help-gnu-emacs/2011-05/msg00211.html

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]))

like image 121
beaslera Avatar answered Oct 13 '22 01:10

beaslera


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.

like image 36
Arthur Neves Avatar answered Oct 13 '22 01:10

Arthur Neves