Автоотключение: заменить комбинацию клавиш (но с таймаутом)

#autohotkey

#автоотключение

Вопрос:

Когда я печатаю, я хочу, чтобы мой скрипт заменял:

 "ab" to "x"
"ac" to "y"
"a[more than 300ms]b" - don't replace, just leave "ab"
  

Таким образом, она должна заменяться, только если время между «a» и «b» / «c» меньше 300 мс

пытался сделать это:

 a amp; b :: Send x
a amp; c :: Send y
  

Но это, очевидно, не «прощает» мне никакой задержки

Было бы здорово получить какие-либо подсказки, спасибо!

Ответ №1:

Горячая строка обычно хороша для замены. Чтобы добавить эту задержку, вот простая вещь, которую я мог бы придумать:

 ~*a::APressTime := A_TickCount

:*B0:ab::
    if(A_TickCount - APressTime <= 300)
        SendInput, % "{BS 2}x"
return
  

Сначала простая горячая клавиша для A, которая просто сохраняет текущее системное время с помощью A_TickCount .

Затем горячая строка, для которой я установил некоторые параметры, которые вы, вероятно, захотите использовать:
* таким образом, вам не нужно вводить конечный символ.
B0 таким образом, он не возвращает буквы ab автоматически.
Вы также можете захотеть использовать ? опцию, чтобы горячая строка также работала «внутри слова». Добавьте ее, если хотите.

Затем мы сравниваем текущее системное время со временем, когда a было нажато в последний раз. Если это 300 мс или меньше, дважды отправьте пробел, за которым следует x .
( {BS 2} то же самое, что {Backspace 2} или {Backspace}{Backspace} )

Чтобы сделать то же самое с ac , просто скопируйте и вставьте горячую строку снова и переключитесь b с c , и x с y .
В качестве альтернативы, есть что-то более необычное, чтобы поместить их в одну и ту же метку горячей строки с троичным:

 :*B0:ab::
:*B0:ac::
    if(A_TickCount - APressTime <= 300)
        SendInput, % "{BS 2}" (SubStr(A_ThisHotkey, 0) = "b" ? "x" : "y")
return