Следующая макрос предоставляет удобный способ определения выпадающих меню и/или меню панели.
Этот макрос определяет выпадающее меню и/или подменю панели, содержимое которого задается menu.
Если symbol не равен nil, то это должен быть символ;
затем этот макрос определяет symbol как функцию для вызова меню
(см. Выпадающие меню), с doc
как строкой документации. Он также определяет symbol как переменную,
значение которой — это меню. symbol не должен быть заключен в кавычки.
Независимо от значения symbol, если maps — это сопоставление клавиш, меню добавляется в это сопоставление как верхнеуровневое меню для панели меню (см. Панель меню). Оно также может быть списком сопоставлений клавиш, в этом случае меню добавляется отдельно в каждое из этих сопоставлений.
Первый элемент menu должен быть строкой, которая служит меткой меню. За ним может следовать любое количество следующих пар ключевых аргументов:
:filter functionfunction должен быть функцией, которая, будучи вызвана с одним аргументом — списком других элементов меню — возвращает фактические элементы, которые будут отображаться в меню.
:visible includeinclude — это выражение; если оно оценивается в nil,
меню становится невидимым. :included является псевдонимом для
:visible.
:active enableenable — это выражение; если оно оценивается в nil,
меню не может быть выбрано. :enable является псевдонимом для
:active.
Оставшиеся элементы в menu — это элементы меню.
Элемент меню может быть вектором из трех элементов: [name
callback enable]. name — это имя
элемента меню (строка). callback — это команда для выполнения или
выражение для вычисления, когда элемент выбран. enable — это
выражение; если оно оценивается в nil, элемент отключен для
выбора.
Альтернативно, элемент меню может иметь вид:
[ name callback [ keyword arg ]... ]
где name и callback имеют те же значения, что и выше, а каждая необязательная пара keyword и arg должна быть одной из следующих:
:keys keyskeys — это строка, отображаемая как эквивалент клавиатуры
для элемента меню. Обычно это не требуется, так как эквиваленты клавиатуры
вычисляются автоматически. keys расширяется с помощью
substitute-command-keys перед отображением (см. Подстановка привязок клавиш в документации).
:key-sequence keyskeys — это подсказка, указывающая, какую последовательность клавиш отобразить как эквивалент клавиатуры, в случае если команда связана с несколькими последовательностями клавиш. Это не имеет эффекта, если keys не связана с той же командой, что и этот элемент меню.
:active enableenable — это выражение; если оно оценивается в nil,
элемент становится невыбираемым. :enable является псевдонимом для
:active.
:visible includeinclude — это выражение; если оно оценивается в nil,
элемент становится невидимым. :included является псевдонимом для
:visible.
:label formform — это выражение, которое оценивается для получения значения, служащего меткой элемента меню (по умолчанию это name).
:suffix formform — это выражение, которое динамически оценивается, и его значение конкатенируется с меткой элемента меню.
:style stylestyle — это символ, описывающий тип элемента меню; это должно быть
toggle (флажок), или radio (радиокнопка), или
что-либо еще (что означает обычный элемент меню).
:selected selectedselected — это выражение; флажок или радиокнопка выбирается,
когда значение выражения не равно nil.
:help helphelp — это строка, описывающая элемент меню.
Альтернативно, элемент меню может быть строкой. Тогда эта строка появляется в меню как невыбираемый текст. Строка, состоящая из дефисов, отображается как разделитель (см. Разделители меню).
Альтернативно, элемент меню может быть списком с тем же форматом, что и menu. Это подменю.
Вот пример использования easy-menu-define для определения меню,
похожего на то, что определено в примере в Панель меню:
(easy-menu-define words-menu global-map
"Меню для команд навигации по словам."
'("Слова"
["Вперед по слову" forward-word]
["Назад по слову" backward-word]))