EDIT: Capisco che vi è un tasto di uscita da tastiera (che normalmente è associato a C-g); ma sono più interessato a sapere come si gestiscono le funzioni di editing fornite con Emacs (come in questo caso). Mi imbatto in questo tipo di situazioni di volta in volta quando voglio cambiare solo un po 'di alcune funzioni built-in.in Emacs, qual è il modo migliore per tastiera-escape-quit non distruggere altre finestre?
In emacs, quando si preme M-ESC ESC (o ESC tre volte), è possibile uscire da un sacco di situazioni come il segno transitorio, ecc. Ma di solito prendo la chiave di escape (in realtà rimappino questo in un singolo colpo della chiave di escape) più di quanto intendessi, e questo finisce per uccidere la mia configurazione di Windows, che è abbastanza fastidiosa. La funzione della tastiera-escape-quit è definita in simple.el:
(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))))
e posso vedere che non voglio che le linee:
((not (one-window-p t))
(delete-other-windows))
ma qual è il modo migliore per modificare questo funzione? Posso vedere solo due modi: 1) modificare simple.el 2) copiare questa funzione nel mio file .emacs e fare le modifiche lì. Entrambi i modi non sono in realtà buono; idealmente mi piacerebbe vedere qualcosa sulla linea di defadvice, ma non riesco a vedere come posso farlo in questo caso.
Una migliore versione one-liner utilizzando flet (cioè la versione funzione del LET): (defadvice tastiera-fuga-quit (intorno al mio-tastiera-escape-smettere di attivare) (flet ((one-window-p (& nomini all-frame opzionali) t)) ad-do-it)) – polyglot
L'estensione cl è necessaria per il funzionamento di flet. – Alan
Potrebbe anche essere necessario cambiare 'flet' in' cl-flet'. – Alan