Создание текстовой макросистемы на AHK
Я совсем новичок в AutoHotKey, и я пытаюсь сделать свою систему макросов. В настоящее время у меня есть система, которая выглядит следующим образом: у меня есть текстовые переменные
hi =
(
Hello,
Some more text
)
горячая строка
::\hi::
Macro(hi)
return
И функция Macro
:
Macro(text)
{
ClipSaved := ClipboardAll ; save clipboard
clipboard := text
ClipWait
Sleep, 150
Send, ^v
clipboard := ClipSaved ; restore original clipboard
return
}
Причина использования функции с буфером обмена заключается в том, что длинные текстовые блоки имеют тенденцию к задержке, пока они не будут распечатаны - проблема, которая не возникает с функцией.
Я нашел концепцию, называемую динамические горячие строки, и думаю, что смогу как-то реализовать ее, чтобы мне не пришлось писать второй отображаемый блок для каждого текстового поля, а вместо этого иметь одну горячую строку, которая бы понимала, что если это мой ввод начинается с \
и есть переменная в скрипте под именем x
что следует, он должен выполнить Macro(x)
, но я никогда не нашел подобных примеров.
Не могли бы вы предоставить мне пример кода или привести что-нибудь, что я должен проверить?
1 ответ
Есть несколько динамических функций Hotstring AutoHotkey, но это, вероятно, та, которую вы хотите использовать Hotstring с помощью menixator
Поэтому вам нужно скачать hotstring.ahk и #include, как в примерах.
#SingleInstance, force
#include Hotstring.ahk
hi=
(
Hello,
Some more text
)
bye=
(
So long,
Some more text
)
Hotstring("/hi", "Paste")
Hotstring("/bye", "Paste")
return
Paste:
text:=Trim($,"/") ; we need to get rid of the leading /
text:=% %text% ; and need to dereference it
Macro(text)
Return
Macro(text)
{
ClipSaved := ClipboardAll ; save clipboard
Clipboard := text
ClipWait
Sleep, 150
Send, ^v
clipboard := ClipSaved ; restore original clipboard
return
}
Есть несколько более элегантных способов сделать это, особенно с переменными, например, вы можете сохранить их в глобальном объекте (ассоциативном массиве), но это должно помочь вам.