为什么 Shift+arrow 绑定在 emacs 终端的 clojure 模式下不起作用?



如果我在终端中运行emacs(即用emacs -nw在iTerm2中启动emacs)使用windmove和它的默认绑定,我应该能够使用Shift+ 的各种组合在窗口之间导航。此外,paredit的绑定涉及Ctrl/Meta+CCD_12CDC_13,这些都可以在elisp模式缓冲区中正常工作。

看起来箭头键功能依赖于emacs解码终端转义序列,通过(我认为)input-decode-map

然而,如果我将主模式设置为clojure-mode,则转义序列的解码似乎被禁用(或覆盖)。当我执行这些绑定时,我只得到转义序列。

clojure-mode中的绑定发生了什么情况?

版本:

  • emacs 24.3.1(已尝试maxosxforemacs.com版本和自制程序)
  • clojure模式20131117.2306(已尝试其他版本)
  • OSX 10.8.5
  • iTerm2 1.0.0.20131124

(免责声明:我在clojure模式中提出了这个问题,但没有解决方案)

更新2013/12/10:需要明确的是:这个问题是clojure-mode特有的。iTerm+箭头键中的emacs -nw在其他主要模式下工作良好。我肯定是我在做一些愚蠢的事情,我想知道是什么。

这里的设置几乎相同,但没有类似的问题。这是我无论如何都会做的。首先,在暂存缓冲区中评估以下emacs-lisp代码。

(progn
(define-key input-decode-map "e[1;2D" [S-left])  
(define-key input-decode-map (kbd "M-[ 1 ; 2 C") [S-right])  
(define-key input-decode-map (kbd "M-[ 1 ; 2 B")[S-down])  
(define-key input-decode-map "e[1;2A" [S-up])  
(define-key input-decode-map "e[1;6A" [S-C-up])
(define-key input-decode-map "e[1;6B" [S-C-down]))

当clojure模式被激活时,请尝试windmove绑定。如果这解决了您的问题,并且假设TERM环境变量设置为xterm-256color,请在init.el 中放入以下内容

(if (equal "xterm-256color" (tty-type)) 
(progn
(define-key input-decode-map "e[1;2D" [S-left])  
(define-key input-decode-map (kbd "M-[ 1 ; 2 C") [S-right])  
(define-key input-decode-map (kbd "M-[ 1 ; 2 B")[S-down])  
(define-key input-decode-map "e[1;2A" [S-up])  
(define-key input-decode-map "e[1;6A" [S-C-up])
(define-key input-decode-map "e[1;6B" [S-C-down])))

希望这能有所帮助。

检查Iterm中的设置,更具体地说是"全局快捷键"。这些将优先于发送给emacs的内容。C-Shift-Arrow在Iterm中被用来切换标签,我相信它可能会干扰emacs。

最新更新