10

我最近在M-left这里得到了修复等方面的帮助:终端元箭头键绑定中的 emacs,但无法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])))  

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

4

2 回答 2

13

当 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,emacs -Q -nwESC [ 4 ~我按 END、ESC O AUp 和ESC [ AShift-Up 时会出现。(要查看 Emacs 得到的键码,请按一些按钮,然后按C-h,l。)对于以相同顺序的相同键,cat[4~[A[OA...所以 Up 和 Shift-Up 奇怪地颠倒了。


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

您应该能够通过以下方式解决此问题:

(define-key input-decode-map "\e[1;2A" [S-up])

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

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

于 2012-08-12T17:40:31.490 回答
3

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

于 2014-05-20T16:40:28.790 回答