我最近在此处帮助修复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
。
答案 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。