【问题标题】:Find out corresponding escape sequence for a given key combo找出给定组合键的相应转义序列
【发布时间】:2016-03-09 23:05:59
【问题描述】:

Emacs 中,我想将特定的组合键绑定到命令。但是,因为我在 OS X 上的 iTerm2 内的终端模式下使用 Emacs,所以我需要将组合键转换为字符转义序列并使用 iTerm2 注册该序列,以便它能够识别组合键。

但是我如何在给定组合键的情况下找出对应的序列呢?例如,我发现像^[[1;8A 这样的东西对应于 Ctrl+Alt+up (我已经配置了 Alt kbd> 在iTerm2 中充当+Esc),但我不知道该组合键如何转换为这个特定序列。

有没有办法查找或计算出任何给定组合键的转义序列?比如Ctrl+Alt+r的顺序是什么?

一个相关的问题,有人可以向我解释在iTerm2 中设置与其对应序列的组合键和使Emacs 使用input-decode-map 内部.emacs 将序列转换为其内部键表示之间的关系(例如(define-key input-decode-map "[escape_sequencehere]" [internal_key_representation_here])?在我看来,仅在iTerm2 中设置它就足以使绑定在Emacs 中工作,那么我们何时以及为什么需要在.emacs 中设置后者? (也许我们什么时候都需要让某件事情发挥作用?)

【问题讨论】:

标签: emacs key-bindings iterm2


【解决方案1】:

在您的终端中输入showkey -a 并让按键飞起来。

【讨论】:

  • 您可能需要使用brew install showkey从自制软件安装showkey
【解决方案2】:

一些组合键直接发送到iTerm2 中运行的应用程序。你可以得到它

  • 通过使用ctrl+v 方法(参见In bash, how do I bind a function key to a command?)或

    bash-3.2$ ^[[1;10A  (in this case I hit ctrl + v before shift+alt+up)
    
  • sed -n l(注意是小写的L)。例如,如果您发送 (shift+alt+up),您可以看到应用程序收到了什么:

    bash-3.2$ sed -n l
    ^[[1;10A
    \033[1;10A$
    

如果某些组合键没有通过,您可以将iTerm2 指示为let it pass 并将其映射到您可以如上所述检测到的组合键。
例如,您可以发送并映射ctrl+alt+cmd+RESC+sdf,您的终端将收到^[sdf,您可以将其分配给 Emacs 中的命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多