Как отправить несколько бэков - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь отправить несколько обратных писем с помощью autohotkey, но я не могу заставить его работать последовательно. Цель состоит в том, чтобы автоматически создать блок кода при записи файла уценки. Таким образом, это должно выглядеть так:

`` `

` ``

Затем он должен go подняться за последний обратный удар первой строки, чтобы я мог укажите там язык. Я надеюсь, что кто-то может помочь мне с этим.

Я попробовал следующее:

!^c:: ; <--- Generate code blocks for markdown files
    SendInput, {Raw}`{Raw}`{Raw}`
    SendInput, {enter}
    SendInput, {enter}
    SendInput, {Raw}`{Raw}`{Raw}`
    SendInput, {up}
    SendInput, {up}
Return

Результат:

{Raw} {Raw}

{Raw} {Raw}

!^c:: ; <--- Generate code blocks for markdown files
    SendInput, ``````
    SendInput, {enter}
    SendInput, {enter}
    SendInput, ``````
    SendInput, {up}
    SendInput, {up}
Return

Результат:

``

``

!^c:: ; <--- Generate code blocks for markdown files
    SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
    SendInput, {enter}
    SendInput, {enter}
    SendInput, Chr(0x60)Chr(0x60)Chr(0x60)
    SendInput, {up}
    SendInput, {up}
Return

Результат:

Chr (0x60) Chr (0x60) Chr (0x60) Chr (0x60) Chr (0x60) Chr (0x60)

Я на Windows 10 с клавиатурой QWERTZ, установленной на немецкий язык, если это поможет.

Ответы [ 2 ]

1 голос
/ 18 января 2020

Хорошо, что вы нашли способ, вот некоторая дополнительная информация для вас:
Во-первых, проблема в том, что клавиши backtick не существует на вашей раскладке клавиатуры, поэтому вы получаете довольно неожиданное, даже ошибочное поведение при попытке отправьте его обычно .
Переключитесь, например, на раскладку клавиатуры Engli sh (US), и вы увидите, как {`` 3}`n`n{`` 3}{Up 2} работает просто отлично.

И это подводит меня к другому вопросу: нет необходимости использовать несколько команд отправки. Все в одной строке будет работать нормально, и вы можете указать ключу, который нужно повторить, заключив его в {} и следуя за ним по номеру.
Но да, вы сбегаете в AHK с обратным трюком, так что вот что это выглядело бы без использования трюка с повторением ключа ````````n`n``````{Up}{Up}.
Также здесь я использую `n для перехода на новую строку вместо отправки ввода. У меня нет действительно сильного мнения о том, почему один или другой лучше, так что используйте, что вы предпочитаете, я думаю.
Может быть, вы могли бы сказать, что ввод лучше, поэтому любая программа, в которой вы пишете, может решить, что конец строки для использования (возможно, CR LF вместо только LF).

А затем о вашей попытке попробовать что-то с {Raw}. Чтобы использовать другой режим отправки, вы указываете его только один раз в самом начале вашей строки, и он вступает в силу для всей команды отправки.
Прочтите документацию , чтобы получить более подробную и подробную информацию обо всех другие режимы отправки, чем я мог бы здесь напечатать.
Но в любом случае, режим Raw не сделает для нас ничего полезного. Это только заставляет символы ^+!#{} интерпретироваться буквально, а не как клавиши-модификаторы (^+!#) или как иные специальные клавиши ({}).

А затем об использовании Chr() функция. Чтобы запустить функцию и использовать ее возвращаемое значение в команде, вы захотите войти в режим выражения, в котором находится текущий параметр (единственный параметр команды send). Для этого вы указываете % в качестве самого первого символа параметра. Таким образом, ваша команда будет выглядеть следующим образом:
:SendInput, % Chr(0x60)Chr(0x60)Chr(0x60) "{Enter 2}" Chr(0x60)Chr(0x60)Chr(0x60) "{Up 2}"
Однако это то же самое, что буквальная отправка ключа возврата, поэтому мы столкнулись с проблемой, о которой я говорил в самом начале этого поста. Не идеальное решение.


Хорошо, теперь перейдем к решению, к которому вы уже пришли, отправив его через значение ключа в Юникоде.
Итак, вот ваш последний хороший чистый - liner:
!^c::SendInput, {U+0060}{U+0060}{U+0060}{Enter 2}{U+0060}{U+0060}{U+0060}{Up 2}
В «горячей» клавише с одной строкой вам даже не нужен завершающий конец выполнения кода return, очень приятно.
Но, к сожалению, функция повтора клавиш не будет работать в этом юникоде блок значений.

0 голосов
/ 17 января 2020

Итак, я действительно нашел ответ сам, он работает, когда вы используете Unicode представление обратной черты:

!^c:: ; <--- Generate code blocks for markdown files
    SendInput, {U+0060}{U+0060}{U+0060}
    SendInput, {enter}
    SendInput, {enter}
    SendInput, {U+0060}{U+0060}{U+0060}
    SendInput, {up}
    SendInput, {up}
Return

Более подробную информацию можно найти здесь:

Отправить - Синтаксис и использование

Список символов Юникода в Википедии

...