EDIT: entiendo que es dejar de fumar teclado (que normalmente está unido a C-g); pero estoy más interesado en saber cómo lidiar con las funciones de edición que vienen con Emacs (como en este caso). Me encuentro con este tipo de situaciones de vez en cuando cuando quiero cambiar solo un poco de algunas funciones incorporadas.en Emacs, ¿cuál es la mejor manera para teclado-escape-quit no destruir otras ventanas?
En emacs, cuando presionas M-ESC ESC (o ESC tres veces), puedes salir de un montón de situaciones como la marca transitoria, etc. Pero habitualmente presiono la tecla de escape (de hecho, reasigné esto a un solo golpe de la tecla de escape) más de lo que pretendía, y eso termina matando la configuración de mi ventana, lo cual es bastante molesto. La función de teclado de escape dejar de fumar se define en 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))))
y puedo ver que yo no quiero las líneas:
((not (one-window-p t))
(delete-other-windows))
pero ¿cuál es la mejor manera de modificar esta ¿función? Solo puedo ver dos formas: 1) modificar simple.el 2) copiar esta función en mi archivo .emacs y hacer las modificaciones allí. Ambas formas no son realmente buena; idealmente me gustaría ver algo en la línea de defadvice, pero no veo cómo puedo hacerlo en este caso.
Una mejor versión de una sola línea usando flet (es decir, la versión de función de LET): (para dejar de teclado de escape defadvice (alrededor de mi-teclado de escape salga de activación) (flet ((one-window-p (y todos los marcos nomini opcionales) t)) ad-do-it)) – polyglot
La extensión cl es necesaria para que funcione el flet. – Alan
Es posible que también deba cambiar 'flet' por' cl-flet'. – Alan