Как перехватить ключ в Emacs по всему миру?

У меня это в моем.emacsrc

(define-key global-map "\C-h" 'backward-delete-char) ;;previously help

однако, когда я делаю I-поиск и ударяю Ch для удаления символа, emacs использует привязку по умолчанию и пытается открыть справку, когда я отменяю поиск с помощью Cg, тогда он выполняет обратный-delete-char в документе я начал I-поиск.

EDIT: Это заставляет меня задаться вопросом, почему Ch снова отображается, чтобы help внутри минибуфера. Что переопределяет мое определение глобальной карты и почему?

2 ответа

Вы можете использовать это:

(keyboard-translate ?\C-h ?\C-?)

Это переведет C- h на обратное пространство повсюду.

Когда вы выполняете isearch или ido-find-file, они переопределяют некоторые ключи в минибуфере. Вы можете переопределить эти ключи для каждого режима, но вам нужно будет действительно сделать это для каждого нового режима, который вы используете. Вот почему я предложил код выше: режимы обычно не перестраивают backspace на то, что не ведет себя как backspace. Дело в том, что логический C-h по-прежнему привязан к помощи внутри минибуфера, но с keyboard-translate вас больше нет C-h - у вас просто другое обратное пространство. И если вы хотите связать некоторую команду с ним, вы не можете привязываться к C-h - вам нужно привязать к ?\C-? ,


Я предполагаю, что вы действительно не хотите удалять символ, когда вы нажимаете "control and h", но вместо этого по какой-то причине Emacs получает C-h когда вы нажимаете клавишу backspace, правильно?

Если это так, лучшим решением является выяснить, как изменить эмулятор терминала, чтобы он не посылал C-h в Emacs, когда вы нажимаете backspace (например, он мог бы отправлять C-? как и большинство других эмуляторов терминалов в настоящее время),

licensed under cc by-sa 3.0 with attribution.