Как создать привязку клавиш с учетом регистра в Emacs?

Согласно руководству по Emacs, ключи-модификаторы нечувствительны к регистру по «историческим причинам».

Могу ли я изменить это поведение?

Моя цель состоит в том, чтобы M-a и M-A означали разные вещи.

Спасибо!


person EuAndreh    schedule 12.06.2014    source источник
comment
Насколько мне известно, они рассматриваются как нечувствительные к регистру только в том случае, если имеется только одно ключевое определение. Если вы создаете два -- т. е. одно определение ключа в нижнем регистре и одно определение ключа в верхнем регистре, то они больше не рассматриваются как нечувствительные к регистру. Использование метода, который вы ищете, очень распространено. Например, (global-set-key [?\s-m] 'minimize) и (global-set-key [?\s-M] 'maximize)   -  person lawlist    schedule 12.06.2014


Ответы (1)


Согласно инструкции,

Алфавитный символ, модифицированный Control, всегда считается нечувствительным к регистру: Emacs всегда интерпретирует C-A как C-a, C-B как C-b и так далее. Причина этого историческая.

Таким образом, вы не могли бы определить их как:

(global-set-key (kbd "C-a") 'xxx)
(global-set-key (kbd "C-A") 'yyy)

но S- можно использовать для Shift, поэтому:

(global-set-key (kbd "C-a") 'xxx)
(global-set-key (kbd "C-S-a") 'yyy)  ;; C-A

в порядке. А также

Для всех других модификаторов вы можете сделать измененные буквенные символы чувствительными к регистру при настройке Emacs. Например, вы можете заставить M-a и M-A выполнять разные команды.

Таким образом, вы можете определить привязку клавиш следующим образом:

(global-set-key (kbd "M-a") 'xxx)
(global-set-key (kbd "M-A") 'yyy)
person songyuanyao    schedule 12.06.2014
comment
Я делаю это довольно часто, на самом деле. Однако это означает, что в документе для моего кода указано, что C-A это aka C-S-a (или наоборот). Сам Emacs всегда использует последнее обозначение с явным модификатором Shift. - person Drew; 12.06.2014