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


23.18.4 Пример меню

Вот полный пример определения карты клавиш меню. Это определение подменю «Заменить» в меню «Редактирование» в строке меню, и оно использует расширенный формат элемента меню (см. Расширенные элементы меню). Сначала мы создаем карту клавиш и присваиваем ей имя:

(defvar menu-bar-replace-menu (make-sparse-keymap "Replace"))

Далее мы определяем элементы меню:

(define-key menu-bar-replace-menu [tags-repl-continue]
  '(menu-item "Continue Replace" multifile-continue
              :help "Продолжить операцию замены в тегированных файлах"))
(define-key menu-bar-replace-menu [tags-repl]
  '(menu-item "Replace in tagged files" tags-query-replace
              :help "Интерактивно заменить регулярное выражение во всех тегированных файлах"))
(define-key menu-bar-replace-menu [separator-replace-tags]
  '(menu-item "--"))
;; …

Обратите внимание на символы, для которых создаются привязки; они отображаются в квадратных скобках в определяемой последовательности клавиш. В некоторых случаях этот символ совпадает с именем команды; иногда он отличается. Эти символы рассматриваются как функциональные клавиши, но это не настоящие функциональные клавиши на клавиатуре. Они не влияют на функционирование самого меню, но они отображаются в области вывода, когда пользователь выбирает элемент из меню, и они появляются в выводе where-is и apropos.

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

Привязка, определение которой ("--"), является разделительной линией. Как и настоящий элемент меню, разделитель имеет символ клавиши, в данном случае separator-replace-tags. Если в одном меню есть два разделителя, они должны иметь два разных символа клавиш.

Вот как мы заставляем это меню отображаться как элемент в родительском меню:

(define-key menu-bar-edit-menu [replace]
  (list 'menu-item "Replace" menu-bar-replace-menu))

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

Если вы хотите привязать то же самое меню замены к клику мышью, вы можете сделать это следующим образом:

(define-key global-map [C-S-down-mouse-1]
   menu-bar-replace-menu)

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