-
Notifications
You must be signed in to change notification settings - Fork 1
Для тех, кто коммитит
-
https://github.com/elfmz/far2l/issues/802#issuecomment-711093913
Вот зачем фигак фигак и в продакшен, этож не энтерпрайз, тут можно по-человечески.
-
https://github.com/elfmz/far2l/issues/802#issuecomment-1726311209
far2l - это проектик для души, а не для гонки. Который хочется чтоб работал стабильно и был удобен, а постоянное внедрение новых фич - это второстепенная задача. Такой вот дауншифт от тенденций софтостроения)
-
https://github.com/elfmz/far2l/issues/2230#issuecomment-2230572396
самая большая разница между программирвоанием под винду и под юникс вовсе не в том что в винде CreateFile(), а в юниксе open(), а в том, что под виндой у тебя уютный компилятор любимой версии и унифицированное окружение, а юниксы - зоопарк окружений, причем твой проект собирают вооще другие люди с большинством из которых ты ваще никак не знаком, под железо которое ты никогда не брал в свои руки...
-
Wiki от elfmz: https://github.com/elfmz/far2l/wiki
-
far 2 encyclopedia (от виндовой версии, но много полезного, например, там про макро язык, разметку языка помощи и т.п.):
- CHM: https://github.com/elfmz/far2l/issues/1135
- Оригинальный CHM лежит внутри MSI-пакетов far2.x86.msi/far2.x64.msi, которые можно скачать из https://farmanager.com/history.php (две самые последние ссылки)
- Online (раздел по макросам по far3, часть информации не совместима с far2l): https://api.farmanager.com/ru/macro/
- области действия макросов: https://api.farmanager.com/ru/macro/about/macroarea.html
- Online (раздел по языку разметки помощи): https://api.farmanager.com/ru/language/
Note: смотреть CHM в Linux, например, через xCHM (наиболее корректно) или через Okular — просмотр CHM как подряд идущих страниц, но возможны сбои рендеринга текста ссылок и области щелчка по ним.
-
Описание различий/дополнительных возможностей far2l API: https://github.com/elfmz/far2l/blob/master/HACKING.md
-
О форматировании кода
- https://github.com/elfmz/far2l/blob/master/CODESTYLE.md
-
https://github.com/elfmz/far2l/pull/1864#issuecomment-1738077196
В новом коде (новые функции) переменные - snake_case, функции - CamelCase. Если изменение в старом коде - то лучше подстраиваться под то что есть. Старый код надо будет когда нибудь в светлом будущем автоматически переформатировать (clang-tidy как я понимаю это умеет). Но тут с отступами была целая эпопея, включавшая в себя кастомный clang-format, так что передеделывать имена переменных чета вообще боязно) Но придется..
-
Про исторически сложившиеся разные строковые типы (
FARString
,std::wstring
,TCHAR
,...) и их использование: https://github.com/elfmz/far2l/issues/802#issuecomment-1694758391 -
String encoding functions in far2l code: https://github.com/elfmz/far2l/discussions/1063
-
включение вывода логгирования и выбор куда: https://github.com/elfmz/far2l/wiki/Running-far2l-with-debug-logging-enabled
-
в терминале
export FAR2L_STD=/path/to/log
для лога в файл илиexport FAR2L_STD=-
для лога в stdout терминала, также по необходимостиexport NETROCKS_VERBOSE=9
и/илиexport COLORER_VERBOSE=debug
и затем в этом же терминале запустить far2l-
export FAR2L_STD=
перенаправление сразу иstdout
иstderr
(см.SetupStdHandles()
в /WinPort/src/Backend/WinPortMain.cpp) -
export FAR2L_STDOUT=
перенаправление отдельноstdout
-
export FAR2L_STDERR=
перенаправление отдельноstderr
- внутри far2l обычно отладочный вывод в
stderr
-
-
отладочный вывод Colorer: https://github.com/elfmz/far2l/pull/2385 (начиная с сентября 2024)
export FAR2L_STDERR=somefile.log export COLORER_VERBOSE=debug # colorer verbose levels: off (default), error, warn or warning, info, debug far2l
-
В частности для far2l-GUI я делаю так [нажмите, чтобы развернуть/скрыть]
- внутри терминала включаю логгирование прямо в этот терминал (а не во внешний файл):
export FAR2L_STD=- export NETROCKS_VERBOSE=9 export COLORER_VERBOSE=debug
- в этом же терминале запускаю far2l-GUI
far2l
- пока открыт far2l в терминал валятся разные строки информации - удобно, чтобы сразу видеть на какое из действий какие строки лога.
- внутри терминала включаю логгирование прямо в этот терминал (а не во внешний файл):
-
-
отладочная печать в коде:
fprintf(stderr, "муа-ха-ха %i", 42);
и т.п.-
шпаргалка по выводу в консоль всего зоопарка строковых типов far2l (спасибо unxed: https://github.com/elfmz/far2l/issues/801 )
// null-terminated strings (c-strings) made of chars // (examples below should also work with LPSTR/LPCSTR/CHAR) char *sample; fprintf(stderr, "%s\n", sample); char sample[fixed_length_in_bytes_plus_one_for_terminating_zero]; fprintf(stderr, "%s\n", sample); // null-terminated strings (c-strings) made of wide chars // (examples below should also work with LPWSTR/LPCWSTR/LPTSTR/LPCTSTR/WCHAR/TCHAR) wchar_t *sample; fprintf(stderr, "%ls\n", sample); wchar_t sample[fixed_length_in_wide_chars_plus_one_for_terminating_zero]; fprintf(stderr, "%ls\n", sample); // standard C++ classes for strings // for accessing class methods via pointer to object of that class replace "." with "->" std::string sample; fprintf(stderr, "%s\n", sample.c_str()); std::wstring sample; fprintf(stderr, "%ls\n", sample.c_str()); // Far internal string class FARString sample; fprintf(stderr, "%s\n", sample.GetMB().c_str()); fprintf(stderr, "%ls\n", sample.CPtr()); UnicodeString sample; fprintf(stderr, "%s\n", sample.GetMB().c_str()); // string classes used in Colorer // (examples below should also work with CString and DString classes) String sample; fprintf(stderr, "%ls\n", sample.getWChars()); SString sample; fprintf(stderr, "%ls\n", sample.getWChars()); // wxString wxString sample; fprintf(stderr, "%s\n", sample.ToStdString().c_str()); //or fprintf(stderr, "%s\n", sample.mb_str().data()); //or fprintf(stderr, "%ls\n", static_cast<const wchar_t*>(sample.wc_str()));
Про wxString: https://docs.wxwidgets.org/3.0/classwx_string.html#string_vararg
-
-
https://github.com/elfmz/far2l/issues/856#issuecomment-742854104
- запустите графический вариант под дебаггером:
gdb far2l
и далееrun
- дождитесь падения
bt
- напишите результат сюда
- запустите графический вариант под дебаггером:
-
https://github.com/elfmz/far2l/issues/557#issuecomment-506029522
gdb far2l
- type
run
in gdb console -> far2l will be launched - repro issue
- return back to gdb console, hit ctrl+c then type
thread apply all bt
and send what will be printed out there
-
другие подробности по работе с gdb [нажмите, чтобы развернуть/скрыть]
-
https://github.com/elfmz/far2l/issues/1003#issuecomment-869060945
откройте терминал, в нем запустите
gdb far2l
, когда откроется far2l - воспроизведите зависон, когда зависнет - перейдите в терминал с gdb, ткните там Ctrl+C, потом в появившейся ком строке дебаггера напишитеthread apply all bt
, после чего - полную распечатку результата выложите здесь -
https://github.com/elfmz/far2l/issues/1257#issuecomment-1044606817
запустите far2l под gdb - в терминале напишите:
gdb far2l
после того как gdb раздуплится - напишите в его консоли командуrun
... в консоли gdb нажмите Ctrl+C и после того как там появится ком строка - напишите в нееthread apply all bt
и результат расшарьте если не жалко -
https://github.com/elfmz/far2l/issues/1248#issuecomment-1039176746
запустить far2l под gdb написать в gdb
run
, спровоцировать крэш, и когда в gdb появится чтото типа поймали SIGSEGV за хвост - то надо там (в gdb) написать командуbt
-
https://github.com/elfmz/far2l/issues/567#issuecomment-510202714
please run far2l under gdb by executing in terminal:
gdb far2l
then type in gdb console:
run
After that reproduce issue in opened far2l window, and once far2l hang, switch back to terminal with gdb, then hit Ctrl+C there and type following command:
thread apply all bt
..and report its output
-
-
Оригинальная инструкция про языковые файлы и файлы помощи см в far 2 encyclopedia или в https://api.farmanager.com/ru/language/
-
Языковые строки задаются в файле far2l/bootstrap/scripts/farlang.templ.m4
-
На текущий момент far2l требует внесения 9 языков: 0-Russian (Русский), 1-English, ... 8-Belarusian (Беларуская) (число языков и порядок задаётся в самом начале файла
farlang.templ.m4
):#number of languages 9 #id:0 language file name, language name, language description FarRus.lng Russian "Russian (Русский)" #id:1 language file name, language name, language description FarEng.lng English "English" #id:2 language file name, language name, language description FarCze.lng Czech "Czech (Čeština)" #id:3 language file name, language name, language description FarGer.lng German "German (Deutsch)" #id:4 language file name, language name, language description FarHun.lng Hungarian "Hungarian (Magyar)" #id:5 language file name, language name, language description FarPol.lng Polish "Polish (Polski)" #id:6 language file name, language name, language description FarSpa.lng Spanish "Spanish (Español)" #id:7 language file name, language name, language description FarUkr.lng Ukrainian "Ukrainian (Український)" #id:8 language file name, language name, language description FarBel.lng Belarusian "Belarusian (Беларуская)"
-
В языковом файле формат для каждого сообщения
Name "Текст_на_языке_0" "Текст_на_языке_1' upd:"Заглушка текста_на_языке_2" ... "Текст_на_языке_8"
-
по имени обращение к ним из кода внутри far2l как
Msg::Name
(Name
- имя сообщения в точности такое же как в языковом файле); -
все строки в
farlang.templ.m4
в двойных кавычках (при использовании кавычек в сообщениях не обязательно ставить обратный слеш и дублировать кавычки; Far Manager, обрабатывая каждую строку из языкового файла, смотрит только на начальную и заключительную кавычки); -
необходимо добавлять сразу все 9 строк для всех языков (иначе при переключении интерфейса far2l на язык с отсутствующей строкой будет crash и потребуется поиск в какой из констант строки не хатает)!
-
если для какого-то языка перевод не сделан или нет уверенности, что корректен, то помечать префиксом
upd:"
(для будующих поколений разработчиков) - я обычно сую везде где не знаю английский (строку с нулевыйм языком=Русским помечатьupd:
нельзя); -
последней строковой константой всегда должна идти
NewFileName
, поэтому я добавляю в любое место близко к уже логически похожим строкам (те, что про диалоги настроек - около с диалогами; те, что про в сообщениях редактора - около редактора и т.п.); -
длина строки - не более 1000 символов;
-
строку нельзя разбивать на подстроки;
-
допускается применение следующих управляющих символов: '\n', '\r', '\', '\b', '\t'.
-
-
Исходные файлы помощи лежат в far2l/bootstrap/scripts/*.hlf.m4
-
Иногда после изменении исходных файлов локализаций и справки far2l/bootstrap/scripts/*.m4 не перегенерируется соответствующие *.lng или *.hlf, поэтому перед пересборкой на всякий случай в каталогах сборки
_build/far2l/bootstrap
и_build/install
не забываем удалить farlang.templ и все *.lng или *.hlf.