Skip to content

Макросы

Макрос — это именованная последовательность действий с файлами: создать папку, переместить в неё выделение, снабдить остальное метками, — которую можно запустить снова одним щелчком. Это не язык сценариев: в нём нет условий и нет циклов, и так задумано. Макрос — это список, который можно прочитать, а прочитать его нужно суметь прежде, чем вы его одобрите.

Всё, что делает макрос, идёт через тот же механизм, которым пользуется ассистент, поэтому макрос не может сделать ничего, что вы не разрешили, каждый его шаг попадает в журнал действий, а шаг, который можно отменить, отменяемым и остаётся.

Одно окно: Конфигурация ▸ Макросы…

Всё, что связано с макросами, спрятано за этим единственным пунктом: список, два способа создать макрос и путь к файлу. Больше в меню выбирать нечего.

Самый быстрый путь: записать макрос

Писать макрос с нуля не нужно — и выяснять потом, где он начался, тоже.

  1. Конфигурация ▸ Макросы… ▸ Записать макрос…. Окно отходит в сторону, и появляется маленькая панель: она сообщает, что идёт запись, и считает шаги по ходу дела.
  2. Выполните работу один раз — копирование, перемещение, переименование, удаление, создание папок и файлов. Работайте как обычно; запись не мешает.
  3. Остановить и сохранить….
  4. Шаги возвращаются уже отмеченными. Снимите отметку со всего, что лишь готовило почву, дайте макросу имя и оставьте включённым Также добавить кнопку для него.
  5. Отметьте Следовать за панелями вместо именно этих файлов, если макрос в следующий раз должен работать с тем, что будет тогда выделено. Строки меняются при отметке, так что вы видите, что сохраняете.

Сохранить макрос — и кнопка уже в панели. Это весь цикл.

Отбросить запись выбрасывает запись и ничего не сохраняет. До нажатия «Записать» не записывается ничего, после остановки — тоже: ради этого оба конца и нужны.

Запись переживает перезапуск. Если Peach Commander завершится, пока она идёт — вы вышли или произошёл сбой, — она вернётся вместе с ним, о чём он и скажет, а вы продолжите или отбросите её.

Если удобнее иметь это на клавише или кнопке, команда называется cm_MacroRecord: она начинает запись и останавливает идущую.

Другой путь: из того, что уже произошло

Из последних действий… в том же окне строит макрос из последнего происшедшего вместо новой записи — удобно, когда работу вы только что сделали и лишь потом подумали о макросе.

Лист «Макрос из последних действий» с только что сделанным в виде отмечаемых шагов То, что уже произошло, предложено как шаги нового макроса.

Список содержит и то, и другое: что сделали вы в панелях (F5, F6, F7, F8 и переименование) и что сделал ассистент или другой макрос. Каждая строка говорит, которое из двух, — потому что после сеанса с обоими одни и те же два файла могут оказаться в каждом. Здесь строки изначально не отмечены: «всё, что я делал последние полчаса» — редко тот макрос, который имеется в виду.

Этому пути нужна история. То, что вы делаете вручную, считывается из глобальной истории; если вы её выключили (Настройки ▸ Разное ▸ Записывать глобальную историю), в этом списке нет ничего вашего — и он об этом говорит. Записать макрос… от неё не зависит.

Что не предлагается. Упаковку архива и всё остальное, что программа удерживает только по имени, нельзя превратить в шаг — для этого нет формы. Такие строки видны серыми вместе с причиной, а не отсутствуют, чтобы список из пяти, предлагающий три, не читался так, будто два пропущены. А если вы не попросите иначе, пути — те, что действительно отработали: записанный макрос повторяет ту копию, а не «копию такого рода». Откройте его в редакторе и поставьте %S или %T там, где он должен следовать за панелями.

Следовать за панелями — это и есть способ попросить иначе. Файлы, пришедшие все из одной папки, становятся выделением; папка, являющаяся одной из двух панелей, становится этой панелью, а папка внутри сохраняет свой хвост — из записанного «перенести эти четыре счёта в Документы/2026-08» получается «перенести выделенное в 2026-08 с другой стороны», и завтра это работает в двух других папках. То, что не лежит ни под одной из панелей, остаётся тем путём, каким является, — его не во что свернуть. Эту возможность предлагают только тогда, когда она что-то изменила бы.

Примеры, поставляемые с программой

Когда вы впервые открываете Редактировать файл…, файл создаётся с восемью проработанными примерами. Это обычные макросы — измените их или удалите те, что вам не нужны, — и каждый несёт комментарий, который говорит, что он делает и что в нём менять:

Макрос Что он делает
Open today's folder Создаёт в активной панели сегодняшнюю папку с датой и входит в неё. Завтра пригодится снова.
File the selection into a dated folder Выбирает все PDF, создаёт напротив папку год-месяц и переносит их туда.
Copy the selection to a dated backup folder Копирует то, что выбрали вы, в датированную папку на другой стороне.
Move the pictures into an Images subfolder Одна маска, одна подпапка, в папке, в которой вы и так находитесь.
Merge the CSV files into one and open it Показывает, как шаг использует то, что произвёл предыдущий шаг.
File the selection into a folder you name При запуске спрашивает у вас папку.
Mark the file under the cursor as reviewed Помечает его меткой и датирует его комментарий — один файл, а не выделение.
Put the temporary files in the Trash Удаляющий макрос, и именно тот, на котором стоит один раз увидеть вопрос о правах.

Каждый из них становится командой, так что любой можно положить на кнопку или на клавишу, ничего не написав.

Управление ими

Конфигурация ▸ Макросы… — это список: как называется каждый макрос, как называется его команда, сколько в нём шагов и что запросит проверка прав, — так что «этот удаляет» видно до того, как вы повесите его на клавишу. Отсюда можно запускать, переименовывать, дублировать, менять порядок, удалять, экспортировать и импортировать. При наведении на строку видны её шаги.

Запустить — способ опробовать только что записанный макрос, не закрывая сначала окно и не разыскивая команду. Он проходит тот же план и то же подтверждение, что и любой другой запуск: у этого окна нет собственных прав.

Экспортировать… записывает выбранный макрос в отдельный файл, а Импортировать… добавляет макросы из файлов, которые вам прислали, — ради этого и нужен файл на макрос. Импорт никогда не заменяет: макрос, чей идентификатор занят, получает свободный (пришедший backup рядом с вашим станет backup-2), и вам сообщают, с какими идентификаторами оказались новые: кнопка, которую вы сделаете, должна назвать нужный.

Окно «Управление макросами» с именем команды, числом шагов и разрешением каждого макроса Как называется каждый макрос, чем он запускается и на что попросит разрешение.

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

При удалении предлагается забрать и кнопки, и это стоит знать, даже если вы никогда не откроете это окно: макрос, убранный вручную, оставляет после себя кнопку и клавишу, и ни то, ни другое уже ничего не делает — программа теперь говорит, что макроса нет, вместо того чтобы молчать, но кнопка остаётся вашей заботой. Клавишу или пункт меню нужно убрать там, где они были заданы.

Шаги здесь не редактируются. Редактировать файл… передаёт это редактору по той же причине, по которой здесь нет формы: шаг — это имя инструмента с его аргументами, а это и есть JSON.

Правка макросов вручную

Редактировать файл… открывает собственный файл выбранного макроса — macros/<id>.json в вашей папке настроек, созданный в первый раз с примерами выше. Без выделения в панели показывается сама папка, где F3 читает один, а F4 редактирует один. Макрос — это список шагов, и каждый шаг называет инструмент и его аргументы:

{
  "id": "stage-by-month",
  "title": "File the selection into a dated folder",
  "icon": "calendar",
  "steps": [
    { "tool": "set_selection", "arguments": { "mask": "*.pdf" } },
    { "tool": "make_directory", "arguments": { "path": "%T/%{date:yyyy-MM}" } },
    { "tool": "move", "arguments": { "sources": "%S", "destination": "%T/%{date:yyyy-MM}" } }
  ]
}

Сохранение сразу перезагружает макросы — и говорит, если что-то не так: опечатка в имени инструмента, отсутствующий обязательный аргумент, два макроса с одним id. Макрос с ошибкой не выполняется и не попадает ни на одну кнопку; вы узнаёте, какой это и что с ним не так, пока редактор ещё открыт.

Какие инструменты есть и что они принимают, показывает Конфигурация ▸ Обозреватель команд…, или спросите ассистента про list_macros.

Подстановки

Одиночные буквы — те же, что использует панель кнопок и меню «Пуск»: если вы уже делали кнопку, здесь нечему учиться заново.

Подстановка Значит
%P Папка активной панели
%T Папка другой панели
%N Файл под курсором
%S Выделенные файлы — список, а именно его и принимают copy, move и move_to_trash
%{date:yyyy-MM} Дата запуска макроса в этом формате
%{1.destination} Одно именованное значение из результата шага 1 — здесь файл, который записал merge_files
%{1} Весь результат шага 1, когда этот шаг напрямую дал путь или список путей
%{ask:Folder name} Спрашивает вас, когда макрос запускается. %{ask:Folder name=Archive} заранее заполняет поле значением Archive

Фигурные скобки нужны для добавлений, потому что буквы уже заняты: %M во всей остальной программе означает «имя под курсором в другой панели», так что месяц так записать было нельзя.

Для результатов шагов используйте именованную форму. Большинство инструментов сообщает несколько значений вместо одного — merge_files сообщает, куда записал, сколько файлов объединил и сколько получилось строк, — поэтому %{2.destination} является обычной записью, а голый %{2} работает только для инструмента, возвращающего единственный путь. Имени, которого нет или которое не является путём, макрос не угадывает, а останавливается.

% в имени файла — это %. Ничто из того, что производит шаг, и ни одно имя из панели не читается затем как подстановка — файл с именем 50%Netto.pdf проходит сквозь макросы неизменным. Чтобы получить буквальный % в шаблоне, который пишете вы, удвойте его: %%.

Спросить значение

%{ask:…} — это то, как макрос принимает нечто, чего не может знать заранее: самый распространённый макрос вообще — «перенести выделенное в папку, которую я назову», и без этого папку пришлось бы жёстко вписать в файл.

Вас спрашивают до того, как появится план, и ответы уже в нём: строки говорят «Перенести выделенное в «Счета»», а не «в то, что вы сейчас наберёте». Отменить вопрос — отменить макрос; ничего не было предложено, а тем более выполнено.

Один и тот же вопрос, написанный дважды, задаётся один раз и используется в обоих местах, так что два шага, называющие одну папку, не могут разойтись. То, что идёт после первого =, — это то, с чего поле начинается. Формулировка ваша: она показывается ровно так, как вы её написали, на том языке, на котором написали.

Ответ — это значение, никогда не шаблон: набрав 50%Netto, вы получите папку с именем 50%Netto.

Макрос, который спрашивает, внешний агент через MCP запустить не может — там некого спрашивать, а молча взять значения по умолчанию значило бы ответить за вас. Он отклоняется и говорит об этом.

%S — единственное место, где макрос отличается от кнопки: на кнопке выделение становится списком слов для командной строки, здесь — списком полных путей, который принимают файловые инструменты.

Шаг, у которого %S или %{1} вышел пустым, останавливает макрос, а не выполняется ни над чем. move без файлов — не уменьшенный move, а запрос, который уже ничего не говорит, и сообщить об успехе было бы ложью.

Запуск макроса

Каждый макрос становится командой с именем mc_<id> и поэтому сам появляется в:

  • Конфигурация ▸ Обозреватель команд…
  • Конфигурация ▸ Редактировать сочетания клавиш… — назначьте его на клавишу
  • Выборе команд в редакторе панели кнопок
  • Вашем файле меню .mnu и usercmd.ini, если вы ими пользуетесь
  • Ассистенте, который может запустить его по имени

Прежде чем макрос, который что-то меняет, будет выполнен, он покажет свои шаги списком и подождёт. Ненужный шаг можно вычеркнуть; что останется — то и выполнится. Макрос, который только читает, выполняется без вопросов. Вычеркнутый шаг уносит с собой шаги, которые от него зависят — макрос это последовательность, и шаг, наполняющий папку, не может выполниться без шага, который её создаёт: эти строки выключаются сами и становятся серыми. Верните шаг — и они вернутся, кроме тех, что вы вычеркнули сами: те останутся вычеркнутыми.

Диалог подтверждения макроса: каждый шаг — флажок с именами файлов Шаги, разрешённые относительно ваших панелей — каждый можно вычеркнуть.

Всё, что можно распознать как неверное ещё до старта — инструмент, которого нет, отсутствующий аргумент, шаг, который запустил бы другой макрос, — останавливает макрос до первого шага, а не после третьего. Если шаг не удаётся уже на ходу, макрос останавливается там, вместо того чтобы продолжать: шаг второй обычно предполагает, что шаг первый состоялся, а переносить файлы в папку, которая не была создана, — не частичный успех. Отчёт называет шаг, говорит, что пошло не так, и сколько шагов уже было выполнено; каждый из них есть в журнале действий, со своим путём назад там, где он есть.

Что макросу позволено

Макрос оценивается по самому требовательному, что в нём есть. Макрос, шаги которого только читают, считается чтением; тот, что заканчивается безвозвратным удалением, охраняется как безвозвратное удаление — прежде чем что-либо запустится, а не через четыре шага.

Шаг, который выполняет команду, оценивается по тому, что делает эта команда, а не по тому, что это команда, — макрос, выполняющий cm_DeleteReal, следовательно, является удаляющим макросом и показывается вам как таковой. Макрос не может выполнить другой макрос, ни в одной из двух записей.

Ничего лишнего не предоставлять — поведение по умолчанию. Если в макросе есть шаг, которого ваши разрешения не допускают — команда оболочки, сценарий, — весь макрос отклоняется с указанием причины, и ничего не происходит.

Отмена

Каждый шаг записывается отдельно, поэтому отмена после макроса возвращает его последний шаг, а не весь макрос. Отмены всего макроса нет, потому что у нескольких инструментов вообще нет обратного действия, и кнопка, предлагающая её, о них бы лгала.

Где всё сохраняется

  • Ваши макросы лежат в macros/ в папке настроек, по одному как <id>.json — обычные файлы, которые можно сравнивать, держать вместе с dotfiles и кому-то отправить. macros.json из прежней версии при первом запуске переносится и переименовывается в macros.json.migrated; больше его никто не читает.
  • Кнопки, добавленные макросом, — обычные записи панели кнопок в default.bar, поэтому убрать одну — то же, что убрать любую другую кнопку.

Дальнейшие шаги