EDIT: Ich verstehe, dass es Tastatur-beenden (die normalerweise an C-g gebunden ist); aber ich bin mehr daran interessiert zu wissen, wie man mit Bearbeitungsfunktionen arbeitet, die mit Emacs kommen (wie in diesem Fall). Ich stoße von Zeit zu Zeit auf diese Art von Situationen, wenn ich nur ein paar eingebaute Funktionen ändern möchte.in Emacs, was ist der beste Weg für Keyboard-Escape-Quit nicht andere Fenster zu zerstören?
In Emacs, wenn Sie M-ESC ESC (oder ESC drei Mal) drücken, können Sie aus einer Vielzahl von Situationen wie transient-Mark, etc. kommen. Aber ich habe gewöhnlich die Escape-Taste gedrückt ein einzelner Treffer der Escape-Taste) mehr als ich beabsichtigt hatte, und das endet mit dem Töten meiner Windows-Konfiguration, was ziemlich nervig ist. Die Funktionstastatur-escape-quit in simple.el definiert:
(defun keyboard-escape-quit()
"Exit the current \"mode\" (in a generalized sense of the word).
This command can exit an interactive command such as `query-replace',
can clear out a prefix argument or a region,
can get out of the minibuffer or other recursive edit,
cancel the use of the current buffer (for special-purpose buffers),
or go back to just one window (by deleting all but the selected window)."
(interactive)
(cond ((eq last-command 'mode-exited) nil)
((> (minibuffer-depth) 0)
(abort-recursive-edit))
(current-prefix-arg
nil)
((and transient-mark-mode mark-active)
(deactivate-mark))
((> (recursion-depth) 0)
(exit-recursive-edit))
(buffer-quit-function
(funcall buffer-quit-function))
((not (one-window-p t))
(delete-other-windows))
((string-match "^ \\*" (buffer-name (current-buffer)))
(bury-buffer))))
Und ich kann sehen, dass ich will nicht die Zeilen:
((not (one-window-p t))
(delete-other-windows))
Aber was ist der beste Weg, dies zu ändern Funktion? Ich kann nur zwei Möglichkeiten sehen: 1) modifiziere simple.el 2) kopiere diese Funktion in meine .emacs Datei und führe dort die Änderungen durch. Beide Wege sind nicht wirklich gut; Idealerweise würde ich gerne etwas auf der Linie des Defadvice sehen, aber ich kann nicht sehen, wie ich es in diesem Fall schaffen kann.
Eine bessere Einzeiler Version mit flet (dh die Funktion Version let): (defadvice Tastatur-escape-quit (um meine-Tastatur-escape-quit activate) (flet ((one-window-p (& optionale nomini all-frames) t)) ad-do-it)) – polyglot
Die cl-Erweiterung wird benötigt, damit flet funktioniert. – Alan
Sie müssen möglicherweise auch 'flet' in' cl-flet' ändern. – Alan