Простое меню
Следующий макрос предоставляет удобный способ определения всплывающих меню и/или меню в строке меню.
-
Этот макрос определяет всплывающее меню и/или подменю в строке меню, содержимое которого задаётся параметром menu.
Если symbol не-
nil, он должен быть символом; тогда этот макрос определяет symbol как функцию для открытия меню (см. Всплывающие меню), используя doc в качестве строки документации. Он также определяет symbol как переменную, значением которой является меню. symbol не следует заключать в кавычки.Независимо от значения symbol, если maps является картой клавиш, меню добавляется в эту карту клавиш как меню верхнего уровня в строке меню (см. Строка меню). Также это может быть список карт клавиш — в таком случае меню отдельно добавляется в каждую из них.
Первый элемент menu должен быть строкой, которая служит меткой меню. За ней может следовать любое количество следующих пар «ключевое слово — аргумент»:
:filter function-
function должна быть функцией, которая при вызове с одним аргументом — списком остальных элементов меню — возвращает фактические элементы, отображаемые в меню.
:visible include-
include — выражение; если его результатом является
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 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 helphelp — строка с описанием пункта меню.
Кроме того, пункт меню может быть строкой. В этом случае строка отображается в меню как текст, который нельзя выбрать. Строка, состоящая из дефисов, отображается как разделитель (см. Разделители меню).
Кроме того, пункт меню может быть списком того же формата, что и menu. Это подменю.
Вот пример использования easy-menu-define для определения меню, похожего на меню из примера в разделе Строка меню:
(easy-menu-define words-menu global-map
"Menu for word navigation commands."
'("Words"
["Forward word" forward-word]
["Backward word" backward-word]))
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Easy-Menu.html