使用Autohotkey进行Emacs


2

我在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中我使用'describe key sequence'功能(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 Symbol”的键+ SPACE显示了cygwin窗口的“右键单击”菜单,而不是将我带到文档中M-SPC
  • 顺便说一下,我可以M-SPC通过ESC后面的操作来获取文档SPACE

让我在对这个问题的评论作出反应的过程中再添一点:

  • 标有“MSWin Symbol”的键+标有“Alt”+的键SPACE带我到文档中C-@,因此我怀疑emacs正在理解它,C-SPC而不是C-M-SPC我认为我的Autohotkey脚本会将其映射到。

关于为什么Autohotkey不会M-SPC像我期望的那样做的任何想法,或者为什么C-M-SPC被emacs理解为C-SPC(我怀疑)?

谢谢


有趣的是,在我参与的另一个SO问题中(参见stackoverflow.com/a/15884328/1243435中的第一条评论),Thomas提到CM-SPC在某些终端中可能存在问题,并解释说对他来说它确实是什么我在这里看到 - 它为终端本身生成一个右键菜单。
罗伯特

这是一个非常奇怪的重新映射...大多数重新映射CTRL的人将其重新映射到CAPS-LOCK。还有一些昂贵的键盘配有CTRL代替CAPS-LOCK(这是CTRL在旧键盘上的位置),例如Happy Hacking Pro 2。请注意,如果您触摸键入,您会发现CTRL-x很难正确执行,无论您将CTRL置于何处,因此您可以使用Emacs和ctl-x-map重新映射所有“Cx ...”快捷方式别的东西(我用C-而不是Cx)。
user988052 2013年

在我家的MacBook上,CMD键位于空格键旁边,即。确切地说,我的PC键盘上的Alt键就在哪里。在MacBook上,CMD键通常用于在PC上使用Ctrl的情况。我喜欢它。我确实试过使用PC的CAPS-LOCK作为Ctrl的小指重新映射,但这很痛!我可怜的小手指疼痛!相反,使用PC的Alt作为Ctrl,你只需将你的(更强大的)拇指放在手指和宾果游戏的拱门下面!有Ctrl。好吧,我想。在这一点上,我会声称Apple的布局是正确的(让我们不讨论它们的'#'位置)。
罗伯特

你抱怨“被标记为'Alt'+空格的钥匙”被误解了; 但是你已经清楚地表明Windows徽标键是你的Meta,所以你应该修改它来说“键标记为'MSWin符号'+ SPACE”。除非我真的误解了一些东西(当你谈论转移这么多钥匙时不难做到!)
echristopherson 2013年

@echristoperson你是对的。我即将纠正这一点。谢谢。
罗伯特

Answers:


2

以下是您的问题的答案:

问题重新映射ctrl为alt和alt为ctrl为Emacs

并讨论为什么会发生这种情况

除了可以在第一个链接后找到的脚本,您可以添加此代码以使用所有可能的键盘布局。

#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

1

Alt + Space是用于显示窗口菜单的标准Windows快捷方式,您还可以通过左键单击窗口图标或右键单击标题栏来获取该菜单。

您可以在Cygwin终端选项的Keys页面上禁用该快捷方式(与全屏的Alt + Enter快捷键一起使用,可替代使用Alt + F11)。


理解,并在终端选项中取消设置。但是,在emacs中,使用Ch k来描述密钥序列的'测试'告诉我CM-SPC被解释为C-SPC(这是托马斯在我上面提到的评论中实际解释的)。
罗伯特

您在原始问题中没有说出有关CM-SPC的任何信息。FWIW,它适用于我(不使用AutoHotKey):“CM- @运行命令mark-sexp,这是一个交互式编译的Lisp函数。它绑定到CM- @,CM-SPC。”
ak2

我道歉,在原来的问题中,我有几句话被混淆了。我现在正在更新它以纠正这些并且包括提及CM-SPC的问题仅被emacs视为C-SPC。
罗伯特

关于CM-SPC,它是否在没有AHK脚本的情况下工作,按实际的Ctrl + Alt + SPC键?
ak2 2013年

好点子!是的它确实有效:我关闭了AHK,当我按下Ctrl + Alt + SPACE时,我C-h k在emacs中的测试正确地将我带到了文档中C-M-@(当然C-M-SPC你会知道)。谢谢你的好问题!这非常证明我的AHK脚本确实存在问题,因为我怀疑(因为我是AHK新手)。
罗伯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.