【发布时间】:2013-04-02 00:31:31
【问题描述】:
我问了一个关于我用于 emacs(在 Cygwin 中)重新映射 Ctrl 和 Alt 键的 Autohotkey 脚本的问题。这是问题:https://stackoverflow.com/q/15899963/1243435。
我一直在测试我的脚本的一种方法是打开 emacs 并使用 C-h k 功能,该功能会显示按键序列的文档。它可以让我确认 Autohotkey 是否符合我的预期。
但是似乎有一些复杂的情况,例如可能是 Cygwin 终端不允许序列 C-M-SPC '通过'到 emacs,因此 emacs 实际上只接收 C-SPC。
因此,我的问题是:Autohotkey 是否有自己的测试工具,当您按下键盘上的几个组合键时,它会向您显示 Autohotkey 接收和发送的内容?如果是,我将能够确认我的脚本是否正常工作,然后确定是否是其他问题导致我无法将关键序列传递到 emacs。
根据 Armin 建议的答案进行更新
根据 Armin 的建议,以下是我在执行以下操作后在 AHK 视图屏幕中看到的内容:
- 在 Cygwin 窗口中单击鼠标以激活它(我已经在其中运行了 emacs),
- 按 LeftAlt+h 然后按 k 我知道 AHK 将转换为
C-h k,这就是“告诉我下一步是什么”键盘序列在 emacs 中的意思, - 在 emacs 帮助提示符下按 Left Win+Left Alt+SPACE,
- 看到 emacs 向我展示了
C-M-@的文档(顺便说一下,它也绑定到了键序列C-M-SPC), - 在 AHK 视图窗口中单击鼠标返回并使用 F5 刷新。
这里是 AHK 窗口中输出的相关部分(模数缩短较长的行以在此处停止自动换行):
VK SC Type Up/Dn Elapsed Key Window
----------------------------------------------------------
A4 038 h d 4.18 LAlt /cygdrive/c/...
A4 038 i u 0.00 LAlt
A2 01D i d 0.00 LControl
48 023 d 0.09 H
48 023 u 0.09 H
A4 038 h u 0.05 LAlt
A2 01D i u 0.00 LControl
4B 025 d 1.22 K
4B 025 u 0.06 K
A4 038 h d 1.12 LAlt
A4 038 i u 0.00 LAlt
A2 01D i d 0.00 LControl
5B 15B h d 0.02 LWin
A4 038 i d 0.00 LAlt
20 039 d 0.19 Space
20 039 u 0.06 Space
5B 15B h u 0.16 LWin
A4 038 i u 0.00 LAlt
A4 038 h u 0.00 LAlt
A2 01D i u 0.01 LControl
74 03F d 1.90 F5 C:\...\AutoHotkey.ahk ...
它显示了很多正在发生的事情。
我的理解是,这证明 AHK 正确地将我的 Left Alt+Left Win+SPACE 转换为C-M-SPC。
以下是我认为证明完成的原因的解释。
这是我按下LAlt,它被转换为LCtrl的向下:
A4 038 h d 4.18 LAlt /cygdrive/c/...
A4 038 i u 0.00 LAlt
A2 01D i d 0.00 LControl
(但我不确定LAlt 中的u 在中间是什么——AHK 解释说'i=Ignored,因为它是由AHK 脚本生成的')。
接下来是我按下并释放h:
48 023 d 0.09 H
48 023 u 0.09 H
所以此时 emacs 已收到C-h。
接下来我松开LAlt,然后按下并松开k。
A4 038 h u 0.05 LAlt
A2 01D i u 0.00 LControl
4B 025 d 1.22 K
4B 025 u 0.06 K
Emacs 现在进入“描述键序列”的帮助提示。
然后我接下来按下 LAlt
我们看到 AHK 为LCtrl 发送d 信号(第二行还有LAlt 的'忽略'u,这是我没想到的),然后我按下LWin 和 AHK 发送 d 的 LAlt 然后我按下 SPACE:
A4 038 h d 1.12 LAlt
A4 038 i u 0.00 LAlt
A2 01D i d 0.00 LControl
5B 15B h d 0.02 LWin
A4 038 i d 0.00 LAlt
20 039 d 0.19 Space
最后是我释放所有这些 LAlt+LWin+SPACE 的序列,我们看到 AHK 为 @ 发送 u 信号987654346@和LAlt和LCtrl:
20 039 u 0.06 Space
5B 15B h u 0.16 LWin
A4 038 i u 0.00 LAlt
A4 038 h u 0.00 LAlt
A2 01D i u 0.01 LControl
最后是我在 AHK 视图窗口中单击鼠标激活后刷新数据:
74 03F d 1.90 F5 C:\...\AutoHotkey.ahk ...
这似乎证明了我的 AHK 脚本达到了我的预期。
唯一剩下的问题是出现了两次的LAlt 中的那个神秘的u。
有什么想法吗?
【问题讨论】:
-
您可以在 [Key history and script info] 视图中看到正在接收哪些密钥,但它不显示它发送的内容。 [最近执行的行]也不完美。
-
在使用 GNU Emacs 时遇到了与您相同的问题。在AHK Community forum 上介绍了该问题和可能的解决方案之一。
标签: autohotkey