LINUX.ORG.RU

Midnight Commander 6.0.4 — форк GNU Midnight Commander 4.8.33

 , , , mc6,


1

2

Состоялся выпуск 6.0.4 mc6 (github.com) — форка Midnight Commander, развиваемого @angel_il.

Версия 6.0.4 основана на GNU Midnight Commander 4.8.33.

Форк развивается по пяти направлениям:

  1. Расширяемые панельные плагины и API, позволяющий им передавать данные друг другу.
  2. Скрипты на Lua, где сам язык — плагин, а не часть ядра.
  3. Просмотрщик структурированных данных, двоичных форматов, журналов и терминальных записей.
  4. Редактор: плагины, рисование, сворачивание, фильтрация, история.
  5. Встроенный терминал вместо 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 в clipfile mc и системный буфер обмена. Выделения используют стабильные идентификаторы строк терминала, поэтому новый вывод и прокрутка их не смещают. Видимый терминальный курсор, отдельная раскладка клавиш [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

>>> Источник: wiki/Release-v6.0.4-ru

★★★★★

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

Может лучше заголовок сделать как-то так?

mc6 6.0.4 (форк Midnight Commander)

Я, например, дернулся бежать и конпелять оф.репу Зайцева/Бородина :)

Gonzo ★★★★★
()

Попробую, когда появится в основных репах (не в AUR).

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

Вроде как Ларри Уолл одумался, и отдал имя перл и цифру 6 сообществу взад. Так что этот вопрос похоже скоро разрешится.

Evgueni ★★★★★
()

Можно его как-нибудь настроить, чтобы вход в директорию и выполнение командной строки осуществлять разными клавишами? А не так, что и то Enter, и другое Enter. Вот бывает, введёшь половину команды, и тут хорошо бы перейти в другую директорию. И что, всю набранную строку стирать? Неудобно же.

VladimirP ★★★★
()

прикольно, но переходить с оригинала все равно не буду. таки мне нужен фм с минимум потребления памяти и максимум скорости. а все остальное ненужные свистоперделки.

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

perl — не человек, чтобы ему в чём-то помогать. А сообщество вполне себе живое и активное. Внутри себя вполне себе бурлит и гнёт perl под себя. Преимущество perl — удобные регэкспы никуда не делось, ну а то, что perl не Python — это фича, а не недостаток.

Evgueni ★★★★★
()

mcterm работает очень плохо. скорее из-за несовместимости с параметрами zsh. Пользоваться вообще невозможно.

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

есть такое, но, думаю, все уже привыкли до мозга костей... и новое сочетание будет корежить подсознание :о)
ну допустим Ctl+Enter -> я просто представил это в мымслях... бр...
имхо лучше все по старому

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

надо с начало думать а потом действовать! (это я и к себе говорю)
и не будет «таких неудобных» ситуаций.
ну вот с какой частотой «мы» сталкиваемся с ней? я, если покопаться в мымслях и говове - за последний полгода - ну может один раз или меньше
имхо :о)

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

perl не Python — это фича, а не недостаток.

я бы сказал - это плюс! :о)

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

что мешало делать просто плагины

Очевидно, отсутствие системы плагинов в MC.

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

А имя придумали так чтобы никто не догадался?

Выглядит как будто просто следующая (через один) версия. Ну никак не форк.

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

или постфикс mod добавить в название.
да, действительно добавляет непоняток (особенно, при работе в «поле» а не в новостном топике)

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

ну вот с какой частотой «мы» сталкиваемся с ней?

Ну лично я, можно сказать, ежедневно. И дело как правило не в том, что не додумав начал набирать команду. Часто бывает нужно выполнить команду находясь в одной директории, а файлы для аргументов набрать в поддиректории, а то и в нескольких разных (например, источник и приёмник – разные директории).

В такой ситуации порой легче плюнуть на всё, выйти из mc и сделать всё в командной строке, пользуясь автодополнением.

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

или постфикс mod добавить в название.

Я предлагал -ngФорк Midnight Commander c поддержкой панельных плагинов (комментарий):

Может быть переименовать проект в mc-ng, как многие проекты делают (zlib-ng, goldendict-ng)?

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

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

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

Можно его как-нибудь настроить, чтобы вход в директорию и выполнение командной строки осуществлять разными клавишами? А не так, что и то Enter, и другое Enter. Вот бывает, введёшь половину команды, и тут хорошо бы перейти в другую директорию. И что, всю набранную строку стирать? Неудобно же.

вход в директорию Ctrl-Pgdn

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

прикольно, но переходить с оригинала все равно не буду. таки мне нужен фм с минимум потребления памяти и максимум скорости. а все остальное ненужные свистоперделки.

так как раз свистелки выделены в плагины чтобы сделать легче основной функционал ) такие дела

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

mcterm работает очень плохо. скорее из-за несовместимости с параметрами zsh

я допускаю что все это так, а в чем проявляется?

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

А имя придумали так чтобы никто не догадался?

я пытался но не смог (

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

И дело как правило не в том, что не додумав начал набирать команду. Часто бывает нужно выполнить команду находясь в одной директории, а файлы для аргументов набрать в поддиректории, а то и в нескольких разных (например, источник и приёмник – разные директории).

ctrl-pgdn (провалиться внутрь директории) ctrl-f (поместить полный путь к файлу под курсором в ком строку) ctrl-pgup (перейти на один уровень вверх)

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

если осилю роадмап хотя бы одного дистрибутива (начал с федоры) это будет успех, пока сделано 0 шагов

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