将一些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的重复命令?
答案 0 :(得分:2)
首先,我很确定你可以在Emac中禁用重复命令。
我在charmap.exe中找不到æ(alt 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