【问题标题】:Block bindings that won't work in terminal mode in emacs?在 emacs 中无法在终端模式下工作的块绑定?
【发布时间】:2012-10-07 05:04:13
【问题描述】:

某些在 GUI 模式下工作的 emacs 键盘绑定在终端模式下无法工作 because the terminal only knows how to send ASCII control codes。当我将键绑定到非 ASCII 控制代码时,有没有办法让 emacs 抱怨,所以我会意外停止这样做?我只是偶尔在终端上运行 emacs,而且通常只是远程运行,而且通常只是因为某些东西坏了,这意味着我最终会在最糟糕的时候发现这种糟糕的情况。

我也有过远程处理的经验,尤其是从一个操作系统到另一个操作系统(例如 Solaris -> Linux),其中甚至修改键都被重新映射(esc ctrl 被交换,或者右 alt 有效但左 alt 无效' t)。有什么方法可以检测到这种情况何时发生并适当地交换我的键盘绑定?

基本上:每次我在终端中远程使用 emacs 时,我都会得到不一致的 GUI 体验,这很糟糕,我该如何更改我的 emacs 使用以防止这种情况发生。

【问题讨论】:

    标签: emacs ssh keyboard-shortcuts putty terminal-emulator


    【解决方案1】:

    我不知道这样做的好方法:首先,终端只能发送 ASCII 控制代码是不正确的,因为它们可以通过转义序列编码几乎任何东西(例如 xterm 发送特殊的转义序列例如,CM-up,然后 Emacs 可以识别)。因此,取决于终端能够发送到 Emacs 的事件集(以及 Emacs 能够识别的事件)取决于终端。

    如果您想真正安全,您可以将自己限制为键序列被描述为字符串(不是向量,也不是通过kbd 构建的东西)的绑定,这基本上意味着只有 ASCII 字符(包括控制序列)与 Meta 结合。

    【讨论】:

    • 当我远程登录并在终端中运行 emacs 时,您知道是否有办法确定支持或不支持什么?例如,当我在 C-/ 中进行远程操作时不起作用(它被认为等同于 C-_),但我不知道如何预先检测到这一点,除非通过我所有快捷方式的反复试验,以及是否有办法要找到我需要重新映射的快捷方式的完整列表,我至少可以为我的远程工作设置修复它。
    • 要知道什么有效,什么无效,您需要弄清楚您使用的是哪个终端仿真器,然后查看它的文档、自定义和/或源代码。您可以知道 C-/M-: "\C-/" RET 存在风险,它会告诉您它不是有效的字符串,即它不是 ASCII 控制键。
    • 啊,我希望能发现一些能够解决这个问题的 emacs lisp + termcap 魔法组合。可能会尝试自己动手,但由于我目前知道 jack 关于 termcap,因此需要一段时间。
    • 如果您查看input-decode-map,您将看到将转义序列映射回其真正含义的规则。这是由 Emacs 基于 termcap 信息构建的,所以它会让你知道什么是有效的(除了 ASCII 控件和 Meta + ASCII,它应该可以在任何地方工作)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2016-12-08
    • 2011-03-31
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多