Не работает мышь после "выясняю, а может кто уже?"
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Не работает мышь после "выясняю, а может кто уже?"
Пока не баг репорт, а прощупывание ситуации...
Кто-нибудь сталкивался с тем, что после некоторых операций (пока вычисляю каких, а может кто уже?) в Фаре вдруг перестает откликаться мышь? Прокрутка элементов не работает, кликом не меняется текущий элемент панели и т.п. Происходит не часто, но эдак раз в день сталкиваюсь. Кто-то испытывал подобное?
Фар3, последние сборки (но может так и давно, но я недавно Фар3 пользую).
Кто-нибудь сталкивался с тем, что после некоторых операций (пока вычисляю каких, а может кто уже?) в Фаре вдруг перестает откликаться мышь? Прокрутка элементов не работает, кликом не меняется текущий элемент панели и т.п. Происходит не часто, но эдак раз в день сталкиваюсь. Кто-то испытывал подобное?
Фар3, последние сборки (но может так и давно, но я недавно Фар3 пользую).
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
consolemode - это что, можно подробнее или линк в мсдн какой? Плагин-то может и мой, но без него я это.. работать не могуDrKnS wrote:Ищи плагин, запускающий что-то консольное и не восстанавливающий за собой предыдущий consolemode.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Не работает мышь после "выясняю, а может кто уже?"
http://msdn.microsoft.com/en-us/library ... 86033.aspx
Конкретно - кто-то теряет ENABLE_MOUSE_INPUT.
Конкретно - кто-то теряет ENABLE_MOUSE_INPUT.
- t-rex
- Страшный и ужасный
- Posts: 4910
- Joined: Tue 15 Mar, 2005 16:17
- Location: Tel-Aviv
- Has thanked: 1 time
- Been thanked: 8 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
DWORD InMode=0, OutMode=0, ErrMode=0;
GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &OutMode);
GetConsoleMode(GetStdHandle(STD_ERROR_HANDLE), &ErrMode);
GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &InMode);
чёта там запускаем
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), OutMode);
SetConsoleMode(GetStdHandle(STD_ERROR_HANDLE), ErrMode);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), InMode);
GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &OutMode);
GetConsoleMode(GetStdHandle(STD_ERROR_HANDLE), &ErrMode);
GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &InMode);
чёта там запускаем
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), OutMode);
SetConsoleMode(GetStdHandle(STD_ERROR_HANDLE), ErrMode);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), InMode);
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Спасибо за наводки. То, что это мой плагин причастен - сомнений вроде нет. Но вот выловить пока не получается, где это происходит. Немного настораживает то, что ничего с этим не менялось в плагине с переходом с 2-ки на 3-ку. В Фар2 проблем не было, в Фар3 есть. Ну ладно, куда копать, вроде ясно, буду постепенно локализовать ситуацию, это дело времени.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Делением тестов пополам проблему вычленил. Если в PowerShellFar запускать cmd /c, например, такие команды
то мышь перестает работать. Также перестает работать Ctrl+C, заметил прям сейчас, пока копировал сюда куски кода. Буду думать, как лечить. Но все-таки, в Фар2 нет таких проблем. Точно это в плагине нужно подкручивать? Это ведь в каждом таком плагине и случае тогда надо приседать. Раньше было не надо..
Code: Select all
cmd /c echo Sorry mouse.
cmd /c dir
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Обернул OpenW сохранением/восстановлением режимов. Проблема ушла. Но точно это надо делать в плагине?
Надо так надо, тогда пойду и в других местах так делать, ибо PSF может дергаться на любое событие Фара где угодно, и любой вызываемый PowerShell код может вызвать cmd /c или подобное. Все же в Фар2 такие приседания были не нужны, потому и есть сомнение (не утверждение), что все в порядке в кухне. Кривые плагины или то, что они вызывают, вероятно, всегда будут находиться (причем иногда не сразу в процессе разработки и отладки), почему из-за этого должна отключаться мышь в Фаре? Разве Фар не может, получив управление и приготовившись получать свои события, обеспечить режимы консоли, которые эти свои события позволяют? Фар2 мог, или там что-то принциально по-другому было, что теперь нельзя?
Надо так надо, тогда пойду и в других местах так делать, ибо PSF может дергаться на любое событие Фара где угодно, и любой вызываемый PowerShell код может вызвать cmd /c или подобное. Все же в Фар2 такие приседания были не нужны, потому и есть сомнение (не утверждение), что все в порядке в кухне. Кривые плагины или то, что они вызывают, вероятно, всегда будут находиться (причем иногда не сразу в процессе разработки и отладки), почему из-за этого должна отключаться мышь в Фаре? Разве Фар не может, получив управление и приготовившись получать свои события, обеспечить режимы консоли, которые эти свои события позволяют? Фар2 мог, или там что-то принциально по-другому было, что теперь нельзя?
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Не работает мышь после "выясняю, а может кто уже?"
Не может - плагины могут менять режим и в отдельных нитях, что отловить невозможно.Разве Фар не может, получив управление и приготовившись получать свои события, обеспечить режимы консоли, которые эти свои события позволяют?
Far 1-2 "мог", делая setconsolemode, грубо говоря, на каждое нажатие клавиши.Фар2 мог, или там что-то принциально по-другому было, что теперь нельзя?
Это достаточно неоптимально, поэтому теперь всё сами, да.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Ясно, политика понята. Но жаль, лишняя головная боль и потенциальные проблемы у пользователей из-за нерадивых плагинописателей.
А неоптимально было - это как? Никто не жаловался. Или надоело это кодить все время? Тоже резон, конечно.
А неоптимально было - это как? Никто не жаловался. Или надоело это кодить все время? Тоже резон, конечно.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Просто размышляю, а не критикую - это соображение, наверное, все же натянутое (но интересны возражения, если есть). Навряд ли плагины будут этим заниматься в фоне (зачем?), а если будут то: 1) это нехорошо и это надо пресекать (просто не будут плохиша пользовать, пока не пофиксен); 2) а теперь чем лучше, если такие плохиши вдруг есть? только еще хуже теперь, раньше хоть иногда Фар сам мог себя подремонтировать, а теперь точно нет.DrKnS wrote:Не может - плагины могут менять режим и в отдельных нитях, что отловить невозможно.Разве Фар не может, получив управление и приготовившись получать свои события, обеспечить режимы консоли, которые эти свои события позволяют?
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Проанализировав расклад для PowerShellFar, пришел к выводу, что ничего лучшего не остается, кроме как обернуть практически все экспортируемые функции автоматическим сохранением и восстановлением режима консоли, так как заставлять пользователя заморачиваться над этими пустяками в скриптах PowerShell или модулях Фарнет - не дело.
В итоге тесты отработали за то же самое время и никаких тормозов нигде не наблюдаю. Но выглядит это все как-то некрасиво. Почему это Фар сам не делает, как он уже делал раньше, мне так и не понятно. Фар был непотопляем плагинами в таких пустяках. А теперь плагины должны помнить об этих мелочах, избегать потопления. Усложнять жизнь плагинам - регрессия, имхо.
В итоге тесты отработали за то же самое время и никаких тормозов нигде не наблюдаю. Но выглядит это все как-то некрасиво. Почему это Фар сам не делает, как он уже делал раньше, мне так и не понятно. Фар был непотопляем плагинами в таких пустяках. А теперь плагины должны помнить об этих мелочах, избегать потопления. Усложнять жизнь плагинам - регрессия, имхо.
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Было удобно. Неоптимально - это преувеличено, как показал практический опыт (проверено именно на каждое нажатие клавиши и даже более). Сделайте, пожалуйста, как было в Фар2, если это не сложно, от этого будет только польза.DrKnS wrote:Far 1-2 "мог", делая setconsolemode, грубо говоря, на каждое нажатие клавиши.
Это достаточно неоптимально, поэтому теперь всё сами, да.
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Не работает мышь после "выясняю, а может кто уже?"
Пока доводы NightRoman'а звучат весьма убедительно: польза для стабильности очевидна, а вред с точки зрения производительности не выявлен.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- NightRoman
- Posts: 6184
- Joined: Fri 18 Aug, 2006 13:52
- Location: Cambridge, UK
- Has thanked: 32 times
- Been thanked: 62 times
- Contact:
Re: Не работает мышь после "выясняю, а может кто уже?"
Кроме того, в Фаре это будет оптимальнее сделано, чем в плагине, ибо Фару нужно только установку своих режимов делать, а плагину сначала нужно делать сохранение текущего режима (лишняя работа по сравнению с Фаром) и только потом восстановление.