Cómo guardar automáticamente archivos en perder foco en Emacs
Pregunta
¿Es posible configurar Emacs, para que guarde todos los archivos cuando la ventana de emacs pierde enfoque?
Solución
Utilizo esto, solo funcionará si emacs se ejecuta bajo X (como probablemente lo haría en algo como ubuntu).
(when
(and (featurep 'x) window-system)
(defvar on-blur--saved-window-id 0 "Last known focused window.")
(defvar on-blur--timer nil "Timer refreshing known focused window.")
(defun on-blur--refresh ()
"Runs on-blur-hook if emacs has lost focus."
(let* ((active-window (x-window-property
"_NET_ACTIVE_WINDOW" nil "WINDOW" 0 nil t))
(active-window-id (if (numberp active-window)
active-window
(string-to-number
(format "%x00%x"
(car active-window)
(cdr active-window)) 16)))
(emacs-window-id (string-to-number
(frame-parameter nil 'outer-window-id))))
(when (and
(= emacs-window-id on-blur--saved-window-id)
(not (= active-window-id on-blur--saved-window-id)))
(run-hooks 'on-blur-hook))
(setq on-blur--saved-window-id active-window-id)
(run-with-timer 1 nil 'on-blur--refresh)))
(add-hook 'on-blur-hook #'(lambda () (save-some-buffers t)))
(on-blur--refresh))
Otros consejos
Agregué ganchos de enfoque a Gnu Emacs 24.4.
Se llaman focus-in-hook
y focus-out-hook
.
Puedes agregar
(defun save-all ()
(interactive)
(save-some-buffers t))
(add-hook 'focus-out-hook 'save-all)
a su archivo .emacs y debería guardar todos los archivos en caso de pérdida de foco.
No estoy seguro si esto es lo que quieres.
(defun dld-deselect-frame-hook ()
(save-some-buffers 1))
(add-hook 'deselect-frame-hook 'dld-deselect-frame-hook)
De: http: //www.dribin. org / dave / blog / archives / 2003/09/10 / emacs /
EDITAR: solo parece funcionar en XEmacs
[...] la característica de la que estoy hablando es de Escribas Es muy conveniente cuando editando html y similares, no tienes que presionar C-x C-s más, tú solo cambia la ventana y revisa tu navegador.
En ese caso, en lugar de cambiar a la aplicación del navegador, ordene a Emacs que cargue la aplicación del navegador ( C-c C-v
o M-x browse-url-of-buffer
). Con este método, puede escribir su propia función que guarda el búfer y luego abre el navegador, como:
(defun my-browse-url-of-buffer ()
"Save current buffer and view its content in browser."
(interactive)
(save-buffer)
(browse-url-of-buffer))
Y conéctelo a una encuadernación conveniente.
O aún puede usar el html-autoview-mode
que cada vez que guarda el búfer, carga automáticamente el archivo en su navegador favorito.
Puede usar `auto-save-interval 'para guardar cada n caracteres que escriba. El mío está establecido en 100. Entonces, ¿aproximadamente cada 2-3 líneas de código, tal vez?
intervalo de guardado automático es una variable definido en el 'código fuente C'. Es valioso es 100
Documentación: * Número de eventos de entrada entre guardados automáticos. Cero significa deshabilitar guardado automático debido a la cantidad de caracteres escrito.
Puede personalizar esta variable.
Esto no responde a su pregunta original; es solo una forma de lograr algo similar.