Следующий: Панели инструментов, Предыдущий: Пример меню, Вверх: Сопоставления клавиш меню   [Оглавление][Указатель]


23.18.5 Панель меню

Emacs обычно отображает панель меню в верхней части каждого фрейма. См. Панели меню в Руководстве GNU Emacs. Элементы панели меню являются подкомандами фиктивной функции-клавиши MENU-BAR, как определено в активных сопоставлениях клавиш.

Чтобы добавить элемент в панель меню, придумайте свою фиктивную функцию-клавишу (назовем ее key) и создайте привязку для последовательности клавиш [menu-bar key]. Чаще всего эта привязка является сопоставлением клавиш меню, то есть нажатие кнопки на элементе панели меню приводит к другому меню.

Если более одного активного сопоставления клавиш определяет одну и ту же фиктивную функцию-клавишу для панели меню, элемент отображается только один раз. Если пользователь нажмет на этот элемент панели меню, откроется одно объединенное меню, содержащее все подкоманды этого элемента — глобальные подкоманды, локальные подкоманды и подкоманды режима.

Переменная overriding-local-map обычно игнорируется при определении содержимого панели меню. То есть, панель меню вычисляется на основе сопоставлений клавиш, которые были бы активны, если бы overriding-local-map был равен nil. См. Активные сопоставления клавиш.

Вот пример настройки элемента панели меню:

;; Создайте сопоставление клавиш меню (с строкой подсказки)
;; и сделайте его определением элемента панели меню.
(define-key global-map [menu-bar words]
  (cons "Words" (make-sparse-keymap "Words")))

;; Определите конкретные подкоманды в этом меню.
(define-key global-map
  [menu-bar words forward]
  '("Forward word" . forward-word))
(define-key global-map
  [menu-bar words backward]
  '("Backward word" . backward-word))

Локальное сопоставление клавиш может отменить элемент панели меню, созданный глобальным сопоставлением клавиш, переопределив ту же фиктивную функцию-клавишу значением undefined. Например, так Dired подавляет элемент панели меню «Edit»:

(define-key dired-mode-map [menu-bar edit] 'undefined)

Здесь edit — это символ, созданный фиктивной функцией-клавишей, он используется глобальным сопоставлением клавиш для элемента панели меню «Edit». Основная причина подавления глобального элемента панели меню — это освобождение места для элементов, специфичных для режима.

Переменная: menu-bar-final-items ¶

Обычно панель меню отображает глобальные элементы, за которыми следуют элементы, определенные локальными сопоставлениями клавиш.

Эта переменная содержит список фиктивных функций-клавиш для элементов, которые следует отображать в конце панели меню, а не в обычной последовательности. Значение по умолчанию — (help-menu); таким образом, элемент меню «Help» обычно появляется в конце панели меню, после локальных элементов меню.

Переменная: menu-bar-update-hook ¶

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

Рядом с каждым элементом панели меню Emacs отображает привязку клавиш, которая выполняет ту же команду (если такая привязка клавиш существует). Это служит удобной подсказкой для пользователей, не знающих привязку клавиш. Если у команды есть несколько привязок, Emacs обычно отображает первую из найденных. Вы можете указать одну конкретную привязку клавиш, присвоив команде свойство символа :advertised-binding. См. Подстановка привязок клавиш в документации.


Следующий: Панели инструментов, Предыдущий: Пример меню, Вверх: Сопоставления клавиш меню   [Оглавление][Указатель]