AutoHotkey - 使用 dictionary/lookup 进行热字串替换

AutoHotkey - use dictionary/lookup to make hotstring replacements

我正在尝试编写一个 AutoHotkey 脚本来提供一种简单的方法来输入修改后的拉丁字符(例如 ö、å、é、ñ 等)。假设我想将组合 (vowel) + ; + \ 发送到 (vowel) 并带有变音符号。我可以做类似

的事情
:?*:a;\::ä
:?*:e;\::ë
:?*:i;\::ï
:?*:o;\::ö
:?*:u;\::ü

但是,我想知道是否有更“灵活”或“抽象”的方法来实现,我可以预先定义一组映射,例如

Umlaut = {  a -> ä,  e -> ë,  i -> ï,  o -> ö,  u -> ü  }

然后将模式应用于此映射的所有元素,例如

forall x in Umlaut
  :?*:(x.key);\::(x.value)

在 AutoHotkey 中可以实现这样的功能吗?

如果是,我想知道 是否也可以将抽象更进一步。 例如假设我还想将组合 (vowel) + ' + \ 发送到 (vowel) 并带有锐音符。然后,我想定义一个映射,例如

Diacritics = {
  ";" ->  {  a -> ä,  e -> ë,  i -> ï,  o -> ö,  u -> ü  },
  "'" ->  {  a -> á,  e -> é,  i -> í,  o -> ó,  u -> ú  },
}

并应用相同的模式

forall x in Diacritics
  forall y in x.value
    :?*:(y.key)(x.key);\::(y.value)

当然,这对于 Hotstring()(docs) function and a for-loop 非常可行。

umlaut := { "a" : "ä"
          , "e" : "ë"
          , "i" : "ï"
          , "o" : "ö"
          , "u" : "ü" }

for key, value in diacritics
    Hotstring(":?*:" key ";\", value)

此外,我不太确定问题的第二部分是什么意思,但我假设你的意思是
a + ; + \ 产生 ä

a + ' + \ 产生 á,
那么这段代码就可以工作了:

diacritics := { ";" : { "a" : "ä"
                      , "e" : "ë"
                      , "i" : "ï"
                      , "o" : "ö"
                      , "u" : "ü" }
              , "'" : { "a" : "á"
                      , "e" : "é"
                      , "i" : "í"
                      , "o" : "ó"
                      , "u" : "ú" } }


for outer_key, value1 in diacritics
    for inner_key, value2 in value1
        Hotstring(":?*:" inner_key outer_key "\", value2)