【问题标题】:AutoHotkey - use dictionary/lookup to make hotstring replacementsAutoHotkey - 使用字典/查找来替换热字串
【发布时间】:2021-08-24 04:41:02
【问题描述】:

我正在尝试编写一个 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)

【问题讨论】:

    标签: dictionary autohotkey


    【解决方案1】:

    当然,使用 Hotstring()(docs) 函数和 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)
    

    【讨论】:

    • 完美,这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多