shift向上箭头不会突出显示文本emacs iterm2

时间:2012-06-03 15:52:44

标签: emacs terminal

我最近在此处帮助修复M-left等等:emacs in terminal meta arrow keybindings,但无法使用类似解决方案修复Shift-up。当我尝试shift-up时,我收到错误<select> is undefined。我尝试使用以下方法重新映射它:

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

但转变仍未定义。我还尝试使用从cat返回的转义序列^[[1;2A来设置重新绑定密钥。奇怪的是,降档确实有效。 shift-select-mode也标有t

2 个答案:

答案 0 :(得分:10)

这听起来像是我通过Putty访问Ubuntu 12.04机器的麻烦,当END导致Emacs 23.3.1说<select> is undefined时。结果是terminfo的一个问题,它允许程序以独立于设备的方式使用终端。

基于此2008 bug report discussion,我通过将以下内容添加到〜/ .bashrc的顶部解决了我的问题:

#so the END key will work correctly in Emacs over PuTTY
TERM=xterm-vt220

注意,对于xterm-vt220或默认xterm,当我按下END时,emacs -Q -nw正在ESC [ 4 ~,而ESC O A代表Up,ESC [ A代表Shift-Up 。 (要查看Emacs获取的密钥代码,请按某些按钮,然后按C-h,l。)对于相同顺序的相同密钥,cat[4~[A和{ {1}} ......所以Up和Shift-Up奇怪地相反。

<小时/> 如果您不想更改terminfo,请参阅此讨论以获取解决方法 http://lists.gnu.org/archive/html/help-gnu-emacs/2011-05/msg00211.html

  

您应该可以通过以下方式解决问题:

     

[OA

     

为了让它在正确的时间生效,你必须在你的.emacs中使用:

     

(define-key input-decode-map "\e[1;2A" [S-up])        (if (equal "xterm" (tty-type))

答案 1 :(得分:3)

只是添加有关解决方案的更多信息: https://github.com/arthurnn/dotfiles/blob/8d56f2419da9a4cb654d8941f379d6d5783bdb90/.emacs.d/init.d/setup-bindings.el#L3-L10这应该可以解决包括emacsclient在内的所有情况。 最后一行负责在使用emacsclient时修复Shift-up。