我在 Cygwin 中使用 emacs,并使用 Autohotkey 将左侧“Alt”键和左侧“Windows”键分别重新映射到 (左)Ctrl 和 (左)Alt。
Ctrl-xCtrl-c这意味着,就像我用左手拇指按下标有“Alt”的键来产生emacs 序列一样Ctrl。好的。
除了我无法开始M-SPC工作之外,一切似乎都还好,所以我的问题是寻求帮助。
这是我正在使用的 Autohotkey 脚本(顺便说一下,我将左侧 Ctrl 键重新映射到左侧 Windows 按钮只是为了理论上的完整性——我在使用 emacs 时从未真正按过它):
#IfWinActive ahk_class mintty
LWin::LAlt
LAlt::LCtrl
LCtrl::LWin
要清楚的是,当我说“一切正常”时,我的意思是在 emacs 中我使用“描述按键顺序”功能(C-h然后k),然后尝试我想要的组合键。例如,所有这些都显示了我预期的顺序的 emacs 文档:
- 标有“Alt”的键 +g报告 emacs 文档
C-g
。好的。 - 标有“Alt”+ 的键SPACE报告的文档
C-@
,emacs 表示该文档也映射到C-SPC
,所以这似乎没问题。好的。 - 标有‘MSWin Symbol’的键 +x报告文档
M-x
。好的。 - 标有“MSWin Symbol”的键 + 标有“Alt”的键 +k报告文档
C-M-k
。好的。
但:
- 标有“MSWin 符号” + 的键SPACE向我显示了 cygwin 窗口的“右键单击”菜单,而不是带我到 的文档
M-SPC
。坏的。 M-SPC
顺便说一句,我可以通过执行ESC后跟 来获取 的文档SPACE。
让我补充一下在回复该问题的评论时出现的另一点:
- 标有“MSWin 符号”的键 + 标有“Alt”的键 +SPACE将我带到 的文档
C-@
,因此我怀疑它被 emacs 理解为C-SPC而不是C-M-SPC我认为我的 Autohotkey 脚本会将它映射到 。坏的。
有什么想法可以解释为什么 Autohotkey 不能M-SPC
按我预期的那样执行操作,或者为什么C-M-SPCemacs 将其理解为C-SPC
(我怀疑)?
谢谢
答案1
以下是针对您的问题的答案:
在 Emacs 中将 ctrl 重新映射到 alt 和将 alt 重新映射到 ctrl 时出现问题
除可以在第一个链接下面找到的脚本之外,您还可以添加此代码来使所有可能的键盘布局都可以工作。
#IfWinNotActive, ahk_group HaveEmacsHotkeys
#InputLevel 1
; Aditionally remaps Window keys and AppsKey
*RWin::
SetKeyDelay, -1
Send, {Blind}{Alt DownTemp}
return
*RWin up::
SetKeyDelay, -1
Send, {Blind}{Alt Up}
return
*LWin::
SetKeyDelay, -1
Send, {Blind}{Alt DownTemp}
return
*LWin up::
SetKeyDelay, -1
Send, {Blind}{Alt Up}
return
*AppsKey::
SetKeyDelay, -1
Send, {Blind}{Alt DownTemp}
return
*AppsKey up::
SetKeyDelay, -1
Send, {Blind}{Alt Up}
#IfWinActive
答案2
Alt+Space 是显示窗口菜单的标准 Windows 快捷键,您也可以通过左键单击窗口图标或右键单击标题栏来获取该菜单。
您可以在 Cygwin 终端选项的“键”页面上禁用该快捷方式(以及全屏的 Alt+Enter 快捷方式,可以改用 Alt+F11)。