RunAfterFARStart или компьютеры и кошки

Здесь обсуждается всё, что касается макросов.
Post Reply
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

RunAfterFARStart или компьютеры и кошки

Post by siberia-man »

Странная история сегодня приключилась.

Вначале краткая предыстория. Far3 у меня запускается батником из-под ConEmu, который тоже запускается вызовом другого батника. Проблем с этим у меня нет. Но бывало так, что после рестарта машины Far3 запускался весьма долго до 1-2 минут. Наличие батников или ConEmu на скорость запуска не влияют, просто после ребута система очень занята своими внутренними делами и тормозит запуск Far3.

Сегодня произошла очень странная ситуация - после запуска Far3 нажатие любой функциональной клавиши Fnn или клавиш управления курсором приводило к выводу их "кодов" вместо выполнения соответствующей команды (например, надо было нажать F3 до 2-3 раз, чтобы запустить встроенный просмотрщик). Я каким-то шестым чувством быстро сообразил, что проблема может быть связана со следующим Lua-скриптом:



То есть, достаточно исключить этот скрипт и проблема исчезает. Проблема вообще не наблюдается если запскать Far3 без ConEmu. Вначале, чтобы решить проблему, я пытался эмулировать нажатия комбинации клавиш, типа ESC, F9 и т.д. Потом я попробовал использовать задержку win.Sleep -- и это помогло!



По крайней мере, я увидел положительный результат - достаточно было убрать соответствующую строчку и перезапустить ConEmu+Far3 и проблема сразу возвращалась.

В настоящее время мне не понятно, проблема программная (только ConEmu, или только Far3 исключительно под ConEmu, или совместный конфликт между ConEmu и Far3) или аппаратная (то ли клавиатура "сдыхает", то ли кошка прошлась - в среднем 900 граммов точечнон на каждую лапу).
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

RunAfterFARStart или компьютеры и кошки

Post by DrKnS »

siberia-man, насколько я понимаю, происходит следующее:
  • Вызовом system() вы порождаете cmd.
  • Conemu внедряет в процесс cmd.exe свой хук.
  • Руководствуясь своими соображениями о прекрасном, conemu переходит в некий режим 'xterm' (StartXTermMode в коде).
  • В этом режиме conemu вместо настоящих нажатий клавиш передает в консоль esc-последовательности. Видимо, для всякого портированного из линухов.
  • Однако, cmd вы породили не в интерактивном режиме с обработкой клавиш, а просто для вывода echo. Он это эхо вывел и резво вышел, управление вернулось в far и вы там начали нажимать всякое.
  • Несмотря на то, что cmd уже почил, conemu не выходит из этого режима сразу, а по каким-то причинам выжидает как минимум 2.5 секунды (XTERM_PID_TIMEOUT в коде).
Поэтому, пока не пройдут эти 2.5 секунды, conemu будет вместо клавиш присылать фару шляпу.
Примерно ту же самую задержку вы уже и сами подобрали экспериментальным путем.

Не стоит винить котика или бежать за новой клавиатурой, лучше написать на багтрекер.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

RunAfterFARStart или компьютеры и кошки

Post by siberia-man »

DrKnS wrote: Sat 23 Oct, 2021 12:36 происходит следующее
Спасибо. Разумное объяснение. Я начинал с 500мс. Задержка в 100мс тоже не помогала. А 2000мс - самое оно. У себя для надежности выставил 3000мс.
Post Reply

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