Spec-Zone.ru › Elisp

Управление активными картами клавиш

Переменная: global-map

Эта переменная содержит глобальную карту клавиш по умолчанию, которая сопоставляет ввод с клавиатуры Emacs командам. Обычно именно эта карта клавиш является глобальной. Глобальная карта клавиш по умолчанию — это полная карта клавиш, привязывающая self-insert-command ко всем печатным символам.

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

Функция: current-global-map

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

(current-global-map)
⇒ (keymap [set-mark-command beginning-of-line ...
            delete-backward-char])
Функция: current-local-map

Эта функция возвращает локальную карту клавиш текущего буфера или nil, если такой карты нет. В следующем примере карта клавиш буфера *scratch* (в режиме Lisp Interaction) представляет собой разреженную карту клавиш, в которой запись для ESC, кода ASCII 27, является другой разреженной картой клавиш.

(current-local-map)
⇒ (keymap
    (10 . eval-print-last-sexp)
    (9 . lisp-indent-line)
    (127 . backward-delete-char-untabify)
    (27 keymap
        (24 . eval-defun)
        (17 . indent-sexp)))

current-local-map возвращает ссылку на локальную карту клавиш, а не её копию; если применить к ней keymap-set или другие функции, локальные привязки будут изменены.

Функция: current-minor-mode-maps

Эта функция возвращает список карт клавиш включённых в данный момент второстепенных режимов.

Функция: use-global-map keymap

Эта функция делает keymap новой текущей глобальной картой клавиш. Она возвращает nil.

Глобальную карту клавиш изменяют крайне редко.

Функция: use-local-map keymap

Эта функция делает keymap новой локальной картой клавиш текущего буфера. Если keymap — это nil, у буфера нет локальной карты клавиш. use-local-map возвращает nil. Большинство команд основных режимов используют эту функцию.

Переменная: minor-mode-map-alist

Эта переменная представляет собой ассоциативный список, описывающий карты клавиш, которые могут быть активны или неактивны в зависимости от значений определённых переменных. Его элементы выглядят так:

(variable . keymap)

Карта клавиш keymap активна, когда variable имеет значение, отличное от nil. Обычно variable — это переменная, которая включает или отключает второстепенный режим. См. Карты клавиш и второстепенные режимы.

Обратите внимание, что элементы minor-mode-map-alist имеют не ту же структуру, что и элементы minor-mode-alist. Карта должна быть CDR элемента; список, в котором карта является вторым элементом, не подойдёт. CDR может быть картой клавиш (списком) или символом, определение функции которого является картой клавиш.

Если активны карты клавиш нескольких второстепенных режимов, приоритет имеет та, которая находится раньше в minor-mode-map-alist. Однако следует проектировать второстепенные режимы так, чтобы они не мешали друг другу. Если сделать это правильно, порядок не будет иметь значения.

Дополнительные сведения о второстепенных режимах см. в разделе Карты клавиш и второстепенные режимы. См. также minor-mode-key-binding (см. Функции поиска по клавишам).

Переменная: minor-mode-overriding-map-alist

Эта переменная позволяет основным режимам переопределять привязки клавиш для отдельных второстепенных режимов. Элементы этого ассоциативного списка выглядят так же, как элементы minor-mode-map-alist: (variable . keymap).

Если переменная присутствует среди элементов minor-mode-overriding-map-alist, карта, указанная этим элементом, полностью заменяет любую карту, указанную для той же переменной в minor-mode-map-alist.

minor-mode-overriding-map-alist автоматически является локальной для буфера во всех буферах.

Переменная: overriding-local-map

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

Переменная: overriding-terminal-local-map

Если эта переменная не равна nil, она содержит карту клавиш, используемую вместо overriding-local-map, локальной карты клавиш буфера, карт клавиш из текстовых свойств или наложений и всех карт клавиш второстепенных режимов.

Эта переменная всегда локальна для текущего терминала и не может быть локальной для буфера. См. Несколько терминалов. Она используется для реализации режима инкрементального поиска.

Переменная: overriding-local-map-menu-flag

Если значение этой переменной не равно nil, значение overriding-local-map или overriding-terminal-local-map может влиять на отображение строки меню. Значение по умолчанию — nil, поэтому эти переменные карт не влияют на строку меню.

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

Переменная: special-event-map

Эта переменная содержит карту клавиш для специальных событий. Если тип события имеет привязку в этой карте клавиш, событие считается специальным, и привязка для этого события выполняется напрямую функцией read-event. См. Специальные события.

Переменная: emulation-mode-map-alists

Эта переменная содержит список ассоциативных списков карт клавиш, используемых режимами эмуляции. Она предназначена для режимов или пакетов, использующих несколько карт клавиш второстепенных режимов. Каждый элемент — это ассоциативный список карт клавиш того же формата и назначения, что и minor-mode-map-alist, либо символ с привязкой переменной, являющейся таким ассоциативным списком. Активные карты клавиш в каждом ассоциативном списке используются раньше, чем minor-mode-map-alist и minor-mode-overriding-map-alist.

Функция: set-transient-map keymap &optional keep-pred on-exit message timeout

Эта функция добавляет keymap как временную карту клавиш, имеющую приоритет над другими картами клавиш для одной или нескольких последующих клавиш.

Обычно keymap используется только один раз — для поиска следующей клавиши. Если необязательный аргумент keep-pred равен t, карта остаётся активной, пока пользователь вводит клавиши, определённые в keymap; когда пользователь вводит клавишу, которой нет в keymap, временная карта клавиш отключается, и для этой клавиши продолжается обычный поиск.

Аргумент keep-pred также может быть функцией. В этом случае функция вызывается без аргументов перед выполнением каждой команды, пока активна keymap; она должна возвращать значение, отличное от nil, если keymap должна оставаться активной.

Необязательный аргумент on-exit, если он не равен nil, задаёт функцию, которая вызывается без аргументов после отключения keymap.

Необязательный аргумент message задаёт сообщение, отображаемое после активации временной карты. Если message является строкой, она служит форматом сообщения, и любой спецификатор «%k» в этой строке заменяется списком клавиш из временной карты. Любое другое значение message, отличное от nil, означает, что используется формат сообщения по умолчанию «Повторите с помощью %k».

Если необязательный аргумент timeout не равен nil, он должен быть числом, задающим количество секунд бездействия, по истечении которых keymap будет отключена. Значение переменной set-transient-map-timeout, если оно не равно nil, имеет приоритет над значением этого аргумента.

Эта функция добавляет keymap в переменную overriding-terminal-local-map и удаляет её оттуда; эта переменная имеет приоритет над всеми остальными активными картами клавиш (см. Поиск в активных картах клавиш).

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Controlling-Active-Maps.html

Spec-Zone.ru

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