Spec-Zone.ru › Elisp

Простое меню

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

Макрос: 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
  "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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API