1

Тема: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Уважаемые форумчане.

Мне во время работы часто приходится вставлять endash между цифрами. И поскольку очень тяжко нажимать Alt+0150, то, пожалуйста, подскажите, как написать скрипт, чтобы после двойного нажатия vk90 (Num Lock) появлялось тире (endash) и при этом клавиша Num Lock оставалась активной.

Другими словами двойное нажатие vk90 (Num Lock) никак не должно влиять на возможность набирать цифры, и при этом должно появляться тире (endash (Alt+0150)).

Мой выбор двойного нажатия vk90 (Num Lock) вынужденный, ВСЕ остальные клавиши уже запрограммированы.

2

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

ВСЕ остальные клавиши уже запрограммирован

Круто! Столько возможных сочетаний клавиш, и все они уже задействованы? А кроме горячих клавиш ещё существуют строки автозамены.

3 (изменено: YMP, 2016-12-24 16:54:17)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Мне кажется, удобнее автозамена двойного дефиса на тире.


::--::—

4

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Если всё-таки нужен NumLock, то можно так:


NumLock::
    N:=0
    Loop {
        N++
        KeyWait, %A_ThisHotkey%
        KeyWait, %A_ThisHotkey%, D T0.3
    } Until ErrorLevel
    If (N=1) {
        If GetKeyState(A_ThisHotkey, "T") {
            SetNumLockState, Off
        } Else {
            SetNumLockState, On
        }
    }
    Else
        Gosub % IsLabel(L := A_ThisHotkey . "_" . N) ? L : "NoCombo"
Return

NoCombo:
    Return

NumLock_2:
    Send, —
    Return

Ниже можно прописать процедуры для тройного, четверного и т.д. нажатий (метки NumLock_3, NumLock_4 и т.д.).

5

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

YMP пишет:

Мне кажется, удобнее автозамена двойного дефиса на тире.

Такая схема не пройдёт. При тройном нажатии дефиса-минуса выдаст длинное тире (не короткое, как запрашивалось) с этим дефисом-минусом на конце. Если задать один дефис-минус, то нажатие будет двойное, но опять же с прописью лишнего д.-м. на конце.

6

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Flasher
Т.е. не пройдёт, если вам где-то нужно много дефисов подряд. Мне лично не нужно.

7

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

YMP
При чём тут много дефисов? Я описал поведение неверной замены.

8

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Такой случай тоже предусмотрен в AutoHotkey.

:*:--::—

9

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Flasher пишет:

При чём тут много дефисов? Я описал поведение неверной замены.

Почему неверной? Дефис находится в списке ending characters, которые вызывают замену. Но можно его оттуда исключить. Так у вас работает?


#Hotstring EndChars ()[]{}:;'"/\,.?!`n `t
::--::—

10

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

YMP пишет:

Почему неверной?

Потому что замена происходит на —- после тройного нажатия "-". При двойном ничего не происходит.

YMP пишет:

Так у вас работает?

Нет замены.

11

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Flasher пишет:

Потому что замена происходит на —- после тройного нажатия "-". При двойном ничего не происходит.

Вы просто не в курсе, как эти замены работают. По умолчанию замена происходит в момент, когда после заменяемой комбинации вставляется "конечный символ" (ending character). Изначально это набор -()[]{}:;'"/\,.?!`n `t. Можно скорректировать его в директиве #Hotstring, как у меня выше, или отключить его необходимость, как в коде ypppu.

12

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Почему не в курсе? Я просто указал на вашу ошибку.

13

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Какая же это ошибка? По заданию тире должно появляться по двойному нажатию. Никто не заставляет делать тройное нажатие.

14

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

ypppu
Так в вашем коде она как раз исправлена. )

15

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

ypppu пишет:

Какая же это ошибка? По заданию тире должно появляться по двойному нажатию. Никто не заставляет делать тройное нажатие.

Причём по двойному нажатию NumLock. А вариант с автозаменой двух дефисов никто не запрашивал, это моё предложение. В моей ситуации удобно так, а под другую можно доработать.

16

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Ypppu, в это непросто поверить, но у меня 11600 автозамен. Из них я около 4000 знаю наизусть. Я очень люблю нажимать 2, 3, 4 раза на одну кнопку для запуска макроса — это круче чем сочетание клавиш. Сочетание клавиш  — это для второстепенных по частоте использования действий.

17 (изменено: svoboden, 2017-03-11 22:00:02)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Насчет автозамен, думаю, так будет надежней работать:

:?*:--::{U+2013}{Space}

Странно, почему нельзя повесить endash, на любое другое сочетание клавиш, а не на двойной Num Lock. Например:

vk7B:: ; F12
SendInput {U+2013}
return

18 (изменено: svoboden, 2016-12-25 06:59:32)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Flasher пишет:

ypppu
Так в вашем коде она как раз исправлена. )

Неисправлено. Надо так:

:?*:--::—

19 (изменено: svoboden, 2017-03-11 21:59:16)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

ypppu
Перед цифрами, ваш вариант только на третий раз срабатывает. И в итоге получается, что-то типо этого: -—. Забыли знак "?", поставить в скрипте.

20

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Не только цифры.

? (знак вопроса): строка автозамены запустится, даже если находится внутри другого слова, то есть, если символ, напечатанный непосредственно перед строкой, является буквой или цифрой. Например, если мы имеем такую строку автозамены:

Если справку почитать, там ещё много чего предусмотрено.

21

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Ну, если у человека 11600 автозамен, то он всё про них знает. Хотя подозреваю, что это слово он мог использовать не по адресу.

22 (изменено: svoboden, 2017-02-03 14:01:44)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Так понятно, что ни только цифры, просто вопрос про цифры был. Без этого знака автозамена вообще не пригодна.

23 (изменено: svoboden, 2017-02-03 14:02:50)

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Вряд ли, зачем тогда ему вопросы задавать, если он все знает?

24

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

Может, прикалывается.

25

Re: AHK: двойное нажатие vk90 (Num Lock) и появление тире (endash)

YMP, спасибо за скрипт. Я в нем заменил «Send, —» на «Send, – (Alt+0150)» и у меня все заработало.

Отвечаю для svoboden, самые удобные клавиши уже заняты.