Изменение и перевод событий ввода
Emacs изменяет каждое считанное событие в соответствии с extra-keyboard-modifiers, затем переводит его через keyboard-translate-table (если применимо), прежде чем вернуть его из read-event.
- Переменная: extra-keyboard-modifiers
-
Эта переменная позволяет программам Lisp «нажимать» клавиши модификаторов на клавиатуре. Значение — это символ. Важны только модификаторы символа. Каждый раз, когда пользователь нажимает клавишу, она изменяется так, как будто эти клавиши модификаторов удерживаются. Например, если вы свяжете
extra-keyboard-modifiersс?\C-\M-a, то все символы ввода с клавиатуры, введённые в течение действия привязки, будут иметь применённые к ним модификаторы Control и Meta. Символ?\C-@, эквивалентный целому числу 0, в этой цели не считается символом управления, а символом без модификаторов. Таким образом, установкаextra-keyboard-modifiersв ноль отменяет любые изменения.При использовании оконной системы программа может нажимать любые клавиши модификаторов таким образом. В противном случае могут быть виртуально нажаты только клавиши CTL и META.
Обратите внимание, что эта переменная применяется только к событиям, которые действительно поступают с клавиатуры, и не оказывает никакого влияния на события мыши или любые другие события.
- Переменная: keyboard-translate-table
-
Эта локальная для терминала переменная — это таблица перевода для символов клавиатуры. Она позволяет вам переупорядочивать клавиши на клавиатуре без изменения каких-либо привязок команд. Её значение обычно является таблицей символов, или же
nil. (Это также может быть строка или вектор, но это считается устаревшим.)Если
keyboard-translate-tableявляется таблицей символов (см. Таблицы символов), то каждый символ, считанный с клавиатуры, ищется в этой таблице символов. Если найденное там значение неnil, то оно используется вместо фактического входного символа.Обратите внимание, что этот перевод — первое, что происходит с символом после его считывания из терминала. Функции ведения записей, такие как
recent-keysи файлы дрибблинга, записывают символы после перевода.Обратите также внимание, что этот перевод выполняется до передачи символов методам ввода (см. Методы ввода). Используйте
translation-table-for-input(см. Перевод символов), если вы хотите переводить символы после работы методов ввода.
- Функция: keyboard-translate from to
Эта функция изменяет
keyboard-translate-tableдля перевода кода символа from в код символа to. Она создаёт таблицу перевода клавиатуры, если необходимо.
Вот пример использования keyboard-translate-table для того, чтобы C-x, C-c и C-v выполняли операции вырезки, копирования и вставки:
(keyboard-translate ?\C-x 'control-x) (keyboard-translate ?\C-c 'control-c) (keyboard-translate ?\C-v 'control-v) (global-set-key [control-x] 'kill-region) (global-set-key [control-c] 'kill-ring-save) (global-set-key [control-v] 'yank)
На графическом терминале, поддерживающем расширенный ввод ASCII, вы по-прежнему можете получить стандартные значения Emacs одного из этих символов, набрав его с клавишей Shift. Это делает его другим символом с точки зрения перевода с клавиатуры, но он имеет то же обычное значение.
См. Карты перевода, для механизмов перевода последовательностей событий на уровне read-key-sequence.
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/Event-Mod.html