Emacs M-S-<;左>;未按预期处理
当我在这样一个终端中启动一个新的emacs时Emacs M-S-<;左>;未按预期处理,emacs,Emacs,当我在这样一个终端中启动一个新的emacs时 emacs -nw -Q 我可以通过键入C-hk来检查某个键盘快捷键绑定到了什么。当我在启动Emacs后立即在*scratch*缓冲区中对快捷方式M-S执行此操作时,我得到: 运行命令left word(在全局映射中找到),这是一个 “bindings.el”中的交互式编译Lisp函数 这是必然的 [……] 请注意,在已识别的键序列中没有“Shift”修饰符 现在,第一个直觉是终端(在我的例子中是gnome终端)不会产生正确的转义序列,但它会产生:
emacs -nw -Q
我可以通过键入C-hk来检查某个键盘快捷键绑定到了什么。当我在启动Emacs后立即在*scratch*
缓冲区中对快捷方式M-S执行此操作时,我得到:
运行命令left word(在全局映射中找到),这是一个
“bindings.el”中的交互式编译Lisp函数
这是必然的
[……]
请注意,在已识别的键序列中没有“Shift”修饰符
现在,第一个直觉是终端(在我的例子中是gnome终端)不会产生正确的转义序列,但它会产生:在终端中键入CTRL-V ALT SHIFT left(即,在Emacs中不是)会产生正确的转义序列
在Emacs中键入C-qc-S-inside将相同的内容插入当前缓冲区。(请注意,^[
是单个字符,即ASCII 27(“转义”))
检查input decode map
会显示以下值(为了简洁起见,省略了某些部分(标记为…
):
使用以下代码验证两个密钥序列可获得预期结果:
(mapc)(lambda(c)(插入(格式“%c”c)))(279149595168));^[1;3D
(mapc)(lambda(c)(插入(格式"c))(279149595268);(1 ; 4D)
然而,我不明白为什么这些序列被嵌入到二级内部(keymap…
列表中
它变得更奇怪了
当我键入时,返回到*scratch*
M-x local-set-key
然后M-S-,它被正确识别,正如minibuffer中的下一个提示所示:
Set key <M-S-left> locally to command:
将本地键设置为命令:
如果我继续并提供一个随机函数,比如说,行的开头
,随后调用C-hk,后跟M-S,那么确实会给出:
运行命令行的开头(在中找到)
lisp交互模式映射),这是一个交互式内置函数
在“C源代码”中
这是必然的
[……]
本地将M-S-设置为nil
将恢复C-h k将M-S-报告为
的初始行为
这是怎么回事?这是一个配置问题,还是它的预期行为,还是涉及到一些其他键映射,它们透明地添加了另一层重新映射?这是一个功能
M-xelisp索引搜索
RETshift translation
表示:
如果输入字符为大写(或具有shift修饰符),并且
没有键绑定,但是它的小写等价物有一个键绑定,那么
“读取键序列”将字符转换为小写。请注意
“查找键”不会以这种方式执行大小写转换
当读取输入导致这种“移位翻译”时,Emacs设置
变量“this command keys shift”转换为非“nil”值。
如果Lisp程序需要修改其
由shift转换键调用时的行为。例如
函数“handle shift selection”检查此变量的值以
确定如何激活或停用区域(*注意
手柄换档选择:标记。)
这是哪个版本的Emacs?对我来说,Emacs 26.1报告
(翻译自)运行命令left word
。您可能看到了相同的行为,但没有被明确告知这是一个翻译序列。GNU Emacs 25.2.2FYI我刚刚在25.3中测试过(IIRC只是25.2之上的一个安全补丁),我看到了“翻译自”文本也在那里。我觉得它已经存在很长时间了(可能是自从引入shift translation功能以来),所以我仍然有点困惑,为什么你自己没有看到。我确实记得自己在过去看到过“翻译自”消息(较旧的Emacs版本)。这就是我引用我得到的输出的前几行的原因,因为我的版本中显然没有提到它。非常感谢交叉引用。我想,你在较新的Emacs中得到的(翻译自)
消息也会解决我的问题。想想看,这有点愚蠢。”功能“-除非我碰巧无意中按下了Shift键,否则可能是因为我没有键入键盘快捷键的“小写”版本。它也不一致:在我的键盘上,+
与s-=
相同,但当我(全局设置键“+”nil)
我得到“+时,是未定义的“在微型缓冲区中,而不是插入一个=
。我不确定这是否准确,但您可能会将其解释为“移位转换影响字母a-Z以及尚未具有移位行为的键”。如果您还没有使用,请参见shift-select-mode
,我不使用它,但我认为这就是为什么这个功能首先存在的原因。请写出您最后的评论,@phils:No。我很确定这个行为很旧,shift-select-mode
相对较新。是的,它最初是关于字母的,被认为是一种方便默认情况下,使Shift键与字母键绑定无关。
M-x local-set-key
Set key <M-S-left> locally to command: