【问题标题】:Emacs input-decode-map for terminal终端的 Emacs 输入解码映射
【发布时间】:2012-10-24 03:25:57
【问题描述】:

我问了一个关于终端 Emacs 中的 Ctrl-箭头键绑定的问题:

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"

然后从根目录加载它:

#loadkeys ./funcskeys

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

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

必须使用input-decode-map 函数来完成。但我无法让它工作。请帮忙。

【问题讨论】:

    标签: emacs terminal-emulator


    【解决方案1】:

    稍微更改您的“funcskeys”文件以生成以下转义序列:

    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+leftCTRL+right 应该可以工作了。您可以通过键入以下内容来验证这一点:

    C-h k C-右

    C-h k C-left

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

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

    请注意,整个方法仅使组合键 CTRL+leftCTRL+right 起作用。它 例如使 ALT+left / ALT+right 工作,或任何其他涉及 CTRL的组合键> 字符。

    【讨论】:

    • 我不知道为什么,但你的方法没有奏效。我用 (global-set-key "\M-[1;5C" 'forward-word) 做到了。那么你的 elisp 代码就没有必要了。你知道,怎么了?
    • 抱歉,仅凭“没有工作”的信息不足以了解问题所在。但是试试我刚刚做的变化。
    • 太棒了!关于其他键:如果您可以访问其他一些终端仿真,例如 gnome-terminal,则使用相同的键转义序列是有意义的。请参阅我对您上一个问题的回答,了解如何获取这些序列。
    • 我在上一个问题中添加了一个详细的算法,供人们使用,他们将面临同样的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2021-01-27
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多