如何避免特殊字母的AHK脚本干扰Emacs的重复命令?

时间:2015-05-18 10:16:43

标签: emacs autohotkey

将一些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的重复命令?

1 个答案:

答案 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