Jak zmusić emacsa do opuszczenia minibufora jednym naciśnięciem ESC?
1
Często naciskam niewłaściwą kombinację klawiszy i otwieram niejasny tryb minibufora. Muszę nacisnąć ESC trzy razy (chyba), co jest dość denerwujące. Jak zmusić emacsa do opuszczenia minibufora za pomocą jednego naciśnięcia ESC?
C-g powinien być domyślny abort-recursive-edit który wyjdzie z minibufora, chyba że masz inny recursive-edit aktywny. Możesz także napisać własną funkcję za pomocą top-level który przerywa wszystkie poziomy recursive-edit i wychodzi z minibufora. Podoba mi się niestandardowa funkcja napisana przez Stefana, która pozwala mi kontrolować klawisz escape, aby używać go zarówno jako klawisza modyfikującego, jak i klucza, który działa tylko z jednym naciśnięciem: stackoverflow.com/questions/20026083/…
lawlist
Czy można to przesunąć na SO, abym mógł postawić nagrodę na pytanie i zdobyć jakiś użyteczny elisp?
The Unfun Cat
Oto coś, czego szukasz, ale tak jest nie Zalecana. Zawsze możesz to skomentować później, jeśli zdecydujesz się na zachowanie domyślne: (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) Moim zaleceniem jest jednak użycie funkcji napisanej przez Stefana (powyżej).
lawlist
Odpowiedzi:
2
Wierzę w to ergoemacs używa ESC klucz tak, jak chcesz. Zmienia także wiele innych powiązań z kluczami Emacsa - ale prawdopodobnie w sposób, który zgadza się z twoją chęcią „uniknięcia długich nieporęcznych naciśnięć klawiszy”.
[ Uwaga: Nie jestem ekspertem od ergoemaców i tak nie polecam używanie ESC w ten sposób. ESC ma szczególną rolę w Emacs wrt the Meta modyfikator i mapy klawiszy, a traktowanie go inaczej prędzej czy później prosi o kłopoty.
(Podobnie, C-g ma fundamentalne znaczenie dla Emacsa, aw niektórych przypadkach jest nawet na stałe zakodowany, więc nie można go w 100% zastąpić innym kluczem.)]
Dzięki, ale staram się unikać długich naciśnięć klawiszy emacs. To jeszcze jedno naciśnięcie klawisza niż obecnie używam (ESC ESC ESC); Chciałbym tylko raz nacisnąć ESC, aby wyjść z minibufora.
The Unfun Cat
0
Dzięki za wszystkie twoje pomysły. Wygląda na to, że powinno to załatwić:
Działało tylko dla isearch. Wygląda na to, że musiałbym go ponownie związać dla każdej funkcji (smex, ibuffer i wszystkie inne, które używają minibufora).
Chcę robić podobne rzeczy: naciśnij ESC, aby anulować funkcję save-buffers-kill-terminal podczas monitu „Zapisz plik”.
Próbowałem ponownie powiązać ESC w wielu mapach minibufora, jak wspomniano w to pytanie i odpowiedź . Jednak nadal nie mogę anulować monitu „Zapisz plik” przez ESC.
Po wykopaniu niektórych kodów źródłowych elisp, odkryłem, że query-replace-map jest rodzicem mapy-y-or-n-p, używanym przez save-buffers-kill-terminal. Moja ostatnia poprawka to:
C-g
powinien być domyślnyabort-recursive-edit
który wyjdzie z minibufora, chyba że masz innyrecursive-edit
aktywny. Możesz także napisać własną funkcję za pomocątop-level
który przerywa wszystkie poziomyrecursive-edit
i wychodzi z minibufora. Podoba mi się niestandardowa funkcja napisana przez Stefana, która pozwala mi kontrolować klawisz escape, aby używać go zarówno jako klawisza modyfikującego, jak i klucza, który działa tylko z jednym naciśnięciem: stackoverflow.com/questions/20026083/…(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)
Moim zaleceniem jest jednak użycie funkcji napisanej przez Stefana (powyżej).Odpowiedzi:
Wierzę w to ergoemacs używa
ESC
klucz tak, jak chcesz. Zmienia także wiele innych powiązań z kluczami Emacsa - ale prawdopodobnie w sposób, który zgadza się z twoją chęcią „uniknięcia długich nieporęcznych naciśnięć klawiszy”.[ Uwaga: Nie jestem ekspertem od ergoemaców i tak nie polecam używanie
ESC
w ten sposób.ESC
ma szczególną rolę w Emacs wrt theMeta
modyfikator i mapy klawiszy, a traktowanie go inaczej prędzej czy później prosi o kłopoty. (Podobnie,C-g
ma fundamentalne znaczenie dla Emacsa, aw niektórych przypadkach jest nawet na stałe zakodowany, więc nie można go w 100% zastąpić innym kluczem.)]źródło
Zazwyczaj używam następującej kombinacji klawiszy: Ctrl - X (wprowadź tryb poleceń) K (Zabij) Wchodzić .
Powinno to zabić bieżący mini-bufor.
źródło
Dzięki za wszystkie twoje pomysły. Wygląda na to, że powinno to załatwić:
(define-key minibuffer-local-map (kbd "ESC") 'keyboard-escape-quit)
Działało tylko dla isearch. Wygląda na to, że musiałbym go ponownie związać dla każdej funkcji (smex, ibuffer i wszystkie inne, które używają minibufora).
źródło
Chcę robić podobne rzeczy: naciśnij ESC, aby anulować funkcję save-buffers-kill-terminal podczas monitu „Zapisz plik”.
Próbowałem ponownie powiązać ESC w wielu mapach minibufora, jak wspomniano w to pytanie i odpowiedź . Jednak nadal nie mogę anulować monitu „Zapisz plik” przez ESC.
Po wykopaniu niektórych kodów źródłowych elisp, odkryłem, że query-replace-map jest rodzicem mapy-y-or-n-p, używanym przez save-buffers-kill-terminal. Moja ostatnia poprawka to:
Zauważ, że wyłącza wszystkie skróty klawiszem meta.
źródło