far2l icon indicating copy to clipboard operation
far2l copied to clipboard

Пропадает курсор в редакторе (и командной строке)

Open DmitryYudin opened this issue 1 year ago • 16 comments
trafficstars

Курсор в редакторе пропадает. Самый быстрый способ его вернуть - нажать F2.

При этом фар или нормально работает или входит в этот бескурсорный режим и уже не выходит из него. Флоу такой: редактируешь скрипт, запускаешь, опять в редактор, а курсора нет.

Заметил давно, проявляется на ppa и на head. Ubuntu, гуевый режим.

DmitryYudin avatar Jul 14 '24 10:07 DmitryYudin

Часто так делаю, ни разу не замечал. А скрипт что делает? Удалось отчасти воспроизвести запустив такую команду echo $'\033[?25l'; sleep 30 и отправив ее в фон путем Ctrl+Alt+Z но при нажатии любой буквы - курсор сразу появляется

elfmz avatar Jul 14 '24 13:07 elfmz

Возможно, это какой-то косяк самого wx?

Сталкивался один раз (на X11/ KDE Plasma). И в tg-чате этот баг тоже упоминался:

Konstantin Stolyarov:

Заметил такую проблему: ARM64, ubuntu, gnome, wayland, в GUI версии периодически перестает мигать или пропадает курсор в командной строке. Это как то можно вылечить?

Andrey Kuksov:

Это фича, засыпать при неактивности

Konstantin Stolyarov:

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

spnethw avatar Jul 14 '24 14:07 spnethw

Фича есть, но оно именно при неактивности срабатывает - если ничего не печатать через 3 минуты курсор перестает мигать, оставаясь при этом отображенным, и сразу начинает мигать при любом нажатии/тычке мышкой.

elfmz avatar Jul 14 '24 15:07 elfmz

Screencast from 07-14-2024 09:32:37 PM.webm Ничего такого скрипт не делает. В аттаче запись экрана. После запуска скрипта курсор пропадает.

DmitryYudin avatar Jul 14 '24 18:07 DmitryYudin

Из телеграм-чата https://t.me/far2l_ru/24934 про пропадание курсора:

Во время обновления криво обновились драйверы Nvidia. В итоге загрузился без них 1024x768. И в этом состоянии несколько раз словил пропадание курсора в far2l GUI, про которое тут недавно писали. После установки драйверов Nvidia курсор перестал пропадать!

akruphi avatar Jul 14 '24 19:07 akruphi

Ну если от дров зависит - то ой, far2l хардварное ускорение не юзает, он просто по таймеру вызывает _window->Refresh(...) - ключевая функция тут - ConsolePaintContext::BlinkCursor, а потом уже после этого refresh приходит (обычно:)) WinPortPanel::OnPaint который и отрисовывает что надо, потому для дебага на системе где воспроизводится можно втыкнуть принтф-ы в ConsolePaintContext::BlinkCursor с выводом координат которые передаются в RefreshArea, и еще один принт - в WinPortPanel::OnPaint - посмотреть приходит ли он после каждого ConsolePaintContext::BlinkCursor.

elfmz avatar Jul 14 '24 21:07 elfmz

Посмотрел видео - явно это не косяк отрисовки, а гдето вызвался SetConsoleCursorInfo( с bVisible=FALSE @DmitryYudin а вы можете сделать кое какие измнения, пересобрать с ними far2l и посмотреть повлияет ли оно на проблему? А именно вставить такую строчку: CONSOLE_CURSOR_INFO cci; WINPORT(GetConsoleCursorInfo)(NULL, &cci); cci.bVisible = TRUE; WINPORT(SetConsoleCursorInfo)(NULL, &cci); В код функции ~FarExecuteScope() находящейся в far2l/src/execute.cpp Вставьте ее в самый конец и попробуйте, если проблема уйдет - просьба попробовать поднимать ее выше и выше по коду и найти конкретную строчку вставка после которой фиксит проблему, типа: Попытка раз: image Если проблема исправлена - то ищем место выше после которого она перестает исправлятся: ..попытка два: image ..попытка три: image

elfmz avatar Jul 14 '24 21:07 elfmz

Если окажется что проблема уходит вообще куда бы не воткнуть эту строку в ~~FarExecuteScope(), то попробуйте ее воткнуть в конец функции выше - FarExecuteScope(const char *cmd_str): image

elfmz avatar Jul 14 '24 22:07 elfmz

@DmitryYudin если есть возможность, попробуйте проверить то, что советует @elfmz.

Баг встречается у многих, но, похоже, только у вас воспроизводится стабильно.

spnethw avatar Jul 15 '24 04:07 spnethw

а еще хотябы попробуйте текущий мастер - кое какой тонкий момент подправил

elfmz avatar Jul 15 '24 19:07 elfmz

Загадочная история: На зупущенном ppa-фаре (490b3728) проблема повторялась на раз-два (я его не закрывал с тех пор), из под него запустил локально собранный в /mnt/work/github/far2l-build/install/bin/ фар (64af5341). Увидел, что все повторяется. Запустил 64af5341 из терминала, в гуевом режиме (на всякий случай) - тоже повторяется. Закрыл все инстансы, запустил фар - ни в том ни в другом курсор не пропадает. Короче, буду наблюдать, как поймаю не стану закрывать, подебажу. Возможно, как-то влияет то (бред, конечно, но мало ли), что у меня почти всегда несколько инстансов far2l открыто. @elfmz

DmitryYudin avatar Jul 15 '24 22:07 DmitryYudin

у меня почти всегда несколько инстансов far2l открыто

У меня тоже, однако такого эффекта не видел. Вот в этом комите https://github.com/elfmz/far2l/commit/c373b82ff07a9b6181e44a4308e22af17d4c556b - исправлен косяк небольшой. А именно - код, который запускает команды во встроенном терминале - он в конце исполнения возвращает изначальное состояние курсора, однако логический косяк был в том что это изначальное состояние запоминалось единожды - по сути при первом запуске комнады, причем он мог быть и не из командной строки, но и из плагина (типа мультиарк) и юзерменю.. Теоретически если при запуске самой первой команды за время жизни фара курсор был в состоянии не показывания, то при завершении всех последующих запусков - он должен был постоянно спрятываться. Я это исправил - сделал чтобы состояние курсора запоминалось перед каждым запуском команд, а не только самым первым. Но вот воспроизвести проблему, провоцируя запуски команд самыми разными способами, мне не удалось, но может вас это натолкнет на мысль - вдруг вы там чтото делали особенное с фаром сразу после его запуска...

elfmz avatar Jul 16 '24 16:07 elfmz

Сегодня заметил, что проблема воспроизвелась, когда тяжелую сборку запустил на машине. Потом было не до этого и надо было ребутнуться, но в процессе я несколько раз проверил, что курсор пропадает. Может наведет на мысли какие)

DmitryYudin avatar Jul 17 '24 19:07 DmitryYudin

какая версия far2l была?

elfmz avatar Jul 17 '24 19:07 elfmz

FAR2L, version 2.6.1-2024-07-14-0c581fa-beta Linux x86_64

DmitryYudin avatar Jul 18 '24 11:07 DmitryYudin

по возможности проапгрейдитесь до чегонить после https://github.com/elfmz/far2l/commit/c373b82ff07a9b6181e44a4308e22af17d4c556b и понаблюдайте

elfmz avatar Jul 18 '24 14:07 elfmz

@DmitryYudin баг всё ещё проявляется?

spnethw avatar Sep 27 '24 12:09 spnethw

С тех пор все ok. Спасибо большое!

Я без фара, как без рук. Есть ли способ вам задонатить?

DmitryYudin avatar Sep 27 '24 14:09 DmitryYudin

С тех пор все ok. Спасибо большое!

Тогда можете закрыть issue (если что, несложно переоткрыть).

Я без фара, как без рук. Есть ли способ вам задонатить?

Как и все мы. 😃 Пока что главный разраб активно сопротивлялся... 🤷‍♂️

https://github.com/elfmz/far2l/issues/215#issuecomment-263349285 https://github.com/elfmz/far2l/issues/215#issuecomment-444461982

spnethw avatar Sep 28 '24 06:09 spnethw