如何避免特殊字母的 AHK 脚本干扰 Emacs 的重复命令?
How to avoid AHK script for special letter to interfer with Emacs' repeating command?
我在将我的一些 AutoHotKey (AHK) 脚本与 Emacs 结合使用时遇到问题。给我带来问题的 AHK 脚本用于插入挪威语特殊字母 æ、ø、å、Æ、Ø、Å。这些脚本的格式在这里以字母 æ
:
的 AHK 脚本为例
:c?*:,e:: ; write the letter "æ" in text editor
send, {ALTDOWN}{Numpad1}{Numpad4}{Numpad5}{ALTUP}
return
..其中 {ALTDOWN}
和 {ALTUP}
是 AHK 的命令,分别用于按下和释放 ALT 键。在此脚本中,AHK 实际上将 ASCII 数字 145 发送到文本编辑器以表示字母 æ
。因此,当我在任何文本编辑器(Emacs 除外)中键入 ,e
时,结果都是字母 æ
。
然而,当在文本编辑器 Emacs 中使用时,此脚本不起作用。它似乎干扰了 Emacs 的重复命令,ALT-(n)
,其中 n 是您要重复命令的次数。例如,命令 ALT 50 ,
将重复 ,
50 次。
所以,如果我在我的 Emacs 编辑器中写 ,e
没有任何反应,但是如果我输入 , e_
,e
之后的空格 _
会重复 145 次!同样,如果我写 , et
使字母组合 æt
,我得到字母 t
重复 145 次。不完全是我想要的:)
如何更改我的 AHK 以便我仍然可以写特殊字母,但不干扰 Emacs 的重复命令?
首先,我很确定您可以在 Emac 本身中禁用重复命令。
我在 charmap.exe 中找不到 æ(替代 145)。相反,我将使用 æ (alt 0230).
您可以尝试的事情:使用
代替send, {ALTDOWN}{Numpad 0}{Numpad2}{Numpad3}{Numpad0}{ALTUP}
send, {ASC 0230}
send, æ
(是的,这几乎适用于所有情况)
SendUnicodeChar(0x00E6)
(00E6也可以在charmap中找到)
对于后者,您将需要此功能:
; SOURCE for the following: http://www.autohotkey.com/board/topic/16404-inserting-unicode-special-characters/
SendUnicodeChar(charCode)
{
VarSetCapacity(ki, 28 * 2, 0)
EncodeInteger(&ki + 0, 1)
EncodeInteger(&ki + 6, charCode)
EncodeInteger(&ki + 8, 4)
EncodeInteger(&ki +28, 1)
EncodeInteger(&ki +34, charCode)
EncodeInteger(&ki +36, 4|2)
DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
}
EncodeInteger(ref, val)
{
DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
}
另一个想法:为什么不在 Emac 中禁用 Alt?
#ifWinActive, Emacs
Alt::return
#ifWinActive
我在将我的一些 AutoHotKey (AHK) 脚本与 Emacs 结合使用时遇到问题。给我带来问题的 AHK 脚本用于插入挪威语特殊字母 æ、ø、å、Æ、Ø、Å。这些脚本的格式在这里以字母 æ
:
:c?*:,e:: ; write the letter "æ" in text editor
send, {ALTDOWN}{Numpad1}{Numpad4}{Numpad5}{ALTUP}
return
..其中 {ALTDOWN}
和 {ALTUP}
是 AHK 的命令,分别用于按下和释放 ALT 键。在此脚本中,AHK 实际上将 ASCII 数字 145 发送到文本编辑器以表示字母 æ
。因此,当我在任何文本编辑器(Emacs 除外)中键入 ,e
时,结果都是字母 æ
。
然而,当在文本编辑器 Emacs 中使用时,此脚本不起作用。它似乎干扰了 Emacs 的重复命令,ALT-(n)
,其中 n 是您要重复命令的次数。例如,命令 ALT 50 ,
将重复 ,
50 次。
所以,如果我在我的 Emacs 编辑器中写 ,e
没有任何反应,但是如果我输入 , e_
,e
之后的空格 _
会重复 145 次!同样,如果我写 , et
使字母组合 æt
,我得到字母 t
重复 145 次。不完全是我想要的:)
如何更改我的 AHK 以便我仍然可以写特殊字母,但不干扰 Emacs 的重复命令?
首先,我很确定您可以在 Emac 本身中禁用重复命令。
我在 charmap.exe 中找不到 æ(替代 145)。相反,我将使用 æ (alt 0230).
您可以尝试的事情:使用
代替send, {ALTDOWN}{Numpad 0}{Numpad2}{Numpad3}{Numpad0}{ALTUP}
send, {ASC 0230}
send, æ
(是的,这几乎适用于所有情况)SendUnicodeChar(0x00E6)
(00E6也可以在charmap中找到)
对于后者,您将需要此功能:
; SOURCE for the following: http://www.autohotkey.com/board/topic/16404-inserting-unicode-special-characters/
SendUnicodeChar(charCode)
{
VarSetCapacity(ki, 28 * 2, 0)
EncodeInteger(&ki + 0, 1)
EncodeInteger(&ki + 6, charCode)
EncodeInteger(&ki + 8, 4)
EncodeInteger(&ki +28, 1)
EncodeInteger(&ki +34, charCode)
EncodeInteger(&ki +36, 4|2)
DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
}
EncodeInteger(ref, val)
{
DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
}
另一个想法:为什么不在 Emac 中禁用 Alt?
#ifWinActive, Emacs
Alt::return
#ifWinActive