5

Я обнаружил, что в кодировании я редко использую квадратные скобки [] но часто использую фигурные скобки {} . На большинстве клавиатур они вводятся с помощью Shift+[ или Shift+] .

Теперь я попытался использовать AutoHotkey для переназначения этих ключей с помощью:

[::{{}

Добавление {} в основном является необработанным режимом, но это не сработало. Далее я попробовал

{[}::{{}

но это тоже не сработало.

Любая помощь?

3 ответа3

11

Использование фигурных скобок для интерпретации необработанных ключей возможно только для команд отправки . Итак, чтобы отобразить [ на { и ] на } вы можете использовать:

[::Send, {{}
]::Send, {}}

Примечание: переназначение клавиши с ее эквивалентом Shift проблематично, поскольку большинство, если не все клавиатуры, посылают один и тот же скан-код каждый раз, единственное отличие заключается в введении клавиши Shift (которая имеет свой собственный скан-код).

Например, нажатие [на клавиатуре посылает скан 01A и дает [ Нажатие LShift+[ отправляет коды сканирования 02A и 01A , давая { .


Обновить:

Я успешно преодолел проблему со скан-кодом с помощью умной логики! Используя следующий формат, вы сможете переключать любую клавишу с помощью пары Shift . Повтор ключа должен также работать.

*$[::
    if (GetKeyState("Shift"))
        Send, {[}
    else
        Send, {{}  
    return

*$]::
    if (GetKeyState("Shift"))
        Send, {]}
    else
        Send, {}}
    return

Развивая эту идею, @Bob написал более надежную версию сценария:

*$[::
    if (GetKeyState("Shift"))
        SendInput, {[ Down}
    else
        SendInput, {{ Down}
    return

*$]::
    if (GetKeyState("Shift"))
        SendInput, {] Down}
    else
        SendInput, {} Down}
    return

*$[ Up::
    if (GetKeyState("Shift"))
        SendInput, {[ Up}
    else
        SendInput, {{ Up}
    return

*$] Up::
    if (GetKeyState("Shift"))
        SendInput, {] Up}
    else
        SendInput, {} Up}
    return
2

Если бы мне представили проблему, не увидев ответ выше, я бы просто добавил несколько горячих строк в приведенном ниже примере.

:*?:[::
    SendInput, {Shift Down}`[{Shift up}
    return

:*?:]::
    SendInput, {Shift Down}`]{Shift Up}
    return

:*?:{::
    SendInput, `[
    return

:*?:}::
    SendInput, `]
    return
0

Первый ответ - плохое решение, если вы используете любые сочетания клавиш с фигурными скобками, потому что они сломали их. Совместимая с ярлыками версия здесь:

$[::Send {{ Down}
$[ Up::Send {{ Up}

+$[::Send {[ Down}
+$[ Up::Send {[ Up}

$]::Send {} Down}
$] Up::Send {} Up}

+$]::Send {] Down}
+$] Up::Send {] Up}

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

#NoEnv
#NoTrayIcon
#SingleInstance force
#MaxHotkeysPerInterval 200

; Swap [] with ()
  [::Send {( Down}
  [ Up::Send {( Up}

  ]::Send {) Down}
  ] Up::Send {) Up}

  +9::Send {[ Down}
  +9 Up::Send {[ Up}

  +0::Send {] Down}
  +0 Up::Send {] Up}

; Swap " with '
   $'::Send "
  +$'::Send '

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .