23.18.8 Easy Menu

Следующая макрос предоставляет удобный способ определения выпадающих меню и/или меню панели.

Макрос: easy-menu-define symbol maps doc menu

Этот макрос определяет выпадающее меню и/или подменю панели, содержимое которого задается menu.

Если symbol не равен nil, то это должен быть символ; затем этот макрос определяет symbol как функцию для вызова меню (см. Выпадающие меню), с doc как строкой документации. Он также определяет symbol как переменную, значение которой — это меню. symbol не должен быть заключен в кавычки.

Независимо от значения symbol, если maps — это сопоставление клавиш, меню добавляется в это сопоставление как верхнеуровневое меню для панели меню (см. Панель меню). Оно также может быть списком сопоставлений клавиш, в этом случае меню добавляется отдельно в каждое из этих сопоставлений.

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

:filter function

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

:visible include

include — это выражение; если оно оценивается в nil, меню становится невидимым. :included является псевдонимом для :visible.

:active enable

enable — это выражение; если оно оценивается в nil, меню не может быть выбрано. :enable является псевдонимом для :active.

Оставшиеся элементы в menu — это элементы меню.

Элемент меню может быть вектором из трех элементов: [name callback enable]. name — это имя элемента меню (строка). callback — это команда для выполнения или выражение для вычисления, когда элемент выбран. enable — это выражение; если оно оценивается в nil, элемент отключен для выбора.

Альтернативно, элемент меню может иметь вид:

   [ name callback [ keyword arg ]... ]

где name и callback имеют те же значения, что и выше, а каждая необязательная пара keyword и arg должна быть одной из следующих:

:keys keys

keys — это строка, отображаемая как эквивалент клавиатуры для элемента меню. Обычно это не требуется, так как эквиваленты клавиатуры вычисляются автоматически. keys расширяется с помощью substitute-command-keys перед отображением (см. Подстановка привязок клавиш в документации).

:key-sequence keys

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

:active enable

enable — это выражение; если оно оценивается в nil, элемент становится невыбираемым. :enable является псевдонимом для :active.

:visible include

include — это выражение; если оно оценивается в nil, элемент становится невидимым. :included является псевдонимом для :visible.

:label form

form — это выражение, которое оценивается для получения значения, служащего меткой элемента меню (по умолчанию это name).

:suffix form

form — это выражение, которое динамически оценивается, и его значение конкатенируется с меткой элемента меню.

:style style

style — это символ, описывающий тип элемента меню; это должно быть toggle (флажок), или radio (радиокнопка), или что-либо еще (что означает обычный элемент меню).

:selected selected

selected — это выражение; флажок или радиокнопка выбирается, когда значение выражения не равно nil.

:help help

help — это строка, описывающая элемент меню.

Альтернативно, элемент меню может быть строкой. Тогда эта строка появляется в меню как невыбираемый текст. Строка, состоящая из дефисов, отображается как разделитель (см. Разделители меню).

Альтернативно, элемент меню может быть списком с тем же форматом, что и menu. Это подменю.

Вот пример использования easy-menu-define для определения меню, похожего на то, что определено в примере в Панель меню:

(easy-menu-define words-menu global-map
  "Меню для команд навигации по словам."
  '("Слова"
     ["Вперед по слову" forward-word]
     ["Назад по слову" backward-word]))