Выпадающие меню
Программа Lisp может вывести меню, чтобы пользователь мог выбрать вариант с помощью мыши. На текстовом терминале, если мышь недоступна, пользователь может выбрать вариант с помощью клавиш управления курсором — C-n, C-p или клавиш со стрелками вверх и вниз.
Эта функция отображает выпадающее меню и возвращает указание о том, какой выбор сделал пользователь.
Аргумент position определяет, где на экране расположить верхний левый угол меню. Он может быть либо событием нажатия кнопки мыши (что указывает на размещение меню там, где пользователь нажал кнопку), либо списком такого вида:
((xoffset yoffset) window)
где xoffset и yoffset — координаты, измеряемые в пикселях, отсчитываемые от левого верхнего угла window. window может быть окном или фреймом.
Если position равен
t, это означает использование текущей позиции мыши (или левого верхнего угла фрейма, если мышь недоступна на текстовом терминале). Если position равенnil, это означает предварительное вычисление эквивалентов сочетаний клавиш для ключевых наборов, указанных в menu, без фактического отображения или вызова меню.Аргумент menu указывает, что отображать в меню. Он может быть ключевым набором или списком ключевых наборов (см. Ключевые наборы меню). В этом случае возвращаемое значение — список событий, соответствующих выбору пользователя. Этот список содержит более одного элемента, если выбор произошел в подменю. (Обратите внимание, что
x-popup-menuфактически не выполняет команду, связанную с этой последовательностью событий.) На текстовых терминалах и инструментариях, поддерживающих заголовки меню, заголовок берется из строки подсказки menu, если menu является ключевым набором, или из строки подсказки первого ключевого набора в menu, если это список ключевых наборов (см. Определение меню).В качестве альтернативы, menu может иметь следующий вид:
(title pane1 pane2...)
где каждый блок — список вида
(title item1 item2...)
Каждый item должен быть ячейкой конс,
(line . value), где line — строка, а value — значение, которое возвращается, если выбранная line. В отличие от ключевого набора меню,nilзначение value не делает элемент меню невыбираемым. В качестве альтернативы, каждый item может быть строкой вместо ячейки конс; это создает невыбираемый элемент меню.Если пользователь закрывает меню, не сделав допустимого выбора, например, нажав мышью вне допустимого выбора или нажав C-g, то это обычно приводит к выходу, и
x-popup-menuне возвращается. Но если position является событием нажатия кнопки мыши (указывающим, что пользователь вызвал меню с помощью мыши), выход не происходит, иx-popup-menuвозвращаетnil.
Примечание по использованию: Не используйте x-popup-menu для отображения меню, если вы можете выполнить задачу с префиксной клавишей, определенной с помощью ключевого набора меню. Если вы используете ключевой набор меню для реализации меню, C-h c и C-h a могут увидеть отдельные элементы в этом меню и предоставить помощь по ним. Если вместо этого вы реализуете меню, определив команду, которая вызывает x-popup-menu, средства помощи не могут узнать, что происходит внутри этой команды, поэтому они не могут предоставить помощь по элементам меню.
Механизм панели меню, позволяющий переключаться между подменю, перемещая курсор мыши, не может просматривать определение команды, чтобы увидеть, что она вызывает x-popup-menu. Поэтому, если вы попытаетесь реализовать подменю с использованием x-popup-menu, это не будет работать с панелью меню интегрированным способом. Вот почему все подменю панели меню реализуются с помощью ключевых наборов меню в родительском меню, а не с помощью x-popup-menu. См. Панель меню.
Если вам нужно, чтобы подменю панели меню имело изменяемое содержимое, вы по-прежнему должны использовать ключевой набор меню для его реализации. Чтобы изменить содержимое, добавьте функцию обработки в menu-bar-update-hook для обновления содержимого ключевого набора меню по мере необходимости.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Pop_002dUp-Menus.html