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

Здесь обсуждается всё, что касается макросов.
User avatar
HaRT
Moderator
Posts: 8108
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 103 times

Post by HaRT » Thu 25 Oct, 2007 12:30

Latest post of the previous page:

Skirda wrote:нашел. удавил.
будет Ctrl-; и Ctrl-Alt-;
Подтверждаю, в сборке EditorDrawSpeedUpTest based on build 2278 работают.

User avatar
DrKnS
Posts: 4640
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Post by DrKnS » Thu 25 Oct, 2007 13:04

Skirda
Я так понял, flock() в последних билдах уже есть.
Методом тыка разобраться до конца не удалось, как насчёт описания?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Post by Skirda » Thu 25 Oct, 2007 16:08

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: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Post by Skirda » Thu 25 Oct, 2007 16:37

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

"небольшие" внутренние переделки.
Просьба проверить, что ничего не отвалилось (не только макросы, но все, что связано с клавишами :oops: )

User avatar
DrKnS
Posts: 4640
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Post by DrKnS » Thu 25 Oct, 2007 18:19

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: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Post by Skirda » Thu 25 Oct, 2007 18:51

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

Теперь про отвалы.
1. Нашел, удавил и все такое...
2. Кинь компиленную версию плагина - погоняю

User avatar
DrKnS
Posts: 4640
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Post by DrKnS » Thu 25 Oct, 2007 19:06

С flock засада есть... и... ХЗ.
Либо удалять эту функцию вообще или смирится...
Ну в том виде, как сейчас - оно неюзабельно, и если не чинится - то лучше, наверное, в морг...
Кинь компиленную версию плагина - погоняю
держи.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Post by Skirda » Fri 26 Oct, 2007 15:41

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: 4640
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Post by DrKnS » Fri 26 Oct, 2007 16:51

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

По 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 189 times

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Post by Skirda » Fri 26 Oct, 2007 17:34


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

Post by zg » Fri 26 Oct, 2007 18:45

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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 10 Sep, 2010 13:09

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: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Fri 10 Sep, 2010 13:24

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

В энциклопедии есть пример, показывающий, что надо смотреть только первый бит.
Но это ведь только пример, а в тексте описания функции ничего не сказано.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Sat 11 Sep, 2010 04:03

на мантис, что бы не забылось
We are the Borg. You will be assimilated.
So Say We All!

User avatar
John Doe
Бюрократ
Posts: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sat 11 Sep, 2010 11:00

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

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

У кого какие соображения по этому поводу?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

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

Post by Skirda » Sat 11 Sep, 2010 16:32

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

User avatar
John Doe
Бюрократ
Posts: 11390
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Sun 12 Sep, 2010 13:29

Усложнение текста статьи, неудобства в использовании...

1. Предлагаю все эти биты спрятать внутри функции.
Проще всего сделать через добавочные значения Nkey:


2. NState предлагаю сделать опциональным. По умолчанию "-1" (получить состояние клавиши).

3. "Обвязку" неплохо бы пояснить немного подробнее.
Возможно ли её убрать внутрь функции?

Post Reply

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