终端的Emacs输入解码映射

use*_*035 3 emacs terminal-emulator

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

Emacs Ctrl修饰符在控制台中不起作用

并被告知,Linux终端仿真器不处理这种组合.我设法创建一个loadkeys命令文件来处理这些键:

control keycode 105 = F100
string F100 = "\033[[left"
control keycode 106 = F101
string F101 = "\033[[right"
Run Code Online (Sandbox Code Playgroud)

然后从root加载它:

#loadkeys ./funcskeys
Run Code Online (Sandbox Code Playgroud)

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

在Emacs 23.1.1中绑定M- <up>/M- <down>

必须使用input-decode-map功能完成.但我无法使其发挥作用.Plz,帮忙.

Tho*_*mas 6

稍微更改"funcskeys"文件以生成以下转义序列:

control keycode 105 = F100
string F100 = "\033[1;5D"
control keycode 106 = F101
string F101 = "\033[1;5C"
Run Code Online (Sandbox Code Playgroud)

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

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

运行后loadkeys并重新启动的Emacs,CTRL+leftCTRL+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)
Run Code Online (Sandbox Code Playgroud)

请注意,这整个方法只能使关键组合CTRL+leftCTRL+right工作.它不会例如制作ALT+left/ ALT+right工作,或涉及CTRL角色的任何其他键组合.