Como fazer o emacs sair do minibuffer com um toque de ESC?

1

Eu freqüentemente pressiono a combinação errada de teclas e abro algum modo obscuro do minibuffer. Eu tenho que pressionar ESC três vezes (eu acho), o que é muito chato. Como eu faço o emacs sair do minibuffer com apenas um toque de ESC?

The Unfun Cat
fonte
1
C-g deve padrão para abort-recursive-edit que sairá do minibuffer, a menos que você tenha outra recursive-edit ativo. Você também pode escrever sua própria função usando top-level que aborta todos os níveis de recursive-edit e sai do minibuffer. Eu gosto de uma função personalizada escrita por Stefan que me permite controlar a chave de escape para usá-la como uma tecla modificadora e também como uma tecla que funciona com apenas uma tecla: stackoverflow.com/questions/20026083/…
lawlist
Isso pode ser movido para o SO para que eu possa colocar uma recompensa sobre a questão e obter algum elisp utilizável?
The Unfun Cat
Aqui está algo parecido com o que você está procurando, mas é não recomendado. Você sempre pode comentar mais tarde se decidir que deseja o comportamento padrão: (global-set-key (kbd "<escape>") 'top-level) (define-key minibuffer-local-map "<escape>" 'top-level) (define-key minibuffer-local-ns-map "<escape>" 'top-level) (define-key minibuffer-local-completion-map "<escape>" 'top-level) (define-key minibuffer-local-must-match-map "<escape>" 'top-level) (define-key minibuffer-local-isearch-map "<escape>" 'top-level) Minha recomendação, no entanto, é usar a função escrita por Stefan (acima).
lawlist

Respostas:

2

eu acredito ergoemacs usa o ESC tecla do jeito que você quiser. Ele também muda muitas outras combinações de teclas do Emacs - mas provavelmente de uma maneira que concorde com o seu desejo de "evitar teclados longos do emacsy".

[ Embargo: Eu não sou especialista em ergoemacs, e eu faço não recomendo usar ESC dessa maneira. ESC tem um papel particular no Emacs Meta modificador e keymaps, e tratá-lo de outra forma é pedir problemas mais cedo ou mais tarde. (Similarmente, C-g é fundamental para o Emacs, e até é codificado em alguns casos, por isso não é 100% substituível por outra chave.]]

Drew
fonte
1

Eu costumo usar a seguinte combinação de teclas: Ctrl - X (entre no modo de comando) K (Matar), então Entrar .

Isso deve matar o mini-buffer atual.

perror
fonte
Obrigado, mas estou tentando evitar as pressões de teclas longas do emacs. Esse é mais um keypress do que eu uso atualmente (ESC ESC ESC); Eu gostaria apenas de pressionar ESC uma vez para sair do minibuffer.
The Unfun Cat
0

Obrigado por todas as suas idéias. Parece que isso deve fazer o truque:

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

Só funcionou para isearch. Parece que eu teria que revinculá-lo para cada função (smex, ibuffer e todos os outros que usam o minibuffer).

The Unfun Cat
fonte
0

Eu quero fazer coisa semelhante: pressione ESC para cancelar a função de salvar buffers-kill-terminal durante o prompt "Salvar arquivo".

Eu tentei revincular o ESC em muitos keymaps minibuffer como mencionado em este Q & amp; A . No entanto, ainda não consigo cancelar o prompt "Salvar arquivo" pelo ESC.

Depois de cavar alguns códigos-fonte elisp, descobri que o query-replace-map é o pai-de-mapa-chave do map-y-or-n-p, que é usado pelo save-buffers-kill-terminal. Então minha correção final é:

(define-key query-replace-map (kbd "<escape>") 'keyboard-quit)

Note que desativa todos os atalhos com meta-chave.

AhLeung
fonte