如何避免AHK脚本与Emacs';重复命令?

如何避免AHK脚本与Emacs';重复命令?,emacs,autohotkey,Emacs,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)脚本与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
之后的空格
\u
会重复145次!类似地,如果我写
,et
来组合字母
æt
,我会得到字母
t
重复145次。不完全是我想要的:)


如何更改我的AHK,使我仍然可以编写特殊的字母,但不干扰Emacs的重复命令?

首先,我非常确定您可以在Emac中禁用重复命令

我在charmap.exe中找不到æ(alt 145)。相反,我将使用æ(alt 0230)

您可以尝试的内容:使用以下命令而不是
发送,{ALTDOWN}{Numpad 0}{Numpad 2}{Numpad 3}{Numpad 0}{ALTUP}

  • send,{ASC 0230}
  • send,æ
    (是的,这几乎适用于所有情况)
  • SendUnicodeChar(0x00E6)
    (也可以在charmap中找到00E6)
对于后者,您需要此函数:

; 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


谢谢!你的第二个建议非常有效。第一个问题与我原来的问题相同,Emacs repeating命令不知何故被激活了。
#ifWinActive, Emacs
Alt::return
#ifWinActive