【问题标题】:In emacs23 how to bound C-<return> to C-<return> instead of C-J在 emacs23 中如何将 C-<return> 绑定到 C-<return> 而不是 C-J
【发布时间】:2013-06-20 11:30:01
【问题描述】:

我正在尝试使用 org-mode,每当我按下 Crtl+return 时,emacs 都会使用 C-J。我知道这是因为当我使用 c-h k 然后按 crtl+return 时,emacs 显示: “它与 C-j 绑定。” 无论如何我可以让它注册 ctrl+return 以便我可以插入标题?

我在 ubuntu 12.04 x64 上通过终端使用 emacs23。当我在我的 Windows 机器上执行此操作时,它会插入一个新标题。

【问题讨论】:

标签: emacs key-bindings emacs23


【解决方案1】:

恐怕对于大多数终端来说,这不是一个有效的序列,所以他们根本无法将它发送到 Emacs。

如果您改为运行 GUI Emacs,键绑定将起作用。

Thomas Dickey's xterm 是我所知道的唯一可以(我认为)支持所有普通 Emacs 绑定的终端软件。如果您可以编译它,那么您可以尝试使用以下.Xdefaults-(hostname)(或.Xresources,如果您在编辑后重新合并)以获得基本支持:

XTerm*metaSendsEscape: true
XTerm*modifier: meta
XTerm*modifyOtherKeys: 1

您实际上需要XTerm*modifyOtherKeys: 2 来完全扩展序列(否则您仍然无法键入C-M-% 之类的内容),但默认情况下,该设置会破坏大多数键序列,现在我无法告诉您如何为该设置正确配置事物(我见过的唯一示例——wiki 中提到的 xterm-extras.el 并在easymacs 下载中提供——对我不起作用)。

我主要使用 GUI Emacs,但我想让它正常工作,所以如果有人在 xterm-extras.el 或类似方面取得了成功,请说出来。

【讨论】:

    【解决方案2】:

    可能。正如@phils 所说,C-Enter 对于绝大多数终端仿真器来说通常不是一个有效的序列。这是因为当您按下一个键或组合键时,终端会向相关应用程序发送一系列字符。按 a 发送a,而 Enter 发送CR - 回车(也称为^M\r\015)。

    在现代终端中实际实现的序列大多只是它们模拟的早期物理终端(尤其是 VT-100)的遗留问题。这些机器不允许 Ctrl 与每个键一起使用,例如功能键,因此 C-F1 是不可能的,也没有定义了转义序列。同样,C-Enter 没有控制序列,因此当您按下它时,终端会忽略 Ctrl,而只会看到 Enter

    但是,您可以在终端中定义自己的转义序列,然后您可以将其绑定到 emacs 中的正确组合键。 See here, for example. 我能够使用这种方法来使用 C-Enter。不幸的是,这仍然有点痛苦,因为它需要大量配置,并且您可能仍然无法使用某些序列(C-M-% 对我来说在 konsole 中不起作用)。与 @phils 一样,我已经开始使用 GUI,但我希望能更好地与我的终端集成。

    【讨论】:

      【解决方案3】:

      如果你愿意安装一个 Emacs 包并配置你的终端,我写了一个 Emacs 包,它可以教 Emacs 和终端如何正确识别所有 PC 键盘键和修饰键组合:

      https://github.com/CyberShadow/term-keys

      其默认配置启用编码 CtrlReturn 组合,这允许 Emacs 将其与 CtrlJ 区分开来.

      【讨论】:

        猜你喜欢
        • 2014-07-30
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多