Макроси
Макрос — це названа послідовність дій із файлами: створити теку, перемістити до неї виділене, позначити те, що залишилося, — яку можна запустити знову одним клацанням. Це не мова сценаріїв: у ній немає умов і немає циклів, і так задумано. Макрос — це список, який можна прочитати, а прочитати його треба вміти, перш ніж ви його схвалите.
Усе, що робить макрос, іде через той самий механізм, яким користується асистент, тож макрос не може зробити нічого, чого ви не дозволили, кожен його крок потрапляє до журналу дій, а крок, який можна скасувати, скасовним і залишається.
Одне вікно: Конфігурація ▸ Макроси…¶
Усе про макроси — за цим одним пунктом: їхній список, обидва способи створити макрос і шлях до файлу. Більше в меню нема з чого вибирати.
Найшвидший шлях: записати макрос¶
Писати макрос із нуля не треба — і з’ясовувати потім, де він почався, теж.
- Конфігурація ▸ Макроси… ▸ Записати макрос…. Вікно відходить убік, і з’являється маленька панель: вона повідомляє, що триває запис, і рахує кроки на ходу.
- Виконайте роботу один раз — копіювання, переміщення, перейменування, вилучення, створення тек і файлів. Працюйте як звично; запис не заважає.
- Зупинити й зберегти….
- Кроки повертаються вже позначеними. Зніміть позначку з усього, що лише готувало ґрунт, дайте макросу назву і залиште ввімкненим Також додати кнопку для нього.
- Позначте Слідувати за панелями замість саме цих файлів, якщо макрос наступного разу має працювати з тим, що буде тоді виділено. Рядки змінюються, коли ви позначаєте, тож ви бачите, що зберігаєте.
Зберегти макрос — і кнопка вже на панелі. Це весь цикл.
Відхилити запис викидає запис і нічого не зберігає. До натискання «Записати» не записується нічого, після зупинки — теж: саме для цього й потрібні обидва кінці.
Запис переживає перезапуск. Якщо 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, тому вилучити одну — те саме, що вилучити будь-яку іншу кнопку.
Наступні кроки¶
- Автоматизація (AppleScript і «Швидкі команди») — Керування Peach Commander зі сценарію та запуск власних сценаріїв як кроку макроса.
- Панель кнопок — Куди потрапляє кнопка, додана макросом.
- Клавіатура та скорочення — Призначення макроса на клавішу.