Все макрокоманды хранятся в ветке реестра [HKEY_CURRENT_USER\Software\Far\[Users\USERNAME\]KeyMacros]
в текстовом виде.
Макрокоманды делятся на 16 областей действий (см. Области действия) и 2 области для хранения глобальных переменных и констант. Имя области соответствует ветке реестра:
| Область | Назначение |
|---|---|
| "Shell" | Файловые панели |
| "Viewer" | Внутренняя программа просмотра |
| "Editor" | Редактор |
| "Dialog" | Диалоги |
| "Search" | Быстрый поиск в панелях |
| "Disks" | Меню выбора дисков |
| "MainMenu" | Основное меню |
| "Menu" | Прочие меню |
| "Help" | Система помощи |
| "Info" | Информационная панель |
| "QView" | Панель быстрого просмотра |
| "Tree" | Панель дерева папок |
| "FindFolder" | Панель поиска папок |
| "UserMenu" | Пользовательское меню |
| "Other" | Режим копирования текста с экрана |
| "Common" | Макросы из этой области работают везде. FAR просматривает эту область последней. |
| "Vars" | Область для глобальных переменных, которые FAR считывает при старте. Переменные могут быть двух типов - строковые (типа REG_SZ) и числовые (типа REG_QWORD). В эту область можно писать с помощью функции msave() |
| "Consts" | Область для глобальных констант, которые FAR считывает при старте. Константы могут быть двух типов - строковые (типа REG_SZ) и числовые (типа REG_QWORD). |
В областях на каждую макрокоманду в реестре заводится отдельная ветвь с именем назначенной клавиши. Макрокоманда описывается определенным набором значений:
| Имя | Тип | Default | Описание |
|---|---|---|---|
| Sequence | REG_SZ REG_MULTI_SZ |
Последовательность клавиш. | |
| DisableOutput | REG_DWORD | 0 | Запретить на время выполнения вывод на экран. При записи нового макроса значение этого параметра выставляется в 1 (запретить вывод на экран). Если параметр отсутствует, то вывод на экран во время исполнения макроса разрешен. |
| RunAfterFARStart | REG_DWORD | 0 | Выполнять после запуска FAR. Флаг актуален только для макросов, стартующих в области Shell. |
| EmptyCommandLine | REG_DWORD | 0 | Выполнять, только если командная строка пуста |
| NotEmptyCommandLine | REG_DWORD | 0 | Выполнять, только если командная строка не пуста |
| NoFilePanels | REG_DWORD | 0 | Не выполнять для файловой панели |
| NoFilePPanels | REG_DWORD | 0 | Не выполнять если пассивная панель - файловая |
| NoPluginPanels | REG_DWORD | 0 | Не выполнять для плагиновой панели |
| NoPluginPPanels | REG_DWORD | 0 | Не выполнять если пассивная панель - плагиновая |
| NoFolders | REG_DWORD | 0 | Не выполнять если текущий элемент - папка |
| NoPFolders | REG_DWORD | 0 | Не выполнять если текущий элемент - папка (пассивная панель) |
| NoFiles | REG_DWORD | 0 | Не выполнять если текущий элемент - файл |
| NoPFiles | REG_DWORD | 0 | Не выполнять если текущий элемент - файл (пассивная панель) |
| Selection | REG_DWORD | 0 | Выполнять, только если на панели есть отмеченные файлы/папки |
| PSelection | REG_DWORD | 0 | Выполнять, только если на панели есть отмеченные файлы/папки (пассивная панель) |
| NoSelection | REG_DWORD | 0 | Выполнять, если нет отмеченных файлов/папок (пассивная панель) |
| NoPSelection | REG_DWORD | 0 | Выполнять, если нет отмеченных файлов/папок (пассивная панель) |
| EVSelection | REG_DWORD | 0 | Выполнять, если отмечен блок в редакторе, программе просмотра, в строках ввода в диалогах. |
| NoEVSelection | REG_DWORD | 0 | Выполнять, если не отмечен блок в редакторе, программе просмотра, в строках ввода в диалогах. |
| NoSendKeysToPlugins | REG_DWORD | 0 | Специальный режим: нажимаемые клавиши при записи и воспроизведении не будут передаваться плагинам. |
| Description | REG_SZ | Комментарий (не используется) |
Обязательным является параметр "Sequence", остальные могут отсутствовать и принимать значение по умолчанию.
Последовательность "Sequence" содержит строковое представление макрокоманды. Каждая клавиша имеет свой строковый эквивалент, разделителем клавиш является пробел или табуляция.
При старте FAR компилирует последовательность "Sequence" во внутренний байткод. Если в процессе компиляции обнаружена ошибка, то макрос "отбрасывается"
Перед исполнением макроса FAR проверяет условия запуска в следующей последовательности: