gpt4 book ai didi

emacs - 为什么 emacs 将 PageDown () 键与 M-[ 混淆?

转载 作者:行者123 更新时间:2023-12-01 06:32:33 24 4
gpt4 key购买 nike

我发现标准 emacs-nox 和 emacs-gtk 有很大区别。我知道 emacs 控制台版本 (emacs-nox) 的某些键(例如 Shift-Tab - )有问题,但 PageDown 没有问题。

当我有空的 .emacs 文件,并尝试识别通过 PageDown 键(通过 C-h c)运行的命令名称时,emacs-nox emacs-gtk 正常工作 - 按下 PageDown 使滚动向上,而 C-h c PageDown 打印滚动-放在迷你缓冲区中。

当我尝试绑定(bind)“M-[”键时出现问题。在 .emacs 中我只有一个语句:

(global-set-key (kbd "M-[") 'hippie-expand)

emacs-nox 无法识别按键运行的命令名称 - 当 C-h c PageDown 写入缓冲区“~6”时,它不会在迷你缓冲区中打印任何内容。当我尝试 C-h k PageDown我得到:M-[ 运行命令 hippie-expand

emacs-gtk 正常工作 - 按下 PageDown 会向上滚动,然后 C-h c PageDown 在迷你缓冲区中打印向上滚动。

所以我猜 emacs nox 将 PageDown 视为 M-[ 并添加了一些额外的东西。

知道如何在 emacs-nox 中解决这个问题吗?

我使用的是 emacs v23.2

编辑:

我测试了其他情况:在 .emacs 中我只有: (global-set-key (kbd "") '嬉皮扩展)并且 C-h c PageDown 和 C-h k PageDown 都能正常工作(打印嬉皮扩展),当在缓冲区中时,我按 PageDown 也能正常工作。

最佳答案

问题与终端发送给 Emacs 的转义序列有关。您可以通过在终端窗口中键入 C-v,然后按组合键来检查转义序列。因此,例如,如果您键入

C-v M-[

你应该在终端窗口中看到类似这样的东西:

^[[

如果你输入

C-v PageDown

你应该看到

^[[6~

这就解释了问题:M-[ 生成的键序列是 PageDown 生成的键序列的前缀。因此,当您将该前缀绑定(bind)到一个函数时(例如,通过将 M-[ 全局设置为 'hippie-expand),您在点击 PageDown 时会得到以下效果:

PageDown 转义序列的前两个字符 (^[[) 被解释为前缀,因此 'hippie-expand叫做。然后剩下的两个字符像普通的击键一样被解释器,从而被插入到缓冲区中。这就是当您按下 PageDown 时看到“6~”的原因。

我认为改变这一点的唯一方法是说服终端为这些键发送不同的序列。但更简单的方法是使用与 M-[ 不同的快捷方式。 (我建议 M-/。)

关于emacs - 为什么 emacs 将 PageDown (<next>) 键与 M-[ 混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com