emacs focus elisp autosave

Cómo guardar automáticamente los archivos al perder el enfoque en Emacs



focus elisp (5)

¿Es posible configurar Emacs, de modo que guarde todos los archivos cuando la ventana de emacs pierde el enfoque?


[…] La característica de la que estoy hablando es de Scribes. Es muy conveniente al editar html y similares, ya no tiene que presionar Cx Cs, solo cambia la ventana y verifica su navegador.

En ese caso, en lugar de cambiar a la aplicación del navegador, ordene a Emacs que cargue la aplicación del navegador ( Cc Cv o Mx 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 engancharlo a una encuadernación conveniente.

O aún puede usar el modo html-autoview-mode que cada vez que guarda el búfer, carga automáticamente el archivo en su navegador favorito.


Agregué ganchos de enfoque a Gnu Emacs 24.4.

Se llaman focus-in-hook y focus-out-hook .

Puedes añadir

(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 enfoque.



Puede usar `auto-save-interval ''para guardar cada n caracteres que escriba. El mío se establece en 100. Entonces, ¿cada 2-3 líneas de código, tal vez?

auto-save-interval es una variable definida en `C código fuente ''. Su valor es de 100.

Documentación: * Número de eventos de entrada entre guardados automáticos. Cero significa deshabilitar el guardado automático debido a la cantidad de caracteres escritos.

Puedes personalizar esta variable.

Esto no responde a su pregunta original; Es solo una manera de lograr algo similar.


Utilizo esto, solo funcionará si emacs se está ejecutando 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))