- PVSM.RU - https://www.pvsm.ru -

far2l в Ubuntu 23.10

Ура! В новой версии Ubuntu [1], наконец-то, можно установить Far Manager (far2l [2]) самым обычным sudo apt install far2l — прямо из коробки, без всяких ppa и кастомных сборок! Под катом — немного подробностей, а также обычный дайджест новостей проекта за прошедшее время.

far2l в Ubuntu 23.10 - 1

Клавиатурный ввод в продвинутых терминалах

Одной из главных проблем, мешавших портированию Far Manager на Linux, Mac и BSD, была ограниченная поддержка клавиатуры в классических POSIX терминалах. Например, сочетания Ctrl+цифры, активно используемые в Far для переключения режимов отображения списка файлов, в большинстве терминалов генерируют спецсимволы, по которым однозначно определить нажатые клавиши невозможно.

Первым решением, которое применялось в far2l, было создание графического бекенда отрисовки — Far работал через иксы, где, понятное дело, есть доступ к подробной информации о нажатых клавишах. Проблема в том, что этот бекенд тащил за собой целый графический рабочий стол — не очень удобно на серверах.

Вторым решением было создание консольной версии, способной взаимодействовать с иксами только для работы с буфером обмена и прослушивания клавиатурного ввода, всё остальное работает через консоль. Именно такая версия вошла в Ubuntu и Debian.

Однако у такого подхода тоже есть недостатки. Если far2l работает на удаленном сервере, для подержки всех сочетаний клавиш может потребоваться соединение с включенным X Forwarding, что доступно не на всех серверах. Также задержки в ssh могут приводить к нечёткой работе определения клавиатурных модификаторов (Ctrl, Alt, Shift, etc) через иксы.

К счастью, в некоторых терминалах реализованы свои, нестандартные расширения, позволяющие получать подробную информацию о клавиатурных событиях. Мне известны четыре таких протокола, подходящих для реализации всего нужного Far'у функционала:

  1. Собственный протокол far2l terminal extensions [3]

  2. win32-input-mode [4] (в процессе реализации [5] протокола мы даже нашли баг [6] в Windows Terminal, где этот протокол впервые появился)

  3. Протокол [7] kovidgoyal's kitty (также поддерживается в WezTerm [8], однако там пока баг [9])

  4. Протокол [10] iTerm2

В настоящее время far2l понимает их все (а встроенный терминал самого far2l — первые два). Следовательно, в любом из перечисленных терминалов все кнопки клавиатуры будут работать в любом случае, есть у вас иксы и переадресация их протокола, или нет.

Полный список терминалов, где UX [11] far2l будет наилучшим:

Mac: iTerm2 [12], kovidgoyal's kitty [13]

Linux/BSD: kovidgoyal's kitty [13]

Windows: Windows Terminal [14] свежей версии, putty4far2l [15], cyd01's KiTTY [16], putty-nd [17]

Не забудьте включить [18] OSC52 в настройках far2l: в некоторых терминалах без этого не работает буфер обмена.

wiki с полезностями

Встроенная справка не всегда обновляется достаточно быстро, а новых возможностей — много. Чтобы собирать где-то оперативную информацию о них, и выкладывать ответы на самые частые вопросы, мы сделали wiki проекта far2l [19], заходите!

Например, знали ли вы, что в far2l есть копирование в фоновом режиме? Ищите в разделе «полезности [20]»!

Улучшения справки

Впрочем, встроенный help тоже улучшен во многих местах, вот только часть предложенных исправлений: раз [21], два [22], три [23], четыре [24]! А самые главные особенности far2l, которые лучше бы сразу рассказывать новичку, теперь в справке на видном месте [25]!

Более умная система сборки

Мы внесли несколько важных изменений в сборочную систему. Во-первых, теперь весь проект не пересобирается из-за каждого коммита (была ошибка в логике включения хэша коммита в код). Во-вторых, сборка поддержки макросов теперь опциональна: можно сэкономить 300 Кб, собирая версию для роутеров и другого embedded оборудования. А ещё мы вырезали из обязательных зависимостей spdlog [26] (а также pcre [27]), и теперь можем собираться без зависимостей вообще (часть плагинов, правда, без зависимостей не соберётся).

Редактор симлинков

В far2l добавлена возможность редактирования символических ссылок [28] — опция, которой не было у нашего предка, Far 2.

TrueСolor в подсветке типов файлов

Сам Far 2 всегда был 16-цветным, однако «фреймворк» продвинутых консольных приложений, на котором он работает в *nix, с недавнего времени поддерживает полноцветную палитру, которая понемногу внедряется и в сам Far тоже. Например, недавно стало возможным использовать для «раскраски» файлов на панелях не только стандартные 16 цветов терминала, но и любой TrueColor цвет [29]!

Версия для телефонов

А для желающих пользоваться far2l в дороге у нас появилась сборка для Termux — одного из решений, позволяющих получить полноценнию Linux систему в телефоне на Андроиде. Сборки [30], скрины [31].

Приятные мелочи

Мы отформатировали [32] все исходники (раньше строки вылезали за край экрана, были и другие проблемы), в процессе пришлось даже немного допилить clang-format под наши нужды. Добавили [33] правила оформления нового кода. Поотлавливали [34] часть ошибок, найденных PVS Studio [35]. Починили [36] автодополнение в редакторе. Сделали [37] так, чтобы пользователь и группа в редактировании свойств файлов выбирались из списков, а не вводились вручную. Улучшили [38] окно истории команд. Добавили [39] UTF8 в список кодировок, переключающихся по F8. И сделали [40] возможность задавать консольные команды для операций с буфером обмена, что поможет, к примеру, на системах с Wayland, где у некоторых пользователей бывали проблемы.

Добавляйтесь в Telegram-чат [41] русскоязычного сообщества far2l! У нас здорово, и мы с удовольствием ответим на любые вопросы!

Предыдущая статья [42] цикла.

Автор: Иван Сорокин

Источник [43]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/387595

Ссылки в тексте:

[1] новой версии Ubuntu: https://habr.com/ru/companies/ru_mts/articles/767826/

[2] far2l: https://github.com/elfmz/far2l

[3] far2l terminal extensions: https://github.com/elfmz/far2l/blob/master/WinPort/FarTTY.h

[4] win32-input-mode: https://github.com/microsoft/terminal/pull/6309

[5] реализации: https://github.com/elfmz/far2l/pull/1581

[6] нашли баг: https://github.com/microsoft/terminal/issues/15083

[7] Протокол: https://sw.kovidgoyal.net/kitty/keyboard-protocol/

[8] WezTerm: https://wezfurlong.org/wezterm/

[9] баг: https://github.com/wez/wezterm/issues/4459

[10] Протокол: https://gitlab.com/gnachman/iterm2/-/issues/7440#note_129307021

[11] UX: https://ru.wikipedia.org/wiki/%D0%9E%D0%BF%D1%8B%D1%82_%D0%B2%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F

[12] iTerm2: https://iterm2.com/

[13] kitty: https://sw.kovidgoyal.net/kitty/binary/

[14] Windows Terminal: https://github.com/microsoft/terminal

[15] putty4far2l: https://github.com/ivanshatsky/putty4far2l

[16] KiTTY: https://github.com/cyd01/KiTTY

[17] putty-nd: https://sourceforge.net/projects/putty-nd/

[18] включить: https://github.com/elfmz/far2l/issues/1416#issuecomment-1768963465

[19] wiki проекта far2l: https://github.com/akruphi/far2l/wiki

[20] полезности: https://github.com/akruphi/far2l/wiki#%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D0%B8

[21] раз: https://github.com/elfmz/far2l/commit/9ca7db36380e4743221ad1ed1ccf0d8518661686

[22] два: https://github.com/elfmz/far2l/commit/5d552d32df8d9cd2802c1b6e92f139634a0e65d9

[23] три: https://github.com/elfmz/far2l/commit/721d63f8071cb2022e30244a5034231d757375a7

[24] четыре: https://github.com/elfmz/far2l/commit/b8208261e253e22b18eab2b44fb7992c9cf18b79

[25] на видном месте: https://github.com/elfmz/far2l/commit/c882ae8d7f24190a322d00a3b1c6ca161258f562

[26] вырезали из обязательных зависимостей spdlog: https://github.com/elfmz/far2l/commit/d6821bf39d3cc80fa67838574595a263adc25851

[27] pcre: https://github.com/elfmz/far2l/commit/e20d42f18e6f108f3e06921b75e2c3422d201f90

[28] редактирования символических ссылок: https://github.com/elfmz/far2l/issues/1690

[29] любой TrueColor цвет: https://github.com/elfmz/far2l/commit/73ec3ce2d34062bc8dbc6e0bdb375caae00e92d9

[30] Сборки: https://forum.farmanager.com/viewtopic.php?p=175732#p175732

[31] скрины: https://forum.farmanager.com/viewtopic.php?p=175738#p175738

[32] отформатировали: https://github.com/elfmz/far2l/pull/1556

[33] Добавили: https://github.com/elfmz/far2l/blob/master/CODESTYLE.md

[34] Поотлавливали: https://github.com/elfmz/far2l/commit/f0e3340f2a41abe12770e385bc58a510972b456e

[35] PVS Studio: https://habr.com/ru/companies/pvs-studio/articles/

[36] Починили: https://github.com/elfmz/far2l/commit/14e32e6265ad7c975f025582603bf0c9909114aa

[37] Сделали: https://github.com/elfmz/far2l/commit/c0bdc90ee154c789cad987ed8bc853a2cde8663e

[38] Улучшили: https://github.com/elfmz/far2l/issues/1618

[39] Добавили: https://github.com/elfmz/far2l/pull/1700

[40] сделали: https://github.com/elfmz/far2l/commit/f87b91e3d8326ce4970de9b8238c69c6d8d2850b

[41] Telegram-чат: https://t.me/far2l_ru

[42] Предыдущая статья: https://habr.com/ru/articles/724118/

[43] Источник: https://habr.com/ru/articles/768328/?utm_source=habrahabr&utm_medium=rss&utm_campaign=768328