flock() Сочетания клавиш с Caps/Num/Scroll-локами

Здесь обсуждается всё, что касается макросов.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Post by HaRT »

Latest post of the previous page:

Skirda wrote:нашел. удавил.
будет Ctrl-; и Ctrl-Alt-;
Подтверждаю, в сборке EditorDrawSpeedUpTest based on build 2278 работают.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Skirda
Я так понял, flock() в последних билдах уже есть.
Методом тыка разобраться до конца не удалось, как насчёт описания?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

Code: Select all

N=FLock(Nkey,NState)
       Nkey:
          0 - NumLock
          1 - CapsLock
          2 - ScrollLock

       State:
         -1 get state
          0 off
          1 on
          2 flip

     Windows NT/2000/XP: The keybd_event function can toggle the NUM LOCK, CAPS LOCK, and SCROLL LOCK keys.
     Windows 95/98/Me:   The keybd_event function can toggle only the CAPS LOCK and SCROLL LOCK keys. It cannot toggle the NUM LOCK key.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

Версия поинтереснее будет:
http://farmanager.com/farbugs/macro.2_1.2.rar

"небольшие" внутренние переделки.
Просьба проверить, что ничего не отвалилось (не только макросы, но все, что связано с клавишами :oops: )
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Skirda
и в macro.2_1.2, и в предыдущих 2278-2279:

1.Все локи выключены.
Запускаю фар, по очереди делаю get state - везде 0.
Включаю локи с клавиатуры. Делаю get state - везде 0, не обновилось.
Презапсукаю фар, get state - уже везде 1.
Выключаю локи с клавиатуры. Делаю get state - везде 1, не обновилось.

2. Все локи выключены.
Запускаю фар, включаю локи макросом flock(n,1). Локи включаются, но state везде 0.
Выключить назад по flock(n,0) невозможно.
Повторно запускаю flock(n,1) - локи выключаются, а не должны.

3. Все локи включены.
Запускаю фар, выключаю локи макросом flock(n,0). Локи выключаются, но state везде 1.
Включить назад по flock(n,1) невозможно.
Повторно запускаю flock(n,0) - локи включаются, а не должны.

4. Пишу макрос CtrlCapsLock=CtrlShiftTab flock(1,2) - (переключаем окна и восстанавливаем состояние лока).
Жму CtrlCapsLock, отпускаю CapsLock: индикатор мигает с большой частотой до тех пор, пока удерживать Ctrl.

Флипы вроде работают как надо.


Теперь по macro.2_1.2:
Просьба проверить, что ничего не отвалилось
Таки отвалилось...
1. Пытаюсь удалить макрос по Ctrl.-Ctrl. - падает с AV: запись в 0.
2. Падает на сочетании макросов и ACTL_POSTKEYSEQUENCE:
берем, например, плагин из 273-го тикета, собираем под x86, видим, что сам посткейсиквенс не работает и после нескольких вызовов фар падает с AV.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

С flock засада есть... и... ХЗ.
Либо удалять эту функцию вообще или смирится...
Суть в том, что f-lock "модифицируется" через консольную очередь.
В остальном посмотрю.

Теперь про отвалы.
1. Нашел, удавил и все такое...
2. Кинь компиленную версию плагина - погоняю
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

С flock засада есть... и... ХЗ.
Либо удалять эту функцию вообще или смирится...
Ну в том виде, как сейчас - оно неюзабельно, и если не чинится - то лучше, наверное, в морг...
Кинь компиленную версию плагина - погоняю
держи.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

DrKnS wrote:1.Все локи выключены.
2. Все локи выключены.
3. Все локи включены.
Fixed.
DrKnS wrote:4. Пишу макрос CtrlCapsLock=CtrlShiftTab flock(1,2) - (переключаем окна и восстанавливаем состояние лока).
Жму CtrlCapsLock, отпускаю CapsLock: индикатор мигает с большой частотой до тех пор, пока удерживать Ctrl.
Кхе... здесь нарываемся на неприятки :oops:

есть 2 макроса
а) в области shell Ctrl-CapsLock=CtrlShiftTab flock(1,2)
б) в области редактора Ctrl-CapsLock=CtrlShiftTab flock(1,2)

0. в shell открыли файл в редаторе, переключились снова в shell
1. нажали Ctrl-CapsLock, у нас таки есть макрос, макрос запускается
2. макрос отработал, в конце саданул в очередь Up-Down для VK_CAPITAL (тот самый flock(1,2))
3. макрос закончился, но:
3.1 состояние Ctrl - в "нажато"
3.2 на подходе Up-Down для капслоск
4. ФАР видит в очереди CtrlCapsLock, проверяет, что мы в редакторе, а там такой же макрос тоже есть - начинает работать макрос
5. goto п.2

Помогает только кнопка на морде системного блока
DrKnS wrote:Таки отвалилось...
fixed.



После этого сообщения....
1. все смирились с п.4
2. я комичу изменения
3. zg вам выкатывает на тестирование версию в которой (я надеюсь) "goto п.1" не будет.

а! о! забыл :-)

http://farmanager.com/farbugs/macro.2_1.3.rar
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Локи пока не проверял, чуть позже отпишусь.

По macro.2_1.3:

- Ctrl. Ctrl. Enter Enter - AV: read from 0
- Пишем простые макросы типа Up=Up и Down=Down. После этого (не всегда, закономерности не увидел) при навигации стрелками в комстроку на каждом нажатии валится мусор, а фар в конце концов падает.
- валится на записи/удалении макроса по Ctrl. (не всегда, закономерности не увидел): несколько раз с AV, один раз - переполнение стека.
Attachments
FStd_trap.rar
(5.74 KiB) Downloaded 232 times
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Post by Skirda »

User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Post by zg »

Skirda wrote:есть 2 макроса
а) в области shell Ctrl-CapsLock=CtrlShiftTab flock(1,2)
б) в области редактора Ctrl-CapsLock=CtrlShiftTab flock(1,2)
в общем завис я исправил. но макросы не работают как ожидалось. потому как при физически нажатом капслоке программно его состояние не меняется. поэтому макросы должны быть примерно такими:

Code: Select all

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlCapsLock]
"Sequence"="CtrlShiftTab %a=flock(1,-1)&1; $while((flock(1,-1)&1)==%a) sleep(50) flock(1,2) $end"

[HKEY_CURRENT_USER\Software\Far\KeyMacros\Editor\CtrlCapsLock]
"Sequence"="CtrlShiftTab %a=flock(1,-1)&1; $while((flock(1,-1)&1)==%a) sleep(50) flock(1,2) $end"
сам фар
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Что возвращает FLock() в МОМЕНТ нажатия клавиши?

Post by John Doe »

Code: Select all

macro:post mmode(1,0) $Rep(50) sleep(100) print(flock(FLOCK_NUMLOCK,FLOCK_GETSTATE)+" ") $end 

Code: Select all

1 1 1 1 1 1 1 65408 0 0 0 0 0 0 0 0 65409 1 1 1 1 65408 0 0 0 0 0 0 0 65409 1 1 1 1 1 65408 0 0 0 0 0 0 1 1 1 1 1 1 1 65408 
:?:
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Что возвращает FLock() в МОМЕНТ нажатия клавиши?

Post by John Doe »

С другими локами то же самое: в момент нажатия к значению добавляется 65408 (FF80).

В энциклопедии есть пример, показывающий, что надо смотреть только первый бит.
Но это ведь только пример, а в тексте описания функции ничего не сказано.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Сочетания клавиш с Caps/Num/Scroll-локами

Post by Skirda »

на мантис, что бы не забылось
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Сочетания клавиш с Caps/Num/Scroll-локами

Post by John Doe »

На мантис легко, только что писать?
Это баг или фича?
1. Можно исправить функцию.
2. Или Энциклопедию.

Возможность определить удержание локов можно как-то применить, так что тупо убирать фичу не стоит.
Другое дело что наверно стоит завести отдельную функцию, с помощью которой можно определить какие из модификаторов в данный момент нажаты.
Ctrl/Alt/Shift/*Lock

У кого какие соображения по этому поводу?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Сочетания клавиш с Caps/Num/Scroll-локами

Post by Skirda »

Энц. править.
We are the Borg. You will be assimilated.
So Say We All!
Post Reply

Return to “Обсуждение макросов”