Skip to content
Ilia Maslakov edited this page Sep 2, 2026 · 5 revisions

mc6 v6.0.4 (2026-09-01)

English version

Основные изменения

Поддержка Lua реализована как плагин, использующий ABI ядра mc, без встраивания Lua непосредственно в ядро. Это позволяет расширять редактор, панели, просмотрщик и интерфейс с помощью скриптов, не добавляя каждую новую функцию напрямую в ядро.

Старый subshell заменён на mcterm. Он использует настоящий prompt оболочки и предоставляет единую командную строку, scrollback, выделение и копирование текста, фильтрацию строк, корректную обработку изменения размера терминала и поддержку sixel. (#160 и связанные изменения)

mcstruct — просмотрщик структур файлов с возможностью редактирования. Форматы файлов описываются с помощью определений STL5, что позволяет просматривать и редактировать бинарные данные как структурированные поля, а не только как сырые байты. (#189)

API панельных плагинов теперь поддерживает потоки с произвольным доступом (seekable streams) между плагинами и маршрутизацию через magic.ini. Это позволяет открывать удалённые архивы и другие поддерживаемые форматы напрямую из другого плагина без предварительного скачивания всего файла. (#152)


Возможности

mcedit

  • Фильтрация строк из диалога поиска и по тексту под курсором. В диалоге F7 появилась команда Filter, скрывающая строки, не соответствующие текущим параметрам поиска: типу поиска, регистру, поиску целого слова и кодировке, при этом исходные номера строк сохраняются. Alt-S удаляет или восстанавливает последний фильтр; Alt+Shift+S применяет фильтр, используя однострочное выделение или слово под курсором в качестве шаблона. Фильтрацию можно отменить; она корректно работает с нулевыми байтами (NUL) и интегрирована со сворачиванием блоков, перемещением курсора и обработкой мыши. (#191, #192, #201)

  • Поиск начинается с выделенного текста. При открытии F7 строка поиска предварительно заполняется текущим выделением, но остаётся доступной для редактирования до начала поиска. (#200)

mcview

  • Динамические обработчики файлов (runtime) и просмотр изображений через Chafa. Lua-обработчик может перехватить открытие файла в Viewer или Quick View и показать вместо его исходного содержимого сгенерированное представление. Обработчик lua-сhafa использует этот механизм для просмотра изображений; F8 переключает между изображением и исходными данными файла. Анимированные изображения ограничиваются одним кадром, имена файлов с кавычками и пробелами передаются безопасно, а перед изображением отображается краткое описание. Клавиша i открывает полные свойства, а F1 — справку конкретного обработчика. (#168, #180, #186)

  • Sixel-изображения в просмотрщике и mcterm. Эмулятор терминала сохраняет sixel DCS-данные как изображения, привязанные к строкам экрана, перемещает или удаляет их вместе с этими строками и отрисовывает после обновления экранного backend. Проверка возможностей терминала и размеров ячейки, ответы PTY и управление через MC_SIXEL=0/1 позволяют использовать один и тот же механизм как в терминальном режиме просмотрщика, так и во встроенных программах. Обработчик lua-sixel использует Chafa для вывода изображения в доступную пиксельную область и показывает свойства изображения, если Chafa или sixel недоступны. (#181)

  • Генерируемые представления ELF и Java-классов. Lua-обработчики запускают readelf для заголовков ELF, секций, сегментов и динамических данных, а Procyon — для Java-классов, без shell interpolation. Оба обработчика сообщают о ходе работы и ошибках, работают в Quick View там, где это применимо, и позволяют по F8 циклически переключаться между генерируемым и сырым представлением. MIME-определение ELF теперь следует по символическим ссылкам. (#170, #172)

  • Просмотровщик DBF на Lua. Открывает DBF-файлы в виде таблицы с постраничным просмотром. Поддерживаются выбор кодировки, просмотр структуры и карточки записи, а F8 переключает на сырые данные. Большие файлы открываются сразу благодаря постраничному декодированию. (#194)

mcterm

  • mcterm заменяет устаревший subshell. Команды теперь передаются оболочке, уже запущенной во встроенном терминале, а виджет командной строки отображает настоящий prompt, цвета и курсор этой оболочки вместо поддержки отдельного параллельного subshell. Метки OSC 133 и OSC 7 с токеном сессии отслеживают состояние prompt, выполнения команды, завершения и текущего каталога. Запуск mc из его собственного терминала восстанавливает родительские панели посредством сигнала SIGUSR1, а не запускает ещё один вложенный экземпляр. (#160)

  • Редактирование и автодополнение командной строки средствами shell. При отображении prompt вводом как в панелях, так и в полноэкранном терминальном режиме управляет редактор строки самой оболочки, при этом mc сохраняет обработку Enter, cd и exit там, где это необходимо. Перемещение курсора и переходы по словам следуют раскладке клавиш командной строки, незавершённый ввод сохраняется при отправке команд из mc, а список автодополнения после каждого редактирования пересчитывается и сужается, не заменяя введённый текст более длинным общим префиксом. (#173)

  • Ограниченный scrollback и навигация. Строки, покидающие экран, сохраняются с ограничениями как по количеству строк, так и по количеству ячеек. PgUp/PgDn, Shift-стрелки, Home/End и колесо мыши позволяют перемещаться по истории, при этом новый вывод не возвращает просмотр автоматически вниз. Ввод текста возвращает к текущему выводу, а программы, использующие альтернативный экран, сохраняют обработку собственных клавиш. (#155)

  • Выделение, копирование и фокус. Вывод можно выделять мышью или с помощью клавиатуры при нажатой клавише Shift и копировать через Ctrl-Insert в clipfile mc и системный буфер обмена. Выделения используют стабильные идентификаторы строк терминала, поэтому новый вывод и прокрутка их не смещают. Видимый терминальный курсор, отдельная раскладка клавиш [mcterm] и секция темы позволяют переключать фокус между терминалом и командной строкой. Двойной щелчок выделяет слово, тройной - строку, а Enter копирует существующее выделение. (#159, #178)

  • Фильтр строк терминала. Alt+Shift+S оставляет только строки, содержащие выделенный текст или слово под курсором. Снимок остаётся стабильным, пока shell продолжает вывод, навигация и координаты мыши работают по отфильтрованным строкам, а Alt-S переключает фильтр. При вводе команды фильтр удаляется до вывода новых данных. (#201)

  • Две операции очистки. Ctrl-L перемещает видимое содержимое экрана в историю, оставляя активный prompt внизу, поэтому предыдущий вывод остаётся доступен одним движением колеса. Ctrl+Alt+L или Ctrl+Shift+L (в терминалах, поддерживающих различие этих комбинаций) очищает и экран, и scrollback, не нарушая идентификаторы строк, используемые выделениями и фильтрами. (#178, #202)

  • Автоперенос и переразметка при изменении размера. vterm реализует xterm-совместимый отложенный автоматический перенос строки и DECAWM. Информация о перенесённых строках сохраняется при их переходе в историю, а при изменении ширины терминала строки объединяются и заново разбиваются под новую ширину (reflow), при этом курсор остаётся на своём символе, а sixel-изображения - на соответствующих строках. (#197)

  • Текущая команда в prompt. В Linux активный prompt отображает имя команды, выполняемой на переднем плане, включая специальную обработку интерпретаторов и скриптов и резервный вариант для команд, запущенных самим mc, вместо общего значения background. (#167)

  • Панель функциональных клавиш терминала и документация. Полноэкранный mcterm получил собственную панель функциональных клавиш, а руководство теперь описывает scrollback и указывает, какие клавиши обрабатываются mc, а какие - программой внутри терминала. (#203)

mcstruct

  • Просмотровщик структур файлов. mcstruct показывает бинарный файл как дерево структуры на основе STL5-описания формата и позволяет редактировать отдельные поля. Поддерживаются определения Struct Look 4.00, массивы, выражения, разные порядки байтов и поиск по структуре. В комплект входит большая библиотека описаний форматов. (#189)

Панели

  • Quick Filter. Alt+Shift+S скрывает элементы панели, не соответствующие шаблону, прямо во время его ввода. Quick Search и Quick Filter используют общий шаблон и могут переключаться друг в друга без повторного ввода. Фильтрация сохраняется при навигации, маркировке, прокрутке мышью и смене режима отображения, сообщает о помеченных элементах, скрытых фильтром, и немедленно снимается по Ctrl-G. (#169)

  • Встроенная функция быстрой смены каталога (Quick cd). Alt-C заменяет мини-статус активной панели однострочным полем ввода вместо открытия отдельного диалога. Tab и Shift-Tab предлагают только каталоги в списке автодополнения над полем ввода, Up и Down перемещаются по истории, для простых имён используется переменная CDPATH, а клавиша Esc восстанавливает отображение мини-статуса. (#175)

  • Отдельные цвета для битов прав доступа. Новая настройка permission_colors позволяет независимо задавать цвета для read, write, execute, special и отсутствующих битов, при этом тип файла сохраняет цвет строки. Это работает вместе с существующей подсветкой применимой тройки прав и не переопределяет цвета курсора или помеченной строки. Пять необязательных ключей темы обеспечивают совместимые значения по умолчанию для существующих тем. (#188)

  • Более информативные результаты Find. Найденные файлы показывают время изменения, размер и права доступа с использованием форматтеров панели; на узких терминалах второстепенные столбцы убираются. Совпадения внутри файлов группируются по файлу; интерактивный элемент [+] раскрывает номера строк и соответствующий текст, после чего Enter, F3 и F4 работают с выбранным совпадением. (#158)

  • Drive menu в меню Panel. Существующие команды меню дисков для левой и правой панели теперь доступны непосредственно из меню вместе с настроенными для них сочетаниями клавиш. (#146)

Ядро

  • Отдельные пользовательские каталоги mc6. Конфигурация, данные и кеш перенесены в ~/.config/mc6, ~/.local/share/mc6 и ~/.cache/mc6. При первом запуске каждый старый каталог mc копируется, если соответствующий новый каталог отсутствует; исходный каталог намеренно остаётся без изменений. (#184)

Плагины

Lua / runtime

  • Платформа расширений Lua. Версионированный типизированный host ABI предоставляет доступ к документам и транзакциям редактора, провайдерам панелей и файловым операциям, источникам просмотрщика, нативному UI, процессам, событиям, автодополнению и истории. Скриптами можно управлять через Options, аннотации API используются для генерации справочников Markdown и JSON, а примеры для редактора показывают типовые преобразования без добавления специализированного кода в ядро. (#162)

  • Полноэкранный нативный UI для скриптов. mc.ui.screen позволяет Lua-скрипту формировать строку состояния, панель функциональных клавиш и табличную компоновку (grid) из нативных таблиц, текста, меток, полей ввода, флажков и разделителей. Таблицы загружают и кешируют строки постранично и поддерживают заголовки, прокрутку, динамическую ширину и цвета отдельных ячеек. Скрипты получают события клавиш, действий, строк, переключателей, изменения размера и закрытия и могут обновлять уже работающий экран. Пользовательские runtime-плагины ищутся раньше системных. (#193)

API плагинов / инфраструктура

  • Потоки с произвольным доступом между панельными плагинами. Исходный плагин может передать другому плагину принадлежащий ему поток байтов с операциями open/read/seek/close, который остаётся действительным даже после замены исходной панели. В magic.ini добавлена маршрутизация %plugin{name:operation} для Open и View, mc.ext.ini остаётся резервным механизмом, а SFTP предоставляет потоки на основе клонированных сессий. Это позволяет удалённо открывать архивы и другие форматы, требующие произвольного доступа, без полного предварительного скачивания. (#152)

  • Создание через Shift-F4 в корне плагина. Плагины панельного типа могут использовать Shift-F4 для собственного действия создания соединения, контекста или репозитория. (#147)

sqlite

  • SQLite-браузер только для чтения. Базы данных открываются как иерархия панелей с таблицами и представлениями, страницами максимум по 200 строк и отдельными строками. Элементы схемы доступны на каждом уровне, значения безопасно отображаются как JSON, BLOB используют ограниченное hex-представление, сканирование можно прервать, а PRAGMA data_version позволяет избегать ненужной перезагрузки. Open и View выбираются через magic.ini, а не через имя плагина, жёстко заданное в ядре. (#149)

arcmc

  • 7z-архивы с паролем. Для создания зашифрованных 7z используется внешняя программа 7z с шифрованием заголовков; пароль передаётся вспомогательной программе (helper) u7z неинтерактивно. Диалоги проверяют, какие форматы поддерживают шифрование, и требуют пароль при его включении. Для каждого встроенного формата можно независимо выбрать builtin, both, extern или off для упаковки и распаковки, а внешний резервный механизм используется там, где возможностей libarchive недостаточно. (#138)

  • Внешние форматы, определяемые во время выполнения. В arcmc.ini можно задавать расширения, программы, аргументы и extfs helper'ы без перекомпиляции, сохраняя при этом встроенные значения по умолчанию, включая поддержку Inno Setup через innoextract. Внешние helper'ы работают поверх потоков плагинов, а magic-действия CdChild позволяют по Ctrl+PgDn входить в архив без изменения поведения Enter. (#187)


Исправления

mcedit

  • Корректное определение печатных Unicode-символов после преобразования кодировки. В UTF-8-терминале символы CP1251 и KOI8-R теперь проверяются как Unicode code points, а не обрезаются до 8-битного значения при проверке печатности, поэтому корректные символы больше не отображаются точками. (#165, #213)

  • Shift-Tab при включённом ctags. Плагин ctags больше не перехватывает CtagsComplete, когда текст выделен, поэтому обычное уменьшение отступа блока снова работает, а автодополнение сохраняется при отсутствии выделения. (#171)

mcterm

  • Синхронизация курсора и состояния командной строки. Изменения буфера командной строки shell обновляют курсор терминала, а перемещения курсора терминала обновляют состояние командной строки. (#164)

  • Актуальный prompt и меню при скрытых панелях. Каждая соответствующая метка prompt OSC 133 обновляет начало введённой строки, предотвращая ситуацию, когда Enter после перехода через Ctrl-O воспринимает текст prompt как команду или скрывает панели. При скрытых панелях активное меню F9 теперь получает клавиши раньше терминального overlay. (#190)

  • Вставка символов и режим вставки. vterm реализует ICH (CSI @) и IRM (CSI 4 h/l), сдвигая строку и заполняя освободившееся место текущими атрибутами, поэтому редактирование readline в середине команды больше не перезаписывает отображаемый текст. (#195)

  • Сохранение активной панели при открытии overlay. До скрытия панелей фокус переводится на виджет ввода, поэтому другая панель не становится текущей и не получает каталог shell при закрытии overlay. (#183)

  • Pause-after-run и обработка каталога панели. Команды, запущенные из панелей, теперь возвращаются согласно настроенной политике паузы, немедленно помечают shell как занятый и различают prompt после внутреннего cd и prompt после выполнения команды. Shell запускается в каталоге реально активной панели и следует за ней, включая переключение панели мышью. (#198)

  • Переключение панелей из командной строки. Ctrl-F1 и Ctrl-F2 теперь обрабатываются самим mc, когда фокус находится в командной строке, вместо передачи их shell как команд редактирования. (#199)

  • Полная перерисовка после переключения терминала. При возврате из mcterm, включая использование Ctrl-O в редакторе и просмотрщиках, полностью обновляется весь экран, поэтому очистка экрана внутри терминала больше не может оставить пустые области в местах, которые экранная библиотека считала неизменёнными. (#204)

Ядро

  • Корректный вывод в 8-битных терминалах. Редактор и просмотрщик теперь различают преобразованные Unicode code points и байты в кодировке терминала, восстанавливая корректный вывод кириллицы в комбинациях UTF-8, CP866, CP1251 и KOI8-R. (#166)

  • TTY Esc и буферизованный ввод. В S-Lang клавиша Esc теперь проходит через key trie с настроенным timeout, что исправляет режимы Esc-число и двойного Esc. В ncurses ввод, уже находящийся во внутреннем буфере экранной библиотеки, проверяется до select(), поэтому введённые символы больше не появляются с задержкой на одну клавишу. (#141)

  • Ограниченная длина путей extension cd. При формировании пути команды расширения теперь проверяется длина, используются ограниченные записи и гарантируется завершение NUL, что предотвращает переполнение на слишком длинных путях. (#132)

Плагины

API плагинов / инфраструктура

  • Копирование каталогов целиком из панелей плагинов. Ядро теперь сохраняет информацию о правах доступа (mode) исходных файлов, позволяет плагинам с MC_PPF_COPY_TREE передавать всё поддерево за один проход, а в остальных случаях обходит его через существующие операции chdir и get_items. F5 и F6 больше не создают пустые файлы вместо каталогов плагинов, а скопированные файлы сохраняют указанные для них права доступа. (#148)

arcmc

  • Копирование каталогов архива вместе с содержимым. arcmc реализует древовидное копирование, используемое F5 и F6, вместо возврата пустого временного файла для каталога; обычные файлы наследуют права доступа (mode) из архива, а не получают стандартные 0600 временного файла. (#143)

  • Предсказуемое положение курсора после входа в каталог. Если плагин не указывает элемент, который нужно выбрать после chdir, панель выбирает .., а не сохраняет элемент с тем же именем из списка родительского каталога. (#179)

git

  • Shift-F3 показывает diff файлов в commits и status. CK_ViewRaw теперь доходит до плагина в обоих представлениях списка файлов, даже если первый защищённый обработчик не поддерживает выбранный элемент, поэтому снова вызывается diff вместо обычного просмотра файла. (#206)

sftp / shell-link

  • Современные SSH-алгоритмы и информативные ошибки подключения. Сборка теперь требует libssh2 1.9, поддерживающую ключи хостов ECDSA и Ed25519, используемые современными OpenSSH-серверами. SFTP сообщает, на каком этапе произошла ошибка - настройка сокета, handshake, аутентификация или создание сессии - и показывает ошибку библиотеки, при этом отмена ввода пароля остаётся обычной отменой операции. (#177)

  • Отображение удалённых владельца и группы через shell-link. Числовые значения UID и GID из вспомогательной команды ls теперь записываются в stat, поэтому панель и shfs-tool -l больше не показывают все удалённые файлы как принадлежащие root. (#174)


Внутренние изменения

Сборка и упаковка

  • Базовая версия GLib 2.58 и совместимость. Configure теперь указывает фактическую минимальную версию, необходимую коду. Функции совместимости предоставляют g_memdup2, g_spawn_check_wait_status, а также резервную реализацию строковой операции для старых версий GLib, что восстанавливает полную сборку и загрузку плагинов в Debian 10 с GLib 2.58. (#163, #176)

  • Сборка Mongo для Ubuntu 26.04 и Gentoo Метаданные пакетов, конфигурация сборки и CI-матрица теперь собирают и проверяют Mongo-плагин для Ubuntu 26.04. (#139, #211)

Clone this wiki locally