Технические подробности

Хранение макросов

Все макрокоманды хранятся в ветке реестра [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 проверяет условия запуска в следующей последовательности:

  1. NoSendKeysToPlugins
  2. EmptyCommandLine + NotEmptyCommandLine
  3. NoFilePanels + NoPluginPanels
  4. NoFilePPanels + NoPluginPPanels
  5. NoFolders + NoFiles
  6. NoPFolders + NoPFiles
  7. Selection + NoSelection (если не в Viewer, Editor и Dialog)
  8. PSelection + NoPSelection (если не в Viewer, Editor и Dialog)
  9. EVSelection + NoEVSelection (если в Viewer, Editor и Dialog)
Смотрите также:
Общие сведения, Работа с макросами, Макроязык, Примеры