Skip to content
Ilia Maslakov edited this page Sep 2, 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 создаёт архив из текущего или отмеченных элементов. Комбинацию можно изменить.

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

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

sequenceDiagram
    actor User as Пользователь
    participant Panel as Файловая панель
    participant Magic as magic.ini
    participant Plugins as Реестр плагинов
    participant Arcmc as arcmc

    User->>Panel: Enter или Ctrl+PgDn
    alt Enter
        Panel->>Magic: Найти правило Open
        Magic-->>Panel: arcmc:open
    else Ctrl+PgDn
        Panel->>Magic: Найти явное правило
        alt Есть правило arcmc
            Magic-->>Panel: arcmc:open
        else Правила нет
            Panel->>Plugins: Подобрать Open по имени файла
            Plugins-->>Panel: arcmc:open
        end
    end
    Panel->>Arcmc: Открыть файл или поток
    alt Архив принят
        Arcmc-->>Panel: Активировать панель архива
    else Это не архив
        Arcmc-->>Panel: Не поддерживается
    end
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