-
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создаёт архив из текущего или отмеченных элементов. Комбинацию можно изменить.
Долгие операции показывают прогресс, скорость и оставшееся время и допускают
отмену. При распаковке отбрасываются абсолютные пути и компоненты .., поэтому
элемент архива не может выйти за пределы выбранного каталога.
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
Поэтому 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.