【问题标题】: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,但我希望能更好地与我的终端集成。