Spec-Zone.ru › Elisp

Префиксные клавиши

Префиксная клавиша — это последовательность клавиш, привязка которой — это карта ключей. Карта ключей определяет, что делать с последовательностями клавиш, расширяющими префиксную клавишу. Например, C-x — это префиксная клавиша, и она использует карту ключей, которая также хранится в переменной ctl-x-map. Эта карта ключей определяет привязки для последовательностей клавиш, начинающихся с C-x.

Некоторые стандартные префиксные клавиши Emacs используют карты ключей, которые также находятся в переменных Lisp:

  • esc-map — это глобальная карта ключей для префиксной клавиши ESC. Таким образом, глобальные определения всех метасимволов фактически находятся здесь. Эта карта также является определением функции ESC-prefix.
  • help-map — это глобальная карта ключей для префиксной клавиши C-h.
  • mode-specific-map — это глобальная карта ключей для префиксной клавиши C-c. Эта карта фактически глобальная, а не зависящая от режима, но её имя предоставляет полезную информацию о C-c в выводе C-h b (display-bindings), поскольку основное использование этой префиксной клавиши — для привязок, зависящих от режима.
  • ctl-x-map — это глобальная карта ключей, используемая для префиксной клавиши C-x. Эта карта находится через ячейку функции символа Control-X-prefix.
  • mule-keymap — это глобальная карта ключей, используемая для префиксной клавиши C-x RET.
  • ctl-x-4-map — это глобальная карта ключей, используемая для префиксной клавиши C-x 4.
  • ctl-x-5-map — это глобальная карта ключей, используемая для префиксной клавиши C-x 5.
  • 2C-mode-map — это глобальная карта ключей, используемая для префиксной клавиши C-x 6.
  • tab-prefix-map — это глобальная карта ключей, используемая для префиксной клавиши C-x t.
  • vc-prefix-map — это глобальная карта ключей, используемая для префиксной клавиши C-x v.
  • goto-map — это глобальная карта ключей, используемая для префиксной клавиши M-g.
  • search-map — это глобальная карта ключей, используемая для префиксной клавиши M-s.
  • Другие префиксные клавиши Emacs — это C-x @, C-x a i, C-x ESC и ESC ESC. Они используют карты ключей без специальных имён.

Привязка карты ключей префиксной клавиши используется для поиска события, следующего за префиксной клавишей. (Это может быть символ, чьё определение функции — карта ключей. Эффект тот же, но символ служит именем префиксной клавиши.) Таким образом, привязка C-x — это символ Control-X-prefix, чья ячейка функции содержит карту ключей для команд C-x. (Такая же карта ключей также является значением ctl-x-map.)

Определения префиксных клавиш могут появляться в любой активной карте ключей. Определения C-c, C-x, C-h и ESC как префиксных клавиш появляются в глобальной карте, поэтому эти префиксные клавиши всегда доступны. Основные и дополнительные режимы могут переопределять клавишу как префикс, поместив определение префиксной клавиши для неё в локальную карту или карту дополнительного режима. См. Активные карты ключей.

Если клавиша определена как префикс в нескольких активных картах, то её различные определения фактически объединяются: команды, определённые в картах дополнительных режимов, появляются первыми, затем — те, что в определении префикса локальной карты, а затем — те, что из глобальной карты.

В следующем примере мы делаем C-p префиксной клавишей в локальной карте ключей таким образом, что C-p идентична C-x. Тогда привязка для C-p C-f — это функция find-file, точно так же, как и для C-x C-f. Последовательность клавиш C-p 6 не найдена ни в одной активной карте ключей.

(use-local-map (make-sparse-keymap))
    ⇒ nil
(local-set-key "\C-p" ctl-x-map)
    ⇒ nil
(key-binding "\C-p\C-f")
    ⇒ find-file
(key-binding "\C-p6")
    ⇒ nil
Функция: define-prefix-command символ &необязательно mapvar prompt

Эта функция готовит символ для использования в качестве привязки префиксной клавиши: она создаёт разреженную карту ключей и сохраняет её как определение функции символ. Последующая привязка последовательности клавиш к символ превратит эту последовательность в префиксную клавишу. Возвращаемое значение — symbol.

Эта функция также устанавливает символ как переменную со значением карты ключей. Но если mapvar не nil, она устанавливает mapvar как переменную вместо этого.

Если prompt не nil, оно становится строкой общего запроса для карты ключей. Строка запроса должна быть указана для карт ключей меню (см. Определение меню).

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/Prefix-Keys.html

Spec-Zone.ru

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