2011-07-20 13 views
13

Cada vez que intento salir de Emacs, me preguntará si deseo guardar los búferes modificados. En el caso en que responda "no", me preguntará:Evitar que Emacs pregunte "existen almacenamientos intermedios modificados; ¿salir de todos modos?"

Existen buffers modificados; salir de todos modos? (y o n)

¿Hay alguna manera de evitar que Emacs me haga la última pregunta?

+0

posible duplicado de [Make Emacs dejar de pedir "existen procesos activos; matarlos y salir de todos modos"] (http://stackoverflow.com/questions/2706527/ hacer -emacs-stop-asking-active-processes-exist-kill-them-and-exit-anyway) –

+0

http://stackoverflow.com/a/10780124/539797 es cómo se hace. – yPhil

Respuesta

14

Hay un número de maneras que usted puede hacer esto :

se podría asesorar a la función save-buffers-kill-emacs:

(defadvice save-buffers-kill-emacs (around no-y-or-n activate) 
    (flet ((yes-or-no-p (&rest args) t) 
     (y-or-n-p (&rest args) t)) 
    ad-do-it)) 

la desventaja de esto es que también va a omitir la comprobación de los procesos activos en Emacs (WH Esto se hace después de la verificación del búfer de archivo). Por lo tanto, es probable que sea más seguro para escribir su propia versión de save-buffers-kill-emacs

(defun my-save-buffers-kill-emacs (&optional arg) 
    "Offer to save each buffer(once only), then kill this Emacs process. 
With prefix ARG, silently save all file-visiting buffers, then kill." 
    (interactive "P") 
    (save-some-buffers arg t) 
    (and (or (not (fboundp 'process-list)) 
     ;; process-list is not defined on MSDOS. 
     (let ((processes (process-list)) 
     active) 
     (while processes 
      (and (memq (process-status (car processes)) '(run stop open listen)) 
      (process-query-on-exit-flag (car processes)) 
      (setq active t)) 
      (setq processes (cdr processes))) 
     (or (not active) 
     (progn (list-processes t) 
      (yes-or-no-p "Active processes exist; kill them and exit anyway? "))))) 
     ;; Query the user for other things, perhaps. 
     (run-hook-with-args-until-failure 'kill-emacs-query-functions) 
     (or (null confirm-kill-emacs) 
     (funcall confirm-kill-emacs "Really exit Emacs? ")) 
     (kill-emacs))) 

y, o bien obligar a éste a la norma clave Cx Cc vinculante:

(global-set-key (kbd "C-x C-c") 'my-save-buffers-kill-emacs) 

o FSET se a "salvar-emacs-buffers-kill":

(fset 'save-buffers-kill-emacs 'my-save-buffers-kill-emacs) 
+0

Si aconseja 'yes-or-no' como sugiere, no solo afecta las llamadas en' save-buffers-kill-emacs' (que OP desea cambiar) sino * también * las llamadas en 'save -some-buffers' (que el OP * no * quiere cambiar, como yo lo entiendo). –

+0

No, aún se producirán las primeras solicitudes de guardar búfer. Se le preguntará UNA VEZ si se debe guardar un búfer de archivo, pero el segundo aviso "Búferes modificados existe, ¿salir de todos modos? (Y o n)" no ocurrirá. – zev

+0

Ah, astucia: 'save-some-buffers' utiliza' map-y-or-n-p' en lugar de 'y-or-n-p', por lo que su consejo no lo afecta. –

7

Si mira source for save-buffers-kill-emacs verá que no hay opción de usuario para desactivar esta pregunta.

Así que me temo que la forma más sencilla de obtener lo que desea es escribir su propia versión de save-buffers-kill-emacs que omita la confirmación (vea Trey Jackson's answer para ver cómo se vería esto).

Sin embargo, creo que un mejor enfoque es cambiar sus hábitos de trabajo para que no tenga que abandonar Emacs con mucha frecuencia. Si a menudo abandona Emacs, es una señal de que no está aprovechando al máximo las capacidades de cliente/servidor de Emacs, o su capacidad para ejecutar shells interactivos, editar archivos en máquinas remotas, conectarse a múltiples terminales, y más.

+0

Supongo que tienes razón, debería cambiar los hábitos. +1 para el consejo. – Tassos

5

Puede agregar esto a su .emacs, que le preguntará si desea guardar los cambios sin guardar en archivos y salga w/out confirmación adicional:

(defun my-kill-emacs() 
    "save some buffers, then exit unconditionally" 
    (interactive) 
    (save-some-buffers nil t) 
    (kill-emacs)) 
(global-set-key (kbd "C-x C-c") 'my-kill-emacs) 
+1

+1 porque tu respuesta es la más comprensible. – Tassos

Cuestiones relacionadas