Состоялся выпуск 6.0.4 mc6 (github.com) — форка Midnight Commander, развиваемого @angel_il.
Версия 6.0.4 основана на GNU Midnight Commander 4.8.33.
Форк развивается по пяти направлениям:
- Расширяемые панельные плагины и API, позволяющий им передавать данные друг другу.
- Скрипты на Lua, где сам язык — плагин, а не часть ядра.
- Просмотрщик структурированных данных, двоичных форматов, журналов и терминальных записей.
- Редактор: плагины, рисование, сворачивание, фильтрация, история.
- Встроенный терминал вместо subshell.
Основные изменения
- Поддержка Lua реализована как плагин, использующий ABI ядра mc, без встраивания Lua непосредственно в ядро. Это позволяет расширять редактор, панели, просмотрщик и интерфейс с помощью скриптов, не добавляя каждую новую функцию напрямую в ядро.
- Старый subshell заменён на mcterm. Он использует настоящий prompt оболочки и предоставляет единую командную строку, scrollback, выделение и копирование текста, фильтрацию строк, корректную обработку изменения размера терминала и поддержку sixel.
- mcstruct — просмотрщик структур файлов с возможностью редактирования. Форматы файлов описываются с помощью определений STL5, что позволяет просматривать и редактировать бинарные данные как структурированные поля, а не только как сырые байты.
- API панельных плагинов теперь поддерживает потоки с произвольным доступом («seekable streams») между плагинами и маршрутизацию через
magic.ini. Это позволяет открывать удалённые архивы и другие поддерживаемые форматы напрямую из другого плагина без предварительного скачивания всего файла.
mcedit
- Фильтрация строк из диалога поиска и по тексту под курсором. В диалоге F7 появилась команда
Filter, скрывающая строки, не соответствующие текущим параметрам поиска: типу поиска, регистру, поиску целого слова и кодировке, при этом исходные номера строк сохраняются. Alt-S удаляет или восстанавливает последний фильтр; Alt+Shift+S применяет фильтр, используя однострочное выделение или слово под курсором в качестве шаблона. Фильтрацию можно отменить; она корректно работает с нулевыми байтами (NUL) и интегрирована со сворачиванием блоков, перемещением курсора и обработкой мыши. - Поиск начинается с выделенного текста. При открытии F7 строка поиска предварительно заполняется текущим выделением, но остаётся доступной для редактирования до начала поиска.
mcview
- Динамические обработчики файлов (runtime) и просмотр изображений через Chafa. Lua-обработчик может перехватить открытие файла в
ViewerилиQuick Viewи показать вместо его исходного содержимого сгенерированное представление. Обработчикlua-сhafaиспользует этот механизм для просмотра изображений; F8 переключает между изображением и исходными данными файла. Анимированные изображения ограничиваются одним кадром, имена файлов с кавычками и пробелами передаются безопасно, а перед изображением отображается краткое описание. Клавиша i открывает полные свойства, а F1 — справку конкретного обработчика. - Sixel-изображения в просмотрщике и
mcterm. Эмулятор терминала сохраняет sixel DCS-данные как изображения, привязанные к строкам экрана, перемещает или удаляет их вместе с этими строками и отрисовывает после обновления экранного бэкенда. Проверка возможностей терминала и размеров ячейки, ответыPTYи управление черезMC_SIXEL=0/1позволяют использовать один и тот же механизм как в терминальном режиме просмотрщика, так и во встроенных программах. Обработчикlua-sixelиспользуетChafaдля вывода изображения в доступную пиксельную область и показывает свойства изображения, еслиChafaили sixel недоступны. - Генерируемые представления ELF и Java-классов. Lua-обработчики запускают
readelfдля заголовков ELF, секций, сегментов и динамических данных, аProcyon— для Java-классов, без shell interpolation. Оба обработчика сообщают о ходе работы и ошибках, работают вQuick Viewтам, где это применимо, и позволяют по F8 циклически переключаться между генерируемым и сырым представлением. MIME-определение ELF теперь следует по символическим ссылкам. - Просмотровщик DBF на Lua. Открывает DBF-файлы в виде таблицы с постраничным просмотром. Поддерживаются выбор кодировки, просмотр структуры и карточки записи, а F8 переключает на сырые данные. Большие файлы открываются сразу благодаря постраничному декодированию.
mcterm
- mcterm заменяет устаревший subshell. Команды теперь передаются оболочке, уже запущенной во встроенном терминале, а виджет командной строки отображает настоящий prompt, цвета и курсор этой оболочки вместо поддержки отдельного параллельного subshell. Метки
OSC 133иOSC 7с токеном сессии отслеживают состояние prompt, выполнения команды, завершения и текущего каталога. Запуск mc из его собственного терминала восстанавливает родительские панели посредством сигналаSIGUSR1, а не запускает ещё один вложенный экземпляр. - Редактирование и автодополнение командной строки средствами shell. При отображении prompt вводом как в панелях, так и в полноэкранном терминальном режиме управляет редактор строки самой оболочки, при этом mc сохраняет обработку Enter,
cdиexitтам, где это необходимо. Перемещение курсора и переходы по словам следуют раскладке клавиш командной строки, незавершённый ввод сохраняется при отправке команд из mc, а список автодополнения после каждого редактирования пересчитывается и сужается, не заменяя введённый текст более длинным общим префиксом. - Ограниченный scrollback и навигация. Строки, покидающие экран, сохраняются с ограничениями как по количеству строк, так и по количеству ячеек. PgUp/PgDn, Shift-стрелки, Home/End и колесо мыши позволяют перемещаться по истории, при этом новый вывод не возвращает просмотр автоматически вниз. Ввод текста возвращает к текущему выводу, а программы, использующие альтернативный экран, сохраняют обработку собственных клавиш.
- Выделение, копирование и фокус. Вывод можно выделять мышью или с помощью клавиатуры при нажатой клавише Shift и копировать через Ctrl-Insert в
clipfilemc и системный буфер обмена. Выделения используют стабильные идентификаторы строк терминала, поэтому новый вывод и прокрутка их не смещают. Видимый терминальный курсор, отдельная раскладка клавиш[mcterm]и секция темы позволяют переключать фокус между терминалом и командной строкой. Двойной щелчок выделяет слово, тройной — строку, а Enter копирует существующее выделение. - Фильтр строк терминала. Alt+Shift+S оставляет только строки, содержащие выделенный текст или слово под курсором. Снимок остаётся стабильным, пока shell продолжает вывод, навигация и координаты мыши работают по отфильтрованным строкам, а Alt-S переключает фильтр. При вводе команды фильтр удаляется до вывода новых данных.
- Две операции очистки. Ctrl-L перемещает видимое содержимое экрана в историю, оставляя активный prompt внизу, поэтому предыдущий вывод остаётся доступен одним движением колеса. Ctrl+Alt+L или Ctrl+Shift+L (в терминалах, поддерживающих различие этих комбинаций) очищает и экран, и scrollback, не нарушая идентификаторы строк, используемые выделениями и фильтрами.
- Автоперенос и переразметка при изменении размера.
vtermреализует xterm-совместимый отложенный автоматический перенос строки иDECAWM. Информация о перенесённых строках сохраняется при их переходе в историю, а при изменении ширины терминала строки объединяются и заново разбиваются под новую ширину («reflow»), при этом курсор остаётся на своём символе, а sixel-изображения — на соответствующих строках. - Текущая команда в prompt. В Linux активный prompt отображает имя команды, выполняемой на переднем плане, включая специальную обработку интерпретаторов и скриптов и резервный вариант для команд, запущенных самим mc, вместо общего значения background.
- Панель функциональных клавиш терминала и документация. Полноэкранный mcterm получил собственную панель функциональных клавиш, а руководство теперь описывает scrollback и указывает, какие клавиши обрабатываются mc, а какие — программой внутри терминала.
mcstruct
- Просмотрщик структур файлов. mcstruct показывает бинарный файл как дерево структуры на основе STL5-описания формата и позволяет редактировать отдельные поля. Поддерживаются определения Struct Look 4.00, массивы, выражения, разные порядки байтов и поиск по структуре. В комплект входит большая библиотека описаний форматов.
Панели
- Quick Filter. Alt+Shift+S скрывает элементы панели, не соответствующие шаблону, прямо во время его ввода.
Quick SearchиQuick Filterиспользуют общий шаблон и могут переключаться друг в друга без повторного ввода. Фильтрация сохраняется при навигации, маркировке, прокрутке мышью и смене режима отображения, сообщает о помеченных элементах, скрытых фильтром, и немедленно снимается по Ctrl-G. - Встроенная функция быстрой смены каталога (
Quick cd). Alt-C заменяет мини-статус активной панели однострочным полем ввода вместо открытия отдельного диалога. Tab и Shift-Tab предлагают только каталоги в списке автодополнения над полем ввода, Up и Down перемещаются по истории, для простых имён используется переменнаяCDPATH, а клавиша Esc восстанавливает отображение мини-статуса. - Отдельные цвета для битов прав доступа. Новая настройка
permission_colorsпозволяет независимо задавать цвета дляread,write,execute,specialи отсутствующих битов, при этом тип файла сохраняет цвет строки. Это работает вместе с существующей подсветкой применимой тройки прав и не переопределяет цвета курсора или помеченной строки. Пять необязательных ключей темы обеспечивают совместимые значения по умолчанию для существующих тем. - Более информативные результаты
Find. Найденные файлы показывают время изменения, размер и права доступа с использованием форматтеров панели; на узких терминалах второстепенные столбцы убираются. Совпадения внутри файлов группируются по файлу; интерактивный элемент [+] раскрывает номера строк и соответствующий текст, после чего Enter, F3 и F4 работают с выбранным совпадением. - Drive menu в меню Panel. Существующие команды меню дисков для левой и правой панели теперь доступны непосредственно из меню вместе с настроенными для них сочетаниями клавиш.
Ядро
- Отдельные пользовательские каталоги mc6. Конфигурация, данные и кеш перенесены в
~/.config/mc6,~/.local/share/mc6и~/.cache/mc6. При первом запуске каждый старый каталогmcкопируется, если соответствующий новый каталог отсутствует; исходный каталог намеренно остаётся без изменений.
Плагины
Lua / runtime
- Платформа расширений Lua. Версионированный типизированный host ABI предоставляет доступ к документам и транзакциям редактора, провайдерам панелей и файловым операциям, источникам просмотрщика, нативному UI, процессам, событиям, автодополнению и истории. Скриптами можно управлять через
Options, аннотации API используются для генерации справочников Markdown и JSON, а примеры для редактора показывают типовые преобразования без добавления специализированного кода в ядро. - Полноэкранный нативный UI для скриптов.
mc.ui.screenпозволяет Lua-скрипту формировать строку состояния, панель функциональных клавиш и табличную компоновку (grid) из нативных таблиц, текста, меток, полей ввода, флажков и разделителей. Таблицы загружают и кешируют строки постранично и поддерживают заголовки, прокрутку, динамическую ширину и цвета отдельных ячеек. Скрипты получают события клавиш, действий, строк, переключателей, изменения размера и закрытия и могут обновлять уже работающий экран. Пользовательские runtime-плагины ищутся раньше системных. - API плагинов / инфраструктура
-
- Потоки с произвольным доступом между панельными плагинами. Исходный плагин может передать другому плагину принадлежащий ему поток байтов с операциями
open/read/seek/close, который остаётся действительным даже после замены исходной панели. Вmagic.iniдобавлена маршрутизация%plugin{name:operation}дляOpenиView,mc.ext.iniостаётся резервным механизмом, а SFTP предоставляет потоки на основе клонированных сессий. Это позволяет удалённо открывать архивы и другие форматы, требующие произвольного доступа, без полного предварительного скачивания.
- Потоки с произвольным доступом между панельными плагинами. Исходный плагин может передать другому плагину принадлежащий ему поток байтов с операциями
-
- Создание через Shift-F4 в корне плагина. Плагины панельного типа могут использовать Shift-F4 для собственного действия создания соединения, контекста или репозитория.
sqlite
- SQLite-браузер только для чтения. Базы данных открываются как иерархия панелей с таблицами и представлениями, страницами максимум по 200 строк и отдельными строками. Элементы схемы доступны на каждом уровне, значения безопасно отображаются как JSON, BLOB используют ограниченное hex-представление, сканирование можно прервать, а
PRAGMA data_versionпозволяет избегать ненужной перезагрузки.OpenиViewвыбираются черезmagic.ini, а не через имя плагина, жёстко заданное в ядре.
arcmc
- 7z-архивы с паролем. Для создания зашифрованных 7z используется внешняя программа 7z с шифрованием заголовков; пароль передаётся вспомогательной программе (
helper)u7zнеинтерактивно. Диалоги проверяют, какие форматы поддерживают шифрование, и требуют пароль при его включении. Для каждого встроенного формата можно независимо выбратьbuiltin,both,externилиoffдля упаковки и распаковки, а внешний резервный механизм используется там, где возможностей libarchive недостаточно. - Внешние форматы, определяемые во время выполнения. В
arcmc.iniможно задавать расширения, программы, аргументы иextfs helper’ы без перекомпиляции, сохраняя при этом встроенные значения по умолчанию, включая поддержку Inno Setup черезinnoextract. Внешние helper’ы работают поверх потоков плагинов, а magic-действияCdChildпозволяют по Ctrl+PgDn входить в архив без изменения поведения Enter.
Исправления
mcedit
- Корректное определение печатных Unicode-символов после преобразования кодировки. В UTF-8-терминале символы CP1251 и KOI8-R теперь проверяются как Unicode code points, а не обрезаются до 8-битного значения при проверке печатности, поэтому корректные символы больше не отображаются точками.
- Shift-Tab при включённом
ctags. Плагинctagsбольше не перехватываетCtagsComplete, когда текст выделен, поэтому обычное уменьшение отступа блока снова работает, а автодополнение сохраняется при отсутствии выделения.
mcterm
- Синхронизация курсора и состояния командной строки. Изменения буфера командной строки shell обновляют курсор терминала, а перемещения курсора терминала обновляют состояние командной строки.
- Актуальный prompt и меню при скрытых панелях. Каждая соответствующая метка prompt
OSC 133обновляет начало введённой строки, предотвращая ситуацию, когда Enter после перехода через Ctrl-O воспринимает текст prompt как команду или скрывает панели. При скрытых панелях активное меню F9 теперь получает клавиши раньше терминального overlay. - Вставка символов и режим вставки.
vtermреализуетICH (CSI @)иIRM (CSI 4 h/l), сдвигая строку и заполняя освободившееся место текущими атрибутами, поэтому редактирование readline в середине команды больше не перезаписывает отображаемый текст. - Сохранение активной панели при открытии overlay. До скрытия панелей фокус переводится на виджет ввода, поэтому другая панель не становится текущей и не получает каталог shell при закрытии overlay.
- Пауза после запуска и обработка каталога панели. Команды, запущенные из панелей, теперь возвращаются согласно настроенной политике паузы, немедленно помечают shell как занятый и различают prompt после внутреннего
cdи prompt после выполнения команды. Shell запускается в каталоге реально активной панели и следует за ней, включая переключение панели мышью. - Переключение панелей из командной строки. Ctrl-F1 и Ctrl-F2 теперь обрабатываются самим mc, когда фокус находится в командной строке, вместо передачи их shell как команд редактирования.
- Полная перерисовка после переключения терминала. При возврате из mcterm, включая использование Ctrl-O в редакторе и просмотрщиках, полностью обновляется весь экран, поэтому очистка экрана внутри терминала больше не может оставить пустые области в местах, которые экранная библиотека считала неизменёнными.
Ядро
- Корректный вывод в 8-битных терминалах. Редактор и просмотрщик теперь различают преобразованные Unicode code points и байты в кодировке терминала, восстанавливая корректный вывод кириллицы в комбинациях UTF-8, CP866, CP1251 и KOI8-R.
- TTY Esc и буферизованный ввод. В S-Lang клавиша Esc теперь проходит через
key trieс настроенным timeout, что исправляет режимы Esc-число и двойного Esc. В ncurses ввод, уже находящийся во внутреннем буфере экранной библиотеки, проверяется доselect(), поэтому введённые символы больше не появляются с задержкой на одну клавишу. - Ограниченная длина путей extension cd. При формировании пути команды расширения теперь проверяется длина, используются ограниченные записи и гарантируется завершение
NUL, что предотвращает переполнение на слишком длинных путях.
Плагины
API плагинов / инфраструктура
- Копирование каталогов целиком из панелей плагинов. Ядро теперь сохраняет информацию о правах доступа (mode) исходных файлов, позволяет плагинам с
MC_PPF_COPY_TREEпередавать всё поддерево за один проход, а в остальных случаях обходит его через существующие операцииchdirиget_items. F5 и F6 больше не создают пустые файлы вместо каталогов плагинов, а скопированные файлы сохраняют указанные для них права доступа. - arcmc. Копирование каталогов архива вместе с содержимым.
arcmcреализует древовидное копирование, используемое F5 и F6, вместо возврата пустого временного файла для каталога; обычные файлы наследуют права доступа (mode) из архива, а не получают стандартные 0600 временного файла. - Предсказуемое положение курсора после входа в каталог. Если плагин не указывает элемент, который нужно выбрать после
chdir, панель выбирает.., а не сохраняет элемент с тем же именем из списка родительского каталога. - git. Shift-F3 показывает diff файлов в commits и status.
CK_ViewRawтеперь доходит до плагина в обоих представлениях списка файлов, даже если первый защищённый обработчик не поддерживает выбранный элемент, поэтому снова вызывается diff вместо обычного просмотра файла. - sftp / shell-link. Современные SSH-алгоритмы и информативные ошибки подключения*. Сборка теперь требует libssh2 1.9, поддерживающую ключи хостов ECDSA и Ed25519, используемые современными OpenSSH-серверами. SFTP сообщает, на каком этапе произошла ошибка — настройка сокета, handshake, аутентификация или создание сессии - и показывает ошибку библиотеки, при этом отмена ввода пароля остаётся обычной отменой операции.
- Отображение удалённых владельца и группы через shell-link. Числовые значения
UIDиGIDиз вспомогательной командыlsтеперь записываются вstat, поэтому панель иshfs-tool -lбольше не показывают все удалённые файлы как принадлежащиеroot.
Внутренние изменения
Сборка и упаковка
- Базовая версия GLib 2.58 и совместимость.
Configureтеперь указывает фактическую минимальную версию, необходимую коду. Функции совместимости предоставляютg_memdup2,g_spawn_check_wait_status, а также резервную реализацию строковой операции для старых версий GLib, что восстанавливает полную сборку и загрузку плагинов в Debian 10 с GLib 2.58. - Сборка Mongo для Ubuntu 26.04 и Gentoo. Метаданные пакетов, конфигурация сборки и CI-матрица теперь собирают и проверяют Mongo-плагин для Ubuntu 26.04.
>>> Страница загрузки: доступны пакеты для Debian, Ubuntu, Fedora, Arch и macOS
>>> Исходный код и Вики на GitHub









