Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed cmd console display can't be closed by ESC sometimes #1003

Closed
flowswitch opened this issue May 26, 2021 · 10 comments
Closed

Failed cmd console display can't be closed by ESC sometimes #1003

flowswitch opened this issue May 26, 2021 · 10 comments

Comments

@flowswitch
Copy link

Набираю какую-нибудь консольную команду, завершающуюся неудачно (к примеру, make с неудачной сборкой), far оставляет видимой консоль (не показывает панели), хочу вернуться к панелям, нажимаю ESC - нет реакции. Нажимаю любую другую клавишу (за все 101 не скажу, но стрелки и буквы годятся) - панели возвращаются. Запускаю опять ту же самую команду, вызвав её текст через Ctrl-E - всё нормально, ESC возвращает к панелям. А если заново набираю руками - ESC не работает.
Так влияют далеко не все команды, какое-нибудь ls /nonexistent нормально закрывается по ESC, тот же самый make c неверными ключами выдаёт help и нормально закрывается по ESC, а вот make с любой ошибкой на стадии обрабоки Makefile (хоть ошибки вызываемых команд, хоть ошибки формата самого файла) - нет. При этом, повторюсь, стоит только не набрать make руками заново, а вызвать из истории по Ctrl-E - всё хорошо, ESC работает.

@elfmz
Copy link
Owner

elfmz commented May 28, 2021

Для начала - это все про консольную версию far2l или wx-овую? И под какой ОС? (В убунте ошибка после make с мусорным Makefile закрывается у меня нормально и в wx и в tty версиях far2l)

@flowswitch
Copy link
Author

WX-овая, Linux Mint Cinnamon, версия make: GNU Make 4.2.1 Built for x86_64-pc-linux-gnu. Куда можно посмотреть? Залогировать что-то?
Нащупал вот такое: попробовал запустить из консоли FARа strace make - баг не проявляется. Попробовал перенаправлять вывод в файл, и вот тут возникла масса интересного: с перенаправленным stdout баг пропадает начисто, а с перенаправленным stderr - проявляется/пропадает в зависимости от имени файла, в который перенаправляю! make 2>a работает, make 2>m - нет. Попробовал - с однобуквенными именами баг проявляется только с m и r, дальше попробовал повторять эти буквы, make 2>rr уже без бага, а вот с m чем дальше, тем интереснее - баг есть с m, mm, mmm, mmmm, а вот начиная с пяти m - пропадает. Это часом не с escape-последовательностями связяно? У этого make цветной вывод (в файл, правда, выводит без цветовых последовательностей, поймать их содержимое не смог).

@elfmz
Copy link
Owner

elfmz commented May 28, 2021

Какая нить хитрая и необрабатываемая последовательность в выводе в принципе могла бы вызвать такой эффект. У меня нашлась система с make 4.2.1 но он там выдает обычный вывод, без цветов. Создание Makefile таким образом:
echo foobar > Makefile потом последующий make выдает у вас чтото цветное? МОжете заскриншотить как оно выглядит в обычном терминале?

@flowswitch
Copy link
Author

Извиняюсь, зациклился и глупость написал, цветной вывод оказался не у make, а у запускаемого им gcc. Т.е. цветной вывод ни при чём (баг проявляется и на простейших «сломанных» Makefile вида all: nonexistent_file, никого не запускающих).
Послежу ещё, не проявится ли тот же самый эффект на чём-нибудь ещё кроме make, ну и исходники make поизучаю, в чём отличие между выводом help (который нормально закрывается) и выводом ошибок.

@singalen
Copy link
Contributor

Насколько мне известно, make никаких особенных кодов не пишет. Совсем наугад: это может быть код возврата или наличие дочернего процесса-шелла.

@flowswitch
Copy link
Author

flowswitch commented Jun 25, 2021

Поймал полностью аналогичное поведение без make:
набрал (руками побуквенно) команду xor, отсутствующую в текущей папке, получил незакрываемый по ESC экран

Command 'xor' not found, did you mean:

command 'oor' from deb openoverlayrouter (1.3.0+ds1-2)
command 'sor' from deb pccts (1.33MR33-6build1)
command 'tor' from deb tor (0.4.2.7-1)
command 'vor' from deb vor (0.5.7-3)

Try: sudo apt install

исполняю то же самое, вызвав из истории (по Ctrl-E) - ESC работает. Набираю ради проверки не xor, а nor (тоже отсутствует), тоже получаю экран с предложениями, но ESC работает!
Пробую дальше, урезал xor до xo - баг есть, урезал до x - баг есть. Пробую другие комбинации x+буква - нормально работает всё, кроме xo и xt - ну что за магия??

@elfmz
Copy link
Owner

elfmz commented Jun 26, 2021

откройте терминал, в нем запустите gdb far2l
когда откроется far2l - воспроизведите зависон, когда зависнет - перейдите в терминал с gdb, ткните там Ctrl+C, потом в появившейся ком строке дебаггера напишите thread apply all bt, после чего - полную распечатку результата выложите здесь

@flowswitch
Copy link
Author

Извиняюсь за задержку, сделал (в окне far2l уже нажат ESC и панели не вернулись):

(gdb) thread apply all bt

Thread 12 (Thread 0x7ffff1cc6700 (LWP 53764)):
#0 0x00007ffff71ea12b in __GI___select (nfds=19, readfds=0x7ffff1cc5890, writefds=0x0, exceptfds=0x0, timeout=0x0) at ../sysdeps/unix/sysv/linux/select.c:41
#1 0x000055555572102f in WinPortFSNotify::WatcherProc() ()
#2 0x000055555572112d in WinPortFSNotify::sWatcherProc(void*) ()
#3 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#4 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 8 (Thread 0x7ffff14c5700 (LWP 53752)):
#0 0x00007ffff71ea12b in __GI___select (nfds=21, readfds=0x7ffff14c4890, writefds=0x0, exceptfds=0x0, timeout=0x0) at ../sysdeps/unix/sysv/linux/select.c:41
#1 0x000055555572102f in WinPortFSNotify::WatcherProc() ()
#2 0x000055555572112d in WinPortFSNotify::sWatcherProc(void*) ()
#3 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#4 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 6 (Thread 0x7ffff24c7700 (LWP 53750)):
#0 0x00007ffff71b23bf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7ffff24b3c10, rem=rem@entry=0x0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1 0x00007ffff71b8047 in __GI___nanosleep (requested_time=requested_time@entry=0x7ffff24b3c10, remaining=remaining@entry=0x0) at nanosleep.c:27
#2 0x00007ffff71ea9bf in usleep (useconds=) at ../sysdeps/posix/usleep.c:32
#3 0x000055555566dacb in WaitKey(unsigned int, unsigned int, bool) ()
#4 0x00005555555fcb98 in CommandLine::CmdExecute(wchar_t const*, bool, bool, bool, bool, bool) ()
#5 0x00005555555adb79 in CommandLine::ProcessKey(int) ()
#6 0x00005555556225c9 in FileList::ProcessKey(int) ()
#7 0x000055555562b57f in FilePanels::ProcessKey(int) ()
#8 0x00005555555ec771 in EditControl::AutoComplete(bool, bool) ()
#9 0x00005555555e7b6e in Edit::InsertKey(int) ()
#10 0x00005555555e987a in Edit::ProcessKey(int) ()
#11 0x00005555555ad89b in CommandLine::ProcessKey(int) ()
#12 0x000055555562b59d in FilePanels::ProcessKey(int) ()
#13 0x00005555556893f2 in Manager::ProcessKey(unsigned int) ()
#14 0x00005555556899ba in Manager::ProcessMainLoop() ()
#15 0x0000555555689ba1 in Manager::EnterMainLoop() ()
#16 0x0000555555685aa6 in MainProcess(FARString, FARString, FARString, int, int) ()
#17 0x00005555556860f0 in MainProcessWithInterThreadCallsDispatching(FARString&, FARString&, FARString&, int, int) ()
#18 0x000055555568667b in FarAppMain(int, char**) ()
#19 0x0000555555751912 in WinPortAppThread::Entry() ()
#20 0x00007ffff780559a in wxThread::CallEntry() () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#21 0x00007ffff78110da in ?? () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#22 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#23 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 4 (Thread 0x7ffff3791700 (LWP 53748)):
#0 0x00007ffff71e7aff in __GI___poll (fds=0x555555ac3130, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007ffff653736e in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007ffff65376f3 in g_main_loop_run () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff5f9df8a in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#4 0x00007ffff6560ad1 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#6 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 3 (Thread 0x7ffff3f92700 (LWP 53747)):
#0 0x00007ffff71e7aff in __GI___poll (fds=0x555555aaed30, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007ffff653736e in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007ffff65374a3 in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff65374f1 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007ffff6560ad1 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#6 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 2 (Thread 0x7ffff480d700 (LWP 53746)):
#0 0x00007ffff71ea12b in __GI___select (nfds=8, readfds=0x7ffff480b880, writefds=0x0, exceptfds=0x7ffff480b900, timeout=0x0) at ../sysdeps/unix/sysv/linux/select.c:41
#1 0x000055555576ee74 in LocalSocketServer::WaitForClient(int) ()
#2 0x0000555555736ea0 in SudoAskpassServer::Thread() ()
#3 0x0000555555736f1d in SudoAskpassServer::sThread(void*) ()
#4 0x00007ffff761b609 in start_thread (arg=) at pthread_create.c:477
#5 0x00007ffff71f4293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7ffff4ffa580 (LWP 53742)):
#0 0x00007ffff71e7aff in __GI___poll (fds=0x555555e1b3e0, nfds=3, timeout=189) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x00007ffff653736e in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2 0x00007ffff65376f3 in g_main_loop_run () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff6b6f37d in gtk_main () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#4 0x00007ffff7b8e575 in wxGUIEventLoop::DoRun() () from /usr/lib/x86_64-linux-gnu/libwx_gtk3u_core-3.0.so.0
#5 0x00007ffff76f4d41 in wxEventLoopBase::Run() () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#6 0x00007ffff76bc3da in wxAppConsoleBase::MainLoop() () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#7 0x00007ffff774873d in wxEntry(int&, wchar_t**) () from /usr/lib/x86_64-linux-gnu/libwx_baseu-3.0.so.0
#8 0x0000555555755b40 in WinPortMainWX(int, char**, int ()(int, char**), int) ()
#9 0x0000555555737d6a in WinPortMain ()
#10 0x00005555555a68a4 in main ()
(gdb)

@elfmz
Copy link
Owner

elfmz commented Aug 9, 2021

А у вас ~/.config/far2l/key_macros.ini содержит чтото? Усли да - можете его временно убрать? Если проблема уйдет - расшарьте свой key_macros.ini.

@flowswitch
Copy link
Author

flowswitch commented Aug 10, 2021

Да, макросы влияют, убрал - проблема ушла. И дело конкретно вот в этом:
[KeyMacros/Shell/Esc]
DisableOutput=0x1
EmptyCommandLine=0x1
Sequence=CtrlO

Но! Дальше интереснее: убрал вообще весь .config/far2l, запустил far чтобы пересоздался, закинул назад свой старый key_macros.ini - получил назад свой показ консоли по Esc, но на первый взгляд без проблемы (ошибка make закрывается). Однако дальше в таком состоянии проблема проявилась на некоторых однобуквенных командах. Нашёл вот такой минимальный набор действий:

  • удаляем весь .config/far2l
  • запускаем far чтобы пересоздать конфиг
  • выходим из far
  • создаём .config/far2l/settings/key_macros.ini с вышеуказанным макросом для Esc
  • запускаем far
  • пытаемся выполнить несуществующую команду из одной буквы "c" - получаем незакрываемую по Esc консоль с "c: command not found".
    Пробовал разные буквы, проблема не проявляется на a, b, f-h и проявляется на c-e, i, j (дальше не стал).

И ещё такой момент: как уже сказал, после очистки конфига и добавления макроса уходит проблема с незакрытием make (т.е. вот эти все c, d, e вызывают проблему, а make с ошибкой, не закрывавшийся раньше - уже нормально закрывается). Чтобы проблема с make вернулась, достаточно скопировать в этот свежий конфиг мой старый history/commands.hst

@elfmz elfmz closed this as completed in 8c8a2db Aug 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants