终端的Emacs输入解码映射

时间:2012-11-03 19:31:04

标签: emacs terminal-emulator

我在终端的Emacs中询问了一个关于Ctrl-arrow键绑定的问题:

Emacs Ctrl modifiers don't work in console

有人告诉我,Linux终端模拟器不会处理这种组合。我设法为loadkeys命令创建了一个文件来处理这些键:

control keycode 105 = F100
string F100 = "\033[[left"
control keycode 106 = F101
string F101 = "\033[[right"

然后从root加载它:

#loadkeys ./funcskeys

之后每次在控制台中单击Ctrl-right或Ctrl-left时,我都会打印“右”或“左”。现在我需要在Emacs中处理它。据我所知,这个问题:

Binding M-<up> / M-<down> in Emacs 23.1.1

必须使用input-decode-map函数完成。但我无法使其发挥作用。 Plz,帮助。

1 个答案:

答案 0 :(得分:6)

更改你的&#34; funcskeys&#34;稍微提交以生成以下转义序列:

control keycode 105 = F100
string F100 = "\033[1;5D"
control keycode 106 = F101
string F101 = "\033[1;5C"

然后将以下行添加到.emacs文件中:

(define-key input-decode-map "\e[1;5C" [(control right)])
(define-key input-decode-map "\e[1;5D" [(control left)])

运行loadkeys并重新启动Emacs后, CTRL + left CTRL + right 应该可以正常工作。您可以通过输入以下内容来验证:

C-h k C-right

C-h k C-left

要将这些键击实际绑定到命令(例如forward-word),您可能还需要将以下行添加到.emacs文件中:

(global-set-key [(control right)] 'forward-word)
(global-set-key [(control left)] 'backward-word)

请注意,此整个方法仅使键组合 CTRL + left CTRL + right 有效。它例如使 ALT +左 / ALT +右工作,或涉及 CTRL 性格。