Spec-Zone.ru › Elisp

Формат ключевых отображений

Каждое ключевое отображение — это список, у которого CAR — символ keymap. Остальные элементы списка определяют привязки клавиш к ключевому отображению. Символ, чьё определение функции является ключевым отображением, также является ключевым отображением. Используйте функцию keymapp (см. ниже), чтобы проверить, является ли объект ключевым отображением.

После символа keymap, которым начинается ключевое отображение, могут быть несколько типов элементов:

(type . binding)

Это задаёт одну привязку для событий типа type. Каждая обычная привязка применяется к событиям определённого типа события, который всегда является символом или знаком. См. Классификация событий. В этом типе привязки binding — это команда.

(type item-name . binding)

Это задаёт привязку, которая также является простым пунктом меню, отображающимся как item-name в меню. См. Простые пункты меню.

(type item-name help-string . binding)

Это простой пункт меню со строкой справки help-string.

(type menu-item . details)

Это задаёт привязку, которая также является расширенным пунктом меню. Это позволяет использовать другие функции. См. Расширенные пункты меню.

(t . binding)

Это задаёт стандартную привязку клавиш; любое событие, не связанное другими элементами ключевого отображения, получает binding в качестве своей привязки. Стандартные привязки позволяют ключевому отображению связывать все возможные типы событий без необходимости перечисления всех из них. Ключевое отображение со стандартной привязкой полностью маскирует любое ключевое отображение с более низким приоритетом, за исключением событий, явно привязанных к nil (см. ниже).

char-table

Если элемент ключевого отображения — таблица символов, она считается содержащей привязки для всех символьных событий без модификаторов (см. биты модификаторов): элемент с индексом c — привязка для символа c. Это компактный способ записи множества привязок. Ключевое отображение с такой таблицей символов называется полным ключевым отображением. Другие ключевые отображения называются разреженными ключевыми отображениями.

vector

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

string

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

(keymap …)

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

Когда привязка равна nil, она не является определением, но имеет приоритет над стандартной привязкой или привязкой в родительском ключевом отображении. С другой стороны, привязка nil не переопределяет ключевые отображения с более низким приоритетом; таким образом, если локальная карта задаёт привязку nil, Emacs использует привязку из глобальной карты.

Ключевые отображения не записывают непосредственно привязки для мета-символов. Вместо этого мета-символы рассматриваются для целей поиска ключей как последовательность из двух символов, первым из которых является ESC (или то, что в настоящее время является значением meta-prefix-char). Таким образом, клавиша M-a интерпретируется внутри как ESC a, и её глобальная привязка находится в слоте для a в esc-map (см. Префиксные клавиши).

Это преобразование применяется только к символам, а не к функциональным клавишам или другим событиям ввода; таким образом, M-end не имеет ничего общего с ESC end.

В качестве примера здесь представлено локальное ключевое отображение для режима Lisp, разреженное ключевое отображение. Оно определяет привязки для DEL, C-c C-z, C-M-q и C-M-x (фактическое значение также содержит привязку к меню, которая здесь опущена для краткости).

lisp-mode-map
⇒
(keymap
 (3 keymap
    ;; C-c C-z
    (26 . run-lisp))
 (27 keymap
     ;; C-M-x, treated as ESC C-x
     (24 . lisp-send-defun))
 ;; This part is inherited from lisp-mode-shared-map.
 keymap
 ;; DEL
 (127 . backward-delete-char-untabify)
 (27 keymap
     ;; C-M-q, treated as ESC C-q
     (17 . indent-sexp)))
Функция: keymapp объект

Эта функция возвращает t если объект является ключевым отображением, nil в противном случае. Более точно, эта функция проверяет список, у которого CAR — keymap, или символ, чьё определение функции удовлетворяет keymapp.

(keymapp '(keymap))
    ⇒ t
(fset 'foo '(keymap))
(keymapp 'foo)
    ⇒ t
(keymapp (current-global-map))
    ⇒ t

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/Format-of-Keymaps.html

Spec-Zone.ru

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