Как заставить emacs выйти из минибуфера одним нажатием ESC?

Как заставить emacs выйти из минибуфера одним нажатием ESC?

Я часто нажимаю неправильную комбинацию клавиш и открываю какой-то непонятный режим минибуфера. Мне приходится нажимать ESC три раза (я думаю), что довольно раздражает. Как заставить emacs выйти из минибуфера всего одним нажатием ESC?

решение1

Спасибо за все ваши идеи. Кажется, это должно сработать:

(define-key minibuffer-local-map (kbd "ESC") 'keyboard-escape-quit)

Это сработало только для isearch. Похоже, мне придется перепривязывать его для каждой функции (smex, ibuffer и всех остальных, которые используют минибуфер).

решение2

я полагаю, чтоэргомакиспользует ESCклавишу так, как вы хотите. Он также изменяет множество других сочетаний клавиш Emacs - но, вероятно, способами, которые соответствуют вашему желанию "избегать долгих нажатий клавиш Emacsy".

[Предостережение: Я не эксперт по эргономике, и я знаюнетрекомендую использовать ESCименно так. ESCиграет особую роль в Emacs относительно Metaмодификаторов и раскладок, и обращаться с ней иначе рано или поздно означает нарваться на неприятности. (Точно так же, C-gявляется основополагающим для Emacs и даже жестко закодирована в некоторых случаях, поэтому ее нельзя на 100% заменить другой клавишей.)]

решение3

Я обычно использую следующую комбинацию клавиш: Ctrl- X(вход в командный режим) K(Убить), затем Enter.

Это должно уничтожить текущий мини-буфер.

решение4

Вероятно, вы захотите использовать minibuffer-setup-hookESC для привязки к локальной карте каждого минибуфера.

(add-hook 'minibuffer-setup-hook (lambda ()
    (local-set-key (kbd "ESC") 'abort-minibuffers))

Поскольку здесь используется локальная карта клавиш для каждого мини-буфера, вам не придется повторно привязывать ее к карте клавиш каждой команды — локальная карта обычно имеет приоритет над тем, что делает эта команда мини-буфера.

Связанный контент