far2l icon indicating copy to clipboard operation
far2l copied to clipboard

Various minor bugs

Open akruphi opened this issue 2 years ago • 12 comments

1) Переключение интерфейса far2l на Белорусский язык приводит к ошибке

изображение с ошибкой в debug log

Init: count expected=2287 but actual=2286

При этом

grep -v "// need translation:" FarBel.lng | wc
grep -v "// need translation:" FarEng.lng | wc
grep -v "// need translation:" FarRus.lng | wc

выдают одинаковое кол-во значащих строк 4929.

Странный глюк именно с последним языком из перечисленных в farlang.templ.m4.

Возможно ошибка связана с последствиями замены m4 на perl в https://github.com/elfmz/far2l/pull/1770.

2) Редкое пропадание 1-й буквы вывода

Нормальное поведение:

~$ pandoca
Command 'pandoca' not found, did you mean:
  command 'pandoc' from deb pandoc (2.9.2.1-3ubuntu2)
Try: sudo apt install <deb name>

Ненормальное (1-я буква вывода отсутствует):

~$ pandoca
ommand 'pandoca' not found, did you mean:
  command 'pandoc' from deb pandoc (2.9.2.1-3ubuntu2)
Try: sudo apt install <deb name>

Ненормальное возникает редко 1 раз на 10-20 попыток и только сразу после запуска Фара.

akruphi avatar Sep 02 '23 16:09 akruphi

примерно 50 раз запускал с pandoca - ни разу не воспроизвелось у меня (

elfmz avatar Sep 02 '23 20:09 elfmz

Прикольная опечатка в farlang.templ.m4 оказалась. Как Вы её отловили? Грипнули строки не начинающиеся с // или " в FarBel.lng?

akruphi avatar Sep 02 '23 20:09 akruphi

grep '^"' ././FarEng.lng > ./FarEng.lng.xx grep '^"' ././FarBel.lng > ./FarBel.lng.xx потом методом построчного тыка сравнивая .xx файлы нашел место расхождения

elfmz avatar Sep 02 '23 20:09 elfmz

Посмотрел старые версии - эта опечатка там давно уже, как минимум с апреля этого года и никто не напарывался. Может добавить дебаг вывод в парсер языковых файлов *.lng на недопустимые строки?

akruphi avatar Sep 02 '23 20:09 akruphi

Если уж мы коснулись сборочных скриптов. Вот тут человек жалуется что в нынешних скриптах Линукс захардкожен. На bsd мешает https://github.com/elfmz/far2l/commit/c2297eee0e1df1418254e1920b58dbd47eb203c7#r126260287

unxed avatar Sep 02 '23 20:09 unxed

По 2) уточнение баг-репорта: 1-я буква на самом деле не пропадает, а выводится в предыдущей строке (где сама команда) на крайнем правом знакоместе экрана

akruphi avatar Sep 06 '23 06:09 akruphi

а можно скриншот, чтоб точно было понятно что и где?

elfmz avatar Sep 06 '23 07:09 elfmz

а можно скриншот, чтоб точно было понятно что и где?

Я у себя сейчас этого отловить не могу. Вот скриншот от @shmuz , который заморочился для поиска бага раскраской image

akruphi avatar Sep 06 '23 07:09 akruphi

Похоже проблема с первой буквой стабильно воспроизводится только на far2m. Пока закрываю. @shmuz с этим активно разбирается. Подождём результатов.

akruphi avatar Sep 08 '23 06:09 akruphi

По поводу 2) см. в far2m: https://github.com/shmuz/far2m/issues/43

Проявляется в far2l-wx в зависимости от ширины окна far2l и/или font, например, замечен при ширине окна ровно 87 символов.

akruphi avatar Sep 30 '23 09:09 akruphi

@elfmz @akruphi

примерно 50 раз запускал с pandoca - ни разу не воспроизвелось у меня (

Оно воспроизводится легко. Надо сделать ширину фара = 87 символов. Оно воспроизводится в среднем 1 раз из 9, т.к. длина _exit_marker случайна в диапазоне 8..16. Оно всегда воспроизводится, когда последний символ внутренней команды запуска точно на правом краю окна. "Внутренняя команда" - это например § . /tmp/far2m_3e8_0/vtcmd/5976_1;printf '\033_far2l_%s\007' "E9S5Rxz1czcF:$FARVTRESULT"

Перезапускать фар каждый раз не надо. Сделать ширину окна 87, погасить панели, и примерно 1 раз из 9 будет воспроизводиться.

Я нашёл фикс, но не уверен, что он не поломает что-то другое. Хотелось бы услышать мнение автора.

diff --git a/far/src/vt/vtansi.cpp b/far/src/vt/vtansi.cpp
index c04aa1ac..f466b6e9 100644
--- a/far/src/vt/vtansi.cpp
+++ b/far/src/vt/vtansi.cpp
@@ -1061,7 +1061,7 @@ struct VTAnsiContext
 				if (es_argc == 0) es_argv[es_argc++] = 1; // ESC[C == ESC[1C
 				if (es_argc != 1) return;
 				Pos.X = Info.dwCursorPosition.X + es_argv[0];
-				if (Pos.X > (Info.dwSize.X - 1)) Pos.X = (Info.dwSize.X - 1);
+				if (Pos.X >= (Info.dwSize.X - 1)) Pos.X = Info.dwSize.X;
 				Pos.Y = Info.dwCursorPosition.Y;
 				WINPORT(SetConsoleCursorPosition)( con_hnd, Pos );
 				return;

shmuz avatar Dec 06 '24 20:12 shmuz

Переоткрываю, т.к. @shmuz даёт метод воспроизводства бага 2 и предлагает фикс.

akruphi avatar Dec 10 '24 16:12 akruphi