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

时间:2013-12-08 22:32:16

标签: macos emacs clojure

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

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

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

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

版本:

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

(免责声明:I raised this as an issue on clojure-mode, but no solution is forthcoming

更新2013/12/10:绝对清楚:此问题特定于clojure-mode。 iTerm中的emacs -nw +箭头键在其他主要模式下工作正常。我确定我正在做一些愚蠢的事情导致这种情况,我想知道是什么。

2 个答案:

答案 0 :(得分:2)

这里的设置几乎相同,但没有类似的问题。无论如何,这就是我要做的。首先,在暂存缓冲区中评估以下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-mode时尝试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])))

希望这有帮助。

答案 1 :(得分:1)

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