23.16 Команды для привязки клавиш

В этом разделе описываются удобные интерактивные интерфейсы для изменения привязок клавиш. Они работают путем вызова keymap-set (см. Изменение привязок клавиш). В интерактивном использовании эти команды запрашивают аргумент key и ожидают, что пользователь введет корректную последовательность клавиш; они также запрашивают binding для этой последовательности клавиш и ожидают имя команды (т.е. символ, удовлетворяющий commandp, см. Интерактивный вызов). Когда вызываются из Lisp, эти команды ожидают, что key будет строкой, удовлетворяющей key-valid-p (см. Последовательности клавиш), а binding будет любым объектом Lisp, имеющим смысл в карте клавиш (см. Поиск клавиш).

Люди часто используют keymap-global-set в своих файлах инициализации (см. Файл инициализации) для простой настройки. Например:

(keymap-global-set "C-x C-\\" 'next-line)

переопределяет C-x C-\ для перемещения на строку вниз.

(keymap-global-set "M-<mouse-1>" 'mouse-set-point)

переопределяет первую (левую) кнопку мыши, вводимую с помощью клавиши Meta, для установки точки, где вы кликаете.

Будьте осторожны при использовании не-ASCII символов текста в спецификациях Lisp для привязываемых клавиш. Если они считываются как многобайтовый текст, как обычно происходит в файле Lisp (см. Загрузка не-ASCII символов), вы должны вводить клавиши также как многобайтовые. Например, если вы используете:

(keymap-global-set "ö" 'my-function) ; привязка o-umlaut

и ваша языковая среда — многобайтовый Latin-1, эти команды фактически привязывают многобайтовый символ с кодом 246, а не байтовый код 246 (M-v), отправленный терминалом Latin-1. Чтобы использовать эту привязку, вам необходимо научить Emacs, как декодировать клавиатуру, используя соответствующий метод ввода (см. Методы ввода в Руководство GNU Emacs).

Команда: keymap-global-set привязка клавиш

Эта функция устанавливает привязку key в текущей глобальной карте к binding.

(keymap-global-set key binding)
≡
(keymap-set (current-global-map) key binding)
Команда: keymap-global-unset key

Эта функция удаляет привязку key из текущей глобальной карты.

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

(keymap-global-unset "C-l")
    ⇒ nil
(keymap-global-set "C-l C-l" 'redraw-display)
    ⇒ nil
Команда: keymap-local-set привязка клавиш

Эта функция устанавливает привязку key в текущей локальной карте клавиш к binding.

(keymap-local-set key binding)
≡
(keymap-set (current-local-map) key binding)
Команда: keymap-local-unset key

Эта функция удаляет привязку key из текущей локальной карты.