Skip to content
Ilia Maslakov edited this page Aug 27, 2026 · 4 revisions

Просмотр и управление архивами в arcmc

English version

arcmc — панельный плагин для просмотра, создания, проверки и распаковки архивов. Для известных форматов он использует libarchive, а с остальными работает через консольные архиваторы и extfs-helper’ы.

Обычная работа

  • Чтобы открыть архив в панели arcmc, установите на него курсор и нажмите Ctrl+PgDn.
  • Enter открывает распространённые встроенные форматы: их обработчик Open задан в системном magic.ini.
  • F3 показывает текстовый каталог распространённого архива.
  • В панели arcmc клавиша Enter входит в каталог или вложенный архив. Обычный файл, который не является архивом, передаётся во viewer.
  • Стандартные панельные операции копирования и удаления работают, если их поддерживает выбранный backend.
  • В меню плагина есть Open archive, Create archive, Extract archive(s), Test archive(s) и Archiver settings.
  • По умолчанию Shift+F1 создаёт архив из текущего или отмеченных элементов. Комбинацию можно изменить.

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

Как открывается архив

flowchart LR
    A[Файл под курсором] --> B{Клавиша}
    B -->|Enter| C[Open-правило в magic.ini]
    B -->|Ctrl+PgDn| D[Явное правило в magic.ini]
    D -->|Правила нет| E[Зарегистрированные Open-операции плагинов]
    C --> F[arcmc]
    E -->|Суффикс включён и утилита доступна| F
    F --> G{libarchive читает формат?}
    G -->|Да| H[Панель архива]
    G -->|Нет| I[extfs-helper]
    I --> J[Внешний архиватор]
    J --> H
Loading

Поэтому Ctrl+PgDn видит расширение, добавленное в arcmc.ini во время выполнения: для нового формата не требуется пересобирать mc или генерировать системное правило magic.ini. Поведение Enter по-прежнему задаёт magic.ini, поэтому новое расширение не перехватывает обычное открытие файла неожиданным образом.

Встроенные и внешние форматы

Через libarchive доступны чтение и запись ZIP, 7z, вариантов TAR и CPIO. Также читаются ISO, XAR, CAB и другие поддерживаемые сборкой libarchive форматы. JAR, WAR и EAR считаются вариантами ZIP.

В реестре внешних архиваторов по умолчанию есть RAR, ARJ, ACE, ARC, ALZ, ZOO, HA, WIM, LHA/LZH, DEB, RPM и установщики Inno Setup. Это описания внешних программ и helper’ов; сами утилиты всё равно должны быть установлены. Диалог Archiver settings показывает встроенные и внешние форматы, позволяет их включать и выключать, выбирать встроенный или внешний backend и помечает отсутствующую утилиту символом !.

Файлы настроек

Настройки плагина хранятся в пользовательском каталоге Midnight Commander, обычно здесь:

${XDG_CONFIG_HOME:-$HOME/.config}/mc6/arcmc.ini

Пользовательский magic.ini, если он нужен, находится там же. У файлов разные задачи:

  • arcmc.ini описывает форматы, команды, helper’ы и признак включения;
  • magic.ini определяет, какое действие вызывает обработчик для Enter, F3 или явно настроенного Ctrl+PgDn.

После ручного изменения arcmc.ini перезапустите mc: реестр внешних форматов загружается при регистрации плагина.

Комбинация создания архива задаётся отдельно:

[arcmc]
hotkey_create=shift-f1

Значение none отключает комбинацию.

Добавление внешнего формата без перекомпиляции

Этот пример регистрирует расширение .foo:

[arcmc-ext]
FOO=true

[arcmc-ext-params-FOO]
extension=.foo
pack_bin=foo-archive
pack_args=create
unpack_bin=foo-archive
unpack_args=extract
test_bin=foo-archive
test_args=test
extfs_helper=ufoo
list_file_arg=@%s

FOO — произвольное имя без учёта регистра. Для нового формата обязательно указать extension; начальную точку можно опустить. В имени нельзя использовать =, [ и ], управляющие символы и пробелы в начале или конце. При сохранении mc приводит имя к каноническому верхнему регистру.

Расширения сравниваются без учёта регистра. При пересечении суффиксов побеждает самый длинный. Отсутствующая запись в [arcmc-ext] означает true. Включённое расширение предлагается обработчику Ctrl+PgDn, только если хотя бы одна указанная программа найдена в PATH; запись, в которой указан только extfs-helper, считается helper-only и тоже доступна.

Ключ Назначение
extension Суффикс имени файла. ext принимается как совместимый псевдоним.
pack_bin Программа создания или обновления архива.
pack_args Аргументы после pack_bin и перед именем архива.
unpack_bin Программа массовой или выборочной распаковки.
unpack_args Аргументы после unpack_bin и перед именем архива.
test_bin Программа для действия Test archive(s).
test_args Аргументы после test_bin и перед именем архива.
extfs_helper Helper для получения каталога и доступа к отдельным элементам.
list_file_arg printf-шаблон аргумента со списком файлов, например @%s, для команд длиннее 128 КиБ.

Отсутствующий ключ команды отключает соответствующую операцию. Пустое значение очищает встроенное значение. *_args — доверенные фрагменты shell-команды, а не массивы аргументов и не шаблоны с подстановками. Команды строятся так:

pack_bin pack_args archive files...
unpack_bin unpack_args archive [destination]
test_bin test_args archive

Для выборочной распаковки arcmc переходит в каталог назначения и выполняет unpack_bin unpack_args archive files....

Как связаны extfs-helper’ы и arcmc

Скрипты из src/vfs/extfs/helpers/ реализуют протокол команд extfs. arcmc повторно использует этот протокол как адаптер к внешним архиваторам: запускает helper напрямую, но не открывает и не монтирует VFS-путь вида archive/uzip://.

flowchart LR
    A[Панель arcmc] -->|list| B[extfs-helper]
    A -->|просмотр или копирование| C[copyout]
    A -->|добавление| D[copyin]
    A -->|удаление| E[rm]
    B --> F[Внешний архиватор]
    C --> F
    D --> F
    E --> F
Loading

Для extfs_helper=ufoo плагин ищет исполняемый файл ufoo в таком порядке:

  1. ${XDG_DATA_HOME:-$HOME/.local/share}/mc6/extfs.d/
  2. системный каталог extfs.d внутри настроенного при сборке libexec-каталога mc, обычно /usr/libexec/mc/extfs.d/

arcmc использует следующие команды helper’а:

ufoo list archive.foo
ufoo copyout archive.foo path/inside/archive destination
ufoo copyin archive.foo path/inside/archive source
ufoo rm archive.foo path/inside/archive

list обязателен для просмотра формата, который не читает libarchive. Вывод должен соответствовать модифицированному формату ls -l из документации extfs-helper’ов. copyout нужен для просмотра и копирования файлов. Необязательные copyin и rm разрешают добавлять и удалять элементы.

Пользовательский helper устанавливается как исполняемый файл:

install -Dm755 ufoo "${XDG_DATA_HOME:-$HOME/.local/share}/mc6/extfs.d/ufoo"

Внешнему helper’у нужен локальный путь к архиву. Он не сможет просмотреть архив, который другая панель передала только как нелокальный поток. Если исходный плагин умеет подготовить локальную копию, arcmc сможет работать с ней.

Открытие пользовательского расширения по Enter

Для Ctrl+PgDn правило magic.ini не требуется. Чтобы .foo открывался через arcmc также по Enter, добавьте пользовательское правило:

[arcmc.foo]
Regex=\\.foo$
RegexIgnoreCase=true
Open=%plugin{arcmc:open}

Не добавляйте правило, если Enter должен по-прежнему вызывать viewer или другой обработчик.

Установщики Inno Setup

Поддержка Inno Setup зарегистрирована по умолчанию и эквивалентна такой настройке:

[arcmc-ext]
INO=true

[arcmc-ext-params-INO]
extension=.exe
test_bin=innoextract
test_args=--test --silent
extfs_helper=uinno

Установленный helper uinno использует innoextract для команд list и copyout, поэтому innoextract должен находиться в PATH. Установите курсор на установщик и нажмите Ctrl+PgDn. Обычный .exe, который не является Inno Setup, будет тихо отклонён и останется обычным файлом; действие Enter для .exe не переназначается.

Диагностика

  • Убедитесь, что панельный плагин arcmc включён, и перезапустите mc после изменения arcmc.ini.
  • Проверьте внешнюю программу командой command -v имя-программы.
  • Проверьте, что пользовательский helper исполняемый и находится в правильном каталоге extfs.d.
  • Запустите ufoo list archive.foo в shell. Ненулевой код возврата или неправильный формат списка не позволит arcmc построить панель.
  • Для расширения, добавленного во время выполнения, используйте Ctrl+PgDn. Для Enter нужно отдельное правило magic.ini из примера выше.
  • Если просмотр работает, а добавление или удаление — нет, helper, вероятно, не реализует необязательные команды copyin или rm.

Clone this wiki locally