global-set-key, но исключая определенные режимы

Я пытаюсь создать новую привязку клавиш, которая будет нормально работать во всех режимах, кроме одного, где она конфликтует с другим. Например:

(global-set-key (kbd "<C-S-down>") 'move-line-down)

Есть ли простой способ (без настройки для определенных локальных режимов) сделать его глобальным, исключая определенный режим?


person scottyaz    schedule 06.01.2013    source источник
comment
Является ли конфликтующий режим основным или второстепенным? В последнем случае вы можете перевести привязку ключа в второстепенный режим и убедиться, что minor-mode-map-alist имеет правильный приоритет.   -  person François Févotte    schedule 06.01.2013
comment
Глобальные привязки клавиш не могут стирать привязки клавиш основного или дополнительного режима. Последние имеют приоритет (второстепенный над основным над глобальным). Я бы не стал называть привязку «глобальной» (и ссылаться на global-set-key), если вы явно не ссылаетесь на глобальную раскладку, потому что это только запутает ситуацию. Вы действительно хотите создать привязку, которая имеет приоритет над всеми картами основных и второстепенных режимов (за исключением одной)?   -  person phils    schedule 07.01.2013
comment
@Francesco Конфликтующая привязка клавиш находится в основном режиме.   -  person scottyaz    schedule 07.01.2013


Ответы (2)


Вы можете добавить в after-change-major-mode-hook функцию, которая устанавливала бы ключ в текущей раскладке local, за исключением определенных режимов, которых вы хотели бы избежать.

person Lindydancer    schedule 06.01.2013

Если вы хотите исключить один конкретный режим, вы можете сделать следующее:

(global-set-key (kbd "<C-S-down>") 'move-line-down) 

чтобы сделать его доступным по всему миру, и

(define-key KEYMAP (kbd "<C-S-down>") nil) 

чтобы исключить один режим, где KEYMAP — это название режима, за которым следует «mode-map» (например, ess-mode-map). Вы также можете привязать оригинальную вещь к ключу вместо nil.

person PascalVKooten    schedule 06.01.2013
comment
Я могу ошибаться, но я думал, что ОП хотел обратного: отключить свою собственную привязку клавиш, чтобы вернуть привязку исходного режима. - person François Févotte; 06.01.2013