如果我在终端中运行emacs(即在iTerm2中使用emacs -nw
启动emacs)
使用windmove
及其默认绑定,我应该能够使用Shift
+ →
←
↑
↓
的各种组合在窗口之间导航,此外,paredit
还有涉及Ctrl
/ Meta
+ →
←
↑
↓
的约束,这些都可以正常使用(例如)一个elisp模式缓冲区。
看起来箭头键功能依赖于emacs解码终端转义序列,通过(我认为)input-decode-map
但是,如果我将主模式设置为clojure-mode
,则转义序列的解码似乎被禁用(或覆盖)。当我执行那些绑定时,我只是获得了转义序列。
clojure-mode
中的绑定发生了什么?
版本:
(免责声明:I raised this as an issue on clojure-mode, but no solution is forthcoming)
更新2013/12/10:绝对清楚:此问题特定于clojure-mode
。 iTerm中的emacs -nw
+箭头键在其他主要模式下工作正常。我确定我正在做一些愚蠢的事情导致这种情况,我想知道是什么。
答案 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。