LINUX.ORG.RU

Форк Midnight Commander c поддержкой панельных плагинов

 , , , ,


4

2

https://www.opennet.ru/opennews/art.shtml?num=66018.

Выпущен консольный файловый менеджер Midnight Commander 6.0.3 (mc6), представляющий собой форк GNU Midnight Commander 4.8.33, расширенный поддержкой панельных плагинов и поставляемый со встроенным PTY-терминалом mcterm. Интегрированный в mc6 фреймворк панельных плагинов позволяет отображать в панелях не только файловые системы, но и контейнеры, Git-репозитории, базы данных и объекты удалённых хранилищ. Код проекта написан на языке Си и распространяется под лицензией GPLv3+. Готовые пакеты подготовлены для Debian и Ubuntu, Fedora и RHEL, а также Arch Linux в форматах DEB, RPM и pkg.tar.zst. Для Gentoo дополнительно предоставлен ebuild для установки через локальный overlay.

В состав выпуска вошли плагины для работы с архивами, FTP/SFTP/FTPS, Samba, Git, Docker, Kubernetes, MongoDB и S3-совместимыми хранилищами. Плагины поддерживают стандартные файловые операции, а переработанная поддержка архивов на базе libarchive заметно (в десятки или сотни раз) ускоряет обработку больших архивов.

Во встроенный текстовый редактор mcedit добавлены возможность сворачивания блоков кода, браузер истории Undo/Redo, средства управление макросами и поддержка сохранения файлов через sudo. В разы улучшена производительность при работе с очень длинными строками.

Просмотрщик mcview получил древовидное представление JSON, YAML и XML, интерактивную фильтрацию содержимого, базовую поддержку отображения разметки Markdown и режим воспроизведения файлов с ANSI-последовательностями.

В состав включён встроенный PTY-терминал mcterm с собственным эмулятором терминала, предназначенный для замены традиционного subshell-механизма.

★★★★★

Последнее исправление: dataman (всего исправлений: 1)

переработанная поддержка архивов на базе libarchive

Выглядит пока самым полезным.

dataman ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Могу попозже написать со скриншотами, после того как соберу и потыкаю. :)

dataman ★★★★★
() автор топика

переработанная поддержка архивов на базе libarchive заметно (в десятки или сотни раз) ускоряет обработку больших архивов.

А пароль от архива туда уже можно ввести?..

hobbit ★★★★★
()

Оказывается он конфликтует с mc (пришлось удалить) и много зависимостей. Устанавливать не стал, надеюсь в mcedit когда-нибудь тоже будет сворачивание блока кода.

dmitry237 ★★★★★
()
Последнее исправление: dmitry237 (всего исправлений: 1)

Если из коробки будет нормально работать со всеми архивами и организуют нормальный поиск/фильтр, то будет полезен.

MoldAndLimeHoney ★★★
()

я на far2l давно перешел, там 7zip (наследие видовых времен) библиотеку пользуют, но быстрее чем mc.
а не недавно на коленке на ИИ сгенерировали f4 (github.com)-commander. тож по описаниям очень быстро работает с архивами.

pfg ★★★★★
()
Ответ на: комментарий от mittorn

embedded termina

Интересно, этот встроенный может жить в tty?

dmitry237 ★★★★★
()
Ответ на: комментарий от mittorn

там ещё embedded terminal под панелями

Да, уже потыкал. Он по Ctrl-L ничего не делает.

возможно он лучше тех костылей для работы в фоне, что сейчас там есть

Зато там вот такие:

    {
        const char *shell_name = g_getenv ("SHELL");
        const char *base;


        base = (shell_name != NULL) ? strrchr (shell_name, '/') : NULL;
        base = (base != NULL) ? base + 1 : shell_name;


        if (base != NULL && strcmp (base, "bash") == 0)
        {
            /* Percent-encoder for $PWD: safe chars pass through, everything
             * else becomes %XX.  Defined once and used in PROMPT_COMMAND. */
            static const char osc7_setup[] =
                "__mc_pe(){"
                " local s=$1 o= i c;"
                " for((i=0;i<${#s};i++)); do"
                " c=${s:i:1};"
                " case $c in"
                " [a-zA-Z0-9/_~.-]) o+=$c;;"
                " *) printf -v o '%s%%%02X' \"$o\" \"'$c\";;"
                " esac; done;"
                " printf '%s' \"$o\";"
                " }; \\\n"
                " if test $BASH_VERSINFO -ge 5"
                " && [[ ${PROMPT_COMMAND@a} == *a* ]] 2>/dev/null; then \\\n"
                "  PROMPT_COMMAND+=(\"printf '\\033]7;file://%s\\007'"
                " \\\"\\$(__mc_pe \\\"\\$PWD\\\")\\\"\"); \\\n"
                " else \\\n"
                "  PROMPT_COMMAND=\"${PROMPT_COMMAND:+$PROMPT_COMMAND; }"
                "printf '\\033]7;file://%s\\007'"
                " \\\"\\$(__mc_pe \\\"\\$PWD\\\")\\\"\"; \\\n"
                " fi\r";
            mcterm_enable_osc7 (t, master, osc7_setup, sizeof (osc7_setup) - 1);
        }
        else if (base != NULL && strcmp (base, "zsh") == 0)
        {
            static const char osc7_setup[] =
                " __mc_pe(){local s=$1 o='' c i;for (( i=1; i<=${#s}; i++ )); do c=${s[i]};"
                "case $c in [a-zA-Z0-9/_~.-])o+=$c;;*)printf -v o '%s%%%02X' \"$o\" \"'$c\";"
                ";esac;done;printf %s \"$o\";}; \\\n"
                " __mc_first=1;__mc_osc7_precmd(){if (( __mc_first ));then printf "
                "'\\033[2J\\033[H';"
                "__mc_first=0;fi;printf '\\033]7;file://%s\\007' \"$(__mc_pe \"$PWD\")\";};"
                "precmd_functions+=(__mc_osc7_precmd)\r";


            mcterm_enable_osc7 (t, master, osc7_setup, sizeof (osc7_setup) - 1);
        }
    }
dataman ★★★★★
() автор топика

В состав включён встроенный PTY-терминал mcterm с собственным эмулятором терминала

Делал такой в своём клоне (не форке) mc 10 лет назад, по итогу сомневаюсь что это хорошее решение. Основные причины - не одни так другие проблемы со скроллбаком и с горизонтальным ресайзом гуи-окна где всё это запущено. Собственно, у screen те же проблемы, но screen запускается в особых случаях где можно с этим смириться, а mc предполагается запущеным всегда.

Хотя идея конечно заманчивая была.

firkax ★★★★★
()
Ответ на: комментарий от hobbit

А пароль от архива туда уже можно ввести?..

Да. Но вот deb, например, показывает не как оригинальный MC. Взял сборку helium-bin_0.15.1.1-1_amd64.deb, и этот форк мне показывает такое содержание:

control.tar.xz
data.tar.xz
debian-binary

И при входе в любой из этих xz, они тоже временно распаковываются.

dataman ★★★★★
() автор топика

Во встроенный текстовый редактор mcedit добавлены возможность сворачивания блоков кода, браузер истории Undo/Redo, средства управление макросами и поддержка сохранения файлов через sudo.

Ещё, о чём сам автор почему-то не написал:

  • в редакторе тоже появились плагины:
    • Mail, Spell и Ctags.
    • Spell на выбор поддерживает и aspell и hunspell.
    • плагин Ctags добавляет в меню редактора пункт «Navigate» со всякими командами навигации по исходникам.
  • в просмотрщик добавлена команда фильтрации строк (по F6).

Продолжаю наблюдение. :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от andytux

…поэтому, никаких конфликтов, никаких зависимостей

Пакетный менеджер выдал целый спмсок, начиная с samba. Поэтому я не стал ставить, в [Y/n] нажал n

dmitry237 ★★★★★
()

Сомневаюсь, нужно ли?...

piyavking ★★★★★
()
Ответ на: комментарий от dmitry237

Пакетный менеджер…

…запускать не стал. Чёрт-те знает откуда, «левый» пакет, какой тут пакетный менеджер. Запустил mc, в нём открыл deb, скопировал файлы, запустил mc6.

$ dpkg -l | grep mc
ii  libxdmcp6:amd64                            1:1.1.3-0ubuntu6                         amd64        X11 Display Manager Control Protocol library
ii  libxvmc1:amd64                             2:1.0.12-2build3                         amd64        X11 Video extension library
ii  pcmciautils                                018-14build1                             amd64        PCMCIA utilities for Linux 2.6

Это всё, что система знает о каких-либо ‘mc’.

andytux ★★★★★
()
Ответ на: комментарий от dataman

У меня был план написать про следующий релиз на LOR-е пока вычищаю найденное, готовил сборки всякое разное.

angel_il ★★★★★
()
Ответ на: комментарий от dmitry237

я специально разделил на ядро + data + plugins, вот пакет с плагинами он как раз требует всякое разное т.к. умеет в самбу, докер, k8s, mongodb, архивы

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

Мне интересно, как всё-таки этот форк стал форком. В мейнстримный mc новые фичи внедрить шансов нет?

hobbit ★★★★★
()
Ответ на: комментарий от dataman

в редакторе тоже появились плагины: Mail, Spell и Ctags.

идея была вынести из редактора древний мусор, но не удалить а дать возможность его не грузить, т.к. тот спелчекер который я добавлял 10 лет назад уже сильно устарел, как и etags. поэтому ctags и спелчекер добавлены как плагины, не всем нужна навигация по коду в редакторе.

в просмотрщик добавлена команда фильтрации строк (по F6).

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

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

И ещё вопрос: бага с отображением неюникодных символов в mcedit в mc6 исправлена, или как и было в оригинале?

В mcedit сломались неюникодные кодировки

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

ну, так получилось что накопилось очень много изменений которые часто слишком ломающие

  1. плагины
  2. иной подход к работе с архиваторами, теперь все самое популярное через libarchive (это дало настолько существенное ускорение на которое я вообще не рассчитывал, просто начало летать, это и очевидно потому что ранее мог запрашиваться весь контент а это может гиг и более). Ранее, с кучей архивов, работа шла через VFS (а там работа односторонняя, и если тот же rar запросил пароль, то это смерть mc) я пробовал это решить много лет назад, но там слишком много было переделывать и забросил.
  3. нужно много тестирования, сейчас mc стабилизирован и есть во всех дистрах и платформах.

даже 3-х этих пунктов достаточно чтобы обсуждения о необходимости того или иного изменения могли бы идти месяцами, без гарантии попадания в мастер. А жизнь она не так длинна. Проще сделать форк и если хоть что то будет интересным то ребята затянут в апстрим (но по опыту думаю что нет), по крайней мере есть шанс. Сейчас я не ограничен в плане фич и не боюсь сломать ничего т.к. пользователей очень мало, так что можно фиксануть проблемы и тут же выпустить релиз.

angel_il ★★★★★
()
Ответ на: комментарий от hobbit

ого, я видел обсуждение в тикете что оно не нужно, но не думал что выпилили, это (отображение mc в разных локалях с разными сочетаниями LANG и LC) я начинал свое активное участие в команде году в 2007, и как раз на это потрачено много сил было. Я гляну что там с кодировками/перекодировками

angel_il ★★★★★
()
Ответ на: комментарий от hobbit

с решения этой проблемы и была начата доработка. Да, можно.

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

В обсуждении той темы есть ссылка на багтрекер. Нет, это никто не выпиливал (иначе бы всё меню выбора выпилили), это именно бага.

И кодировки нужны много кому, в Qt 6 вон выпиливали-выпиливали, а потом в 6.4 вернули всё, что поддерживает ICU (старый API, правда, сломали).

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от dataman

Зато там вот такие:

да, выпиливание сабшела это ОООчень объемная работа, которая затянулась уже на несколько месяцев, почти закончил ее, но в 6.0.3 пока есть эти костыли. тут да.

angel_il ★★★★★
()
Ответ на: комментарий от firkax

Основные причины - не одни так другие проблемы со скроллбаком и с горизонтальным ресайзом гуи-окна где всё это запущено.

это то как раз решил, заодно т.к. mcterm это теперь отдельный виджет позволило произвольно помечать и копировать через clipfile отдельные части аутпута.

angel_il ★★★★★
()
Ответ на: комментарий от hobbit

И, возможно, глупый вопрос: mc6 всё ещё можно использовать из-под SSH?

А чо в смысле?! ) я там ничего не ломал, конечно можно.

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

вот фильтрация мне например очень помогает логи смотреть

А нет в планах инкрементального фильтра в панелях?
В https://github.com/MidnightCommander/mc/issues/2697 есть патч, правда для очень старой версии MC.

dataman ★★★★★
() автор топика
Ответ на: комментарий от angel_il

Ничего не понял, что за виджет, что clipfile итд.

Программа вывела 50 строк по 100 символов (разделённые переводом строки), пока пользователь находился в панелях и её вывод не видел. Окно иксового терминала - 80х25. Пользователь жмёт ctrl-o, что и как ему покажется? Затем пользователь растягивает окно до 110x40, что ему покажется теперь и как? Что будет если он до или после растягивания подвигает скролл иксового терминала вверх - увидит ли там то что следует или нет?

firkax ★★★★★
()

Лучше бы они переработали механизм копирования на сетевые фс. А то до сих пор оно сначала копирует всё в /tmp, а оттуда уже на удалённый хост. Это, собственно, единственная моя претензия к mc.

shell-script ★★★★★
()
Ответ на: комментарий от yars068

Сколько времени прошло

8.22:58:49

$ paru -Si mc6-git | grep -P '(First|Last)'
First Submitted : Thu, 13 Aug 2026 13:18:47
Last Modified   : Thu, 13 Aug 2026 13:18:47
dmitry237 ★★★★★
()
Ответ на: комментарий от firkax

clipfile это очень древний механизм, можно содержимое помеченное в редакторе туда сохранять, он нужен чтобы на удаленных машинах где нет X клипборда копировать нужные куски. Есть экшены которые позволяет с ним работать, можно настроить дополнительно пайплан чтобы отправлять куда-то.

angel_il ★★★★★
()
Ответ на: комментарий от shell-script

Лучше бы они переработали механизм копирования на сетевые фс. А то до сих пор оно сначала копирует всё в /tmp, а оттуда уже на удалённый хост. Это, собственно, единственная моя претензия к mc.

для этого я и сделал несколько плагинов, можете попробовать samba/sftp/ftps/ssh-link

angel_il ★★★★★
()
Ответ на: комментарий от angel_il

для этого я и сделал несколько плагинов

Т.е. надо ставить плагины, чтобы скопировать файл или каталог на другой ноут?

dmitry237 ★★★★★
()
Ответ на: комментарий от angel_il

Ну, я не знаю как клипборд вообще связан с тем о чём я писал. Я писал о консистентном виде вывода запущеной внутри проги, в том числе после пачки ресайзов окна в разные стороны.

firkax ★★★★★
()
Ответ на: комментарий от firkax

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

angel_il ★★★★★
()
Ответ на: комментарий от yars068

wl-copy/wl-paste вполне работают, можно организовать обмен данными с GUI=приложениями.

Ненужный костыль для современных ЭТ, поддерживающих OSC 52. :)

dataman ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.