为什么emacs会将PageDown(<next>)键与M- [?

Rob*_*mba 2 emacs

我在标准的emacs-nox和emacs-gtk中找到了很大的区别.我知道emacs控制台版本(emacs-nox)有些键有问题(例如Shift-Tab - ),但是没有PageDown.

当我有空的.emacs文件,并尝试识别由PageDown键运行的命令名(由Ch c)时,emacs-nox emacs-gtk正常工作 - 推送PageDown进行向上滚动,并且Ch c PageDown打印在迷你缓冲区中向上滚动.

当我尝试绑定"M- ["键时出现问题.在.emacs我只有一个声明:

(global-set-key (kbd "M-[") 'hippie-expand)
Run Code Online (Sandbox Code Playgroud)

emacs-nox无法识别按键运行的命令名称 - 当Ch c PageDown,insted wriets缓冲"~6"时,它不会在迷你缓冲区中打印.当我尝试Chk PageDown时,我得到:M- [运行命令hippie-expand

emacs-gtk工作正常 - 推送PageDown进行向上滚动,Chc PageDown打印向上滚动迷你缓冲区.

所以我想emacs nox将PageDown视为M- [并添加额外的东西.

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

我使用emacs v23.2

编辑:

我测试了其他案例:在.emacs我只有:(global-set-key(kbd"")'hippie-expand)和Ch c PageDown和Ch k PageDown都能正常工作(打印嬉皮 - 扩展),以及何时在缓冲区我推PageDown也很好用.

Tho*_*mas 6

问题与终端发送给Emacs的转义序列有关.您可以通过键入C-v终端窗口,然后键入组合键来检查转义序列.所以,例如,如果你输入

C-v M-[

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

^[[
Run Code Online (Sandbox Code Playgroud)

如果你输入

C-v PageDown

你应该看到

^[[6~
Run Code Online (Sandbox Code Playgroud)

这解释了问题:生成的密钥序列是由生成的密钥序列M-[的前缀PageDown.因此,当你的前缀绑定到一个功能(例如,通过在全球范围设定M-['hippie-expand),你击球时,你得到如下效果PageDown:

's转义序列的前两个字符(^[[)PageDown被解释为前缀,因此'hippie-expand被调用.然后剩余的两个字符是普通键击的解释器,因此被插入缓冲区.这就是你按下时看到"6~"的原因PageDown.

我认为改变这种情况的唯一方法是说服终端为这些密钥发送不同的序列.但更简单的方法就是使用不同的快捷方式M-[.(我建议M-/.)