KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Место, где разработчики плагинов могут поделиться своим опытом.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

KEY_IDLE

Post by 2useven10 »

Latest post of the previous page:

Если KEY_IDLE нужен, он слишком легко выключается (через far.Timer или actl_synchro).
В просмотре, например, пришлось вставить костыль, который генерит KEY_IDLE из KEY_NONE.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

KEY_IDLE

Post by zg »

John Doe wrote:Если KEY_IDLE востребовано, то может стоит выделить отдельный EventType?
не нужен. есть actl_synchro, его достаточно. KEY_IDLE будет удалено в ближайшее время.
2useven10 wrote:Если KEY_IDLE нужен, он слишком легко выключается (через far.Timer или actl_synchro).
во времена w2k любая анимированная иконка в трее генерила нулевые перемещения мыши в текущем окне. что тоже убивало KEY_IDLE. как дела с этой фичей сейчас обстоят — не в курсе, но как пример ущербности KEY_IDLE — думаю подойдёт.
В просмотре, например, пришлось вставить костыль, который генерит KEY_IDLE из KEY_NONE.
в просмотре правильным решением было бы что-то вроде события no_user_input. но костыли — это конечно лучше.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

KEY_IDLE

Post by 2useven10 »

zg wrote: KEY_IDLE будет удалено в ближайшее время.
... правильным решением было бы что-то вроде события no_user_input.
Как чёрта называть вопрос не самый важный.
А пока вода в стакане успокоится, да - лучше костыль.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

KEY_IDLE

Post by John Doe »

2useven10 wrote: Если KEY_IDLE нужен, он слишком легко выключается (через far.Timer или actl_synchro).
И точно...

Нашёл ошибку в своём эксперименте:
John Doe wrote: 4242: в покое постоянно приходят "пустые" записи (EventType==1)
4303: в покое постоянно приходят "пустые" записи (EventType==0)
Оказывается в последних билдах ничего не менялось.
Просто при постоянном вызове actl_synchro вместо KEY_IDLE приходят те пустые записи с EventType==0 (очевидно это и есть KEY_NONE)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

KEY_IDLE

Post by John Doe »

Code: Select all

zg 15.03.2015 03:02:46 +0200 - build 4305

1. в ProcessEditorInput не посылаются псевдоклавиши KEY_IDLE и KEY_NONE.
Замечу, что они всё ещё посылаются в ProcessConsoleInputW
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

KEY_IDLE

Post by John Doe »

После этого исправления в ProcessEditorInputW перестали приходить сообщения об отпускании клавиш.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

KEY_IDLE

Post by zg »

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

KEY_IDLE

Post by John Doe »

Может быть отпускания стоит посылать и в DN_CONTROLINPUT?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by NightRoman »

Через год заметил, что KEY_IDLE не стало. Не часто нужно, очевидно. Но иногда было полезно. В частности полезно было то, что оно не вызывалось, когда редактор неактивен.
2useven10 wrote: Если KEY_IDLE нужен, он слишком легко выключается (через far.Timer или actl_synchro).
А как добиться чтобы это не вызывалось, когда редактор не активен?
Last edited by HaRT on Wed 27 Apr, 2016 18:22, edited 1 time in total.
Reason: Добавлен источник цитаты
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by NightRoman »

Кроме того, far.Timer для плагинов не годится. То есть, чтобы заменить KEY_IDLE, надо организовать в плагине свой таймер и отслеживать активность редактора в обработчике syncro. Конечно, это реализуемо. Но было гораздо проще, хоть и не очень красиво, не событием, как в диалогах и панелях, а через псевдо клавишу. Может, EE_IDLE стоило бы иметь вместо KEY_IDLE?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by zg »

NightRoman wrote:То есть, чтобы заменить KEY_IDLE, надо организовать в плагине свой таймер и отслеживать активность редактора в обработчике syncro.
и в чём проблема?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by NightRoman »

zg wrote:
NightRoman wrote:То есть, чтобы заменить KEY_IDLE, надо организовать в плагине свой таймер и отслеживать активность редактора в обработчике syncro.
и в чём проблема?
Делать надо, это неудобно. А в диалогах и панелях этого делать не надо, Фар позаботился, это удобно.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by zg »

NightRoman wrote:Делать надо, это неудобно. А в диалогах и панелях этого делать не надо, Фар позаботился, это удобно.
там выше по треду есть пример, про то как оно удобно в диалогах и панелях. просто в диалогах и панелях оно документировано было и для совместимости пришлось оставить, но пользоваться этим тоже не особо рекомендуется, потому что гарантий, что оно приходить будет, никаких нет.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by NightRoman »

В панелях и диалогах IDLE у меня активно используется, и польза от этого большая. Та же самая польза и в редакторе, только нужно реже в редакторе. Но использование-то было, теперь не работает.

Писать свой таймер муторно. Кроме упомянутых проверок на текущую область надо еще обеспечить, что обработчик не вызывался, если он уже работает или уже послан в async (обработка может занимать время, скажем, показ диалога об ошибке, а таймер продолжает стрелять события, с IDLE из Фара об этом можно не беспокоится). Да и вклиниваться может в работу пользователя, с этим тоже надо еще думать, как быть.

То есть это окончательно, и на EE_IDLE надеятся не стоит?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

KEY_NONE, KEY_IDLE, KEY_GOTFOCUS, KEY_KILLFOCUS (ProcessPanelInputW - что такое wVirtualKeyCode 1, 6, 7)

Post by zg »

нет. не стоит.
Post Reply

Return to “Разработка плагинов”