Pregunta

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top