-
Notifications
You must be signed in to change notification settings - Fork 8
Arcmc ru
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
Поэтому 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=@%sFOO — произвольное имя без учёта регистра. Для нового формата обязательно
указать 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....
Скрипты из
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
Для extfs_helper=ufoo плагин ищет исполняемый файл ufoo в таком порядке:
${XDG_DATA_HOME:-$HOME/.local/share}/mc6/extfs.d/- системный каталог
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 сможет работать с ней.
Для Ctrl+PgDn правило magic.ini не требуется. Чтобы .foo открывался через
arcmc также по Enter, добавьте пользовательское правило:
[arcmc.foo]
Regex=\\.foo$
RegexIgnoreCase=true
Open=%plugin{arcmc:open}Не добавляйте правило, если Enter должен по-прежнему вызывать viewer или другой обработчик.
Поддержка 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.