AHK 使用 Escape<Chars>Escape 例子
AHK using Escape<Chars>Escape example
如何将 Escape 用作我的 AHK 脚本的一部分。我想发送以下热键组合:
Press and Release Escape key
Type m
Type u
Press and Release Escape key again
打印希腊字母μ
我试图与 Wolfram Mathematica 使用转义字符插入 letters/symbols 的方式保持一致。
感谢任何帮助。
是的,这对 AHK 来说非常可行。
您正在寻找的是 hotstring.
由于在您的热字串中使用了 Esc 键,首先我将展示现代 Hotstring()
[= 的用法32=] 函数而不是传统的 ::btw::by the way
hotstring 语法。
esc := Chr(0x1B) ;27
Hotstring(":*?B0C:" esc "mu" esc, "{BS 2}μ")
Hotstring(":*?B0C:" esc "alpha" esc, "{BS 5}α")
Hotstring(":*?B0C:" esc "Alpha" esc, "{BS 5}Α")
;...
因此,首先我们将 Esc 键的字符串表示形式存储在名为 esc
的变量中,其中 Chr()
(docs).
Esc 的字符代码是 27。你可以查一下,例如官方 Unicode 字符名称列表(在 pdf and txt), or some website which makes filtering easier, such as https://unicodelookup.com/.
中可用
您也可以选择将 Esc 字符保留在其字符串表示中。它会工作得很好,如果你的编辑器足够好,可以正确显示角色,它甚至看起来也很好。
如果这样做,您也可以使用指定热字串的传统方式。
下面两行在功能上是相同的:
Hotstring(":*?B0C:mu", "{BS 2}μ")
:*?B0C:mu::{BS 2}μ
编辑:Stack Overflow 似乎根本不显示 Esc 字符,至少在我这边是这样。但是上面的两行代码应该包含 Esc 字符,如下面的屏幕截图所示。
然后是热字串本身。
我猜你会想要 *?B0C
(docs) 作为热字串的选项,但你可以选择任何适合你需要的东西:
*
因此触发热字串不需要结尾字符。
?
这样即使在另一个词中也可以触发热字串。
B0
所以自动退格没有完成。
这是必须的,因为例如mu
热字串,AHK 将退格 4 次,因为热字串有四个字符长,但 Esc 键实际上不会产生输入,你只想退格两次。
C
使热字串区分大小写。
Be sure to note that you'll need to save your script file an appropriate encoding to not lose the Greek letters.
UTF-8 足以涵盖所有希腊字母。
或者,您可以再次使用 Chr()
指定希腊字母,这样就无需担心编码问题。
例如。 "{BS 5}" Chr(0x3B1)
而不是 "{BS 5}α"
差不多就是这些了。
您可以为每个需要的热字串重复该行。
另外,因为我很无聊,这里有一些更酷的东西你可以用来创建 any Esc 包裹热字串:
ReplacementMap := CSobj()
ReplacementMap["alpha"] := Chr(0x3B1) ;Chr() notation not mandatory
ReplacementMap["Alpha"] := Chr(0x391)
ReplacementMap["mu"] := Chr(0x3BC)
ReplacementMap["Mu"] := Chr(0x39C)
ReplacementMap["dog"] := Chr(0x1F415) ;
ReplacementMap["cat"] := Chr(0x1F408) ;
ReplacementMap["btw"] := "by the way"
;...
for hotstring, replacement in ReplacementMap
Hotstring(":*?B0CX:" Chr(0x1B) hotstring Chr(0x1B), Func("EscHotstringReplacement").Bind(StrLen(hotstring), replacement))
return
EscHotstringReplacement(BackspaceCount, Replacement)
{
SendInput, % "{BS " BackspaceCount "}" Replacement
}
CSobj() {
static base := object("_NewEnum","__NewEnum", "Next","__Next", "__Set","__Setter", "__Get","__Getter", "__Call","__Caller")
return, object("__sd_obj__", ComObjCreate("Scripting.Dictionary"), "base", base)
}
__Getter(self, key) {
return, self.__sd_obj__.item("" key)
}
__Setter(self, key, value) {
self.__sd_obj__.item("" key) := value
return, false
}
__NewEnum(self) {
return, self
}
__Next(self, ByRef key = "", ByRef val = "") {
static Enum
if not Enum
Enum := self.__sd_obj__._NewEnum
if Not Enum[key], val:=self[key]
return, Enum:=false
return, true
}
__Caller(self, name) {
if (name = "count")
return, self.__sd_obj__.count
}
我不会彻底记录这个,但基本上CSobj()
(docs) for a case sensitive key-value pair object, X
hotstring option(docs) to execute and a bound function object(docs)来执行。
如何将 Escape 用作我的 AHK 脚本的一部分。我想发送以下热键组合:
Press and Release Escape key
Type m
Type u
Press and Release Escape key again
打印希腊字母μ
我试图与 Wolfram Mathematica 使用转义字符插入 letters/symbols 的方式保持一致。
感谢任何帮助。
是的,这对 AHK 来说非常可行。
您正在寻找的是 hotstring.
由于在您的热字串中使用了 Esc 键,首先我将展示现代 Hotstring()
[= 的用法32=] 函数而不是传统的 ::btw::by the way
hotstring 语法。
esc := Chr(0x1B) ;27
Hotstring(":*?B0C:" esc "mu" esc, "{BS 2}μ")
Hotstring(":*?B0C:" esc "alpha" esc, "{BS 5}α")
Hotstring(":*?B0C:" esc "Alpha" esc, "{BS 5}Α")
;...
因此,首先我们将 Esc 键的字符串表示形式存储在名为 esc
的变量中,其中 Chr()
(docs).
Esc 的字符代码是 27。你可以查一下,例如官方 Unicode 字符名称列表(在 pdf and txt), or some website which makes filtering easier, such as https://unicodelookup.com/.
您也可以选择将 Esc 字符保留在其字符串表示中。它会工作得很好,如果你的编辑器足够好,可以正确显示角色,它甚至看起来也很好。
如果这样做,您也可以使用指定热字串的传统方式。
下面两行在功能上是相同的:
Hotstring(":*?B0C:mu", "{BS 2}μ")
:*?B0C:mu::{BS 2}μ
编辑:Stack Overflow 似乎根本不显示 Esc 字符,至少在我这边是这样。但是上面的两行代码应该包含 Esc 字符,如下面的屏幕截图所示。
然后是热字串本身。
我猜你会想要 *?B0C
(docs) 作为热字串的选项,但你可以选择任何适合你需要的东西:
*
因此触发热字串不需要结尾字符。?
这样即使在另一个词中也可以触发热字串。B0
所以自动退格没有完成。
这是必须的,因为例如mu
热字串,AHK 将退格 4 次,因为热字串有四个字符长,但 Esc 键实际上不会产生输入,你只想退格两次。C
使热字串区分大小写。
Be sure to note that you'll need to save your script file an appropriate encoding to not lose the Greek letters.
UTF-8 足以涵盖所有希腊字母。
或者,您可以再次使用 Chr()
指定希腊字母,这样就无需担心编码问题。
例如。 "{BS 5}" Chr(0x3B1)
而不是 "{BS 5}α"
差不多就是这些了。
您可以为每个需要的热字串重复该行。
另外,因为我很无聊,这里有一些更酷的东西你可以用来创建 any Esc 包裹热字串:
ReplacementMap := CSobj()
ReplacementMap["alpha"] := Chr(0x3B1) ;Chr() notation not mandatory
ReplacementMap["Alpha"] := Chr(0x391)
ReplacementMap["mu"] := Chr(0x3BC)
ReplacementMap["Mu"] := Chr(0x39C)
ReplacementMap["dog"] := Chr(0x1F415) ;
ReplacementMap["cat"] := Chr(0x1F408) ;
ReplacementMap["btw"] := "by the way"
;...
for hotstring, replacement in ReplacementMap
Hotstring(":*?B0CX:" Chr(0x1B) hotstring Chr(0x1B), Func("EscHotstringReplacement").Bind(StrLen(hotstring), replacement))
return
EscHotstringReplacement(BackspaceCount, Replacement)
{
SendInput, % "{BS " BackspaceCount "}" Replacement
}
CSobj() {
static base := object("_NewEnum","__NewEnum", "Next","__Next", "__Set","__Setter", "__Get","__Getter", "__Call","__Caller")
return, object("__sd_obj__", ComObjCreate("Scripting.Dictionary"), "base", base)
}
__Getter(self, key) {
return, self.__sd_obj__.item("" key)
}
__Setter(self, key, value) {
self.__sd_obj__.item("" key) := value
return, false
}
__NewEnum(self) {
return, self
}
__Next(self, ByRef key = "", ByRef val = "") {
static Enum
if not Enum
Enum := self.__sd_obj__._NewEnum
if Not Enum[key], val:=self[key]
return, Enum:=false
return, true
}
__Caller(self, name) {
if (name = "count")
return, self.__sd_obj__.count
}
我不会彻底记录这个,但基本上CSobj()
(docs) for a case sensitive key-value pair object, X
hotstring option(docs) to execute and a bound function object(docs)来执行。