Come salvare automaticamente i file su focus in Emacs
Domanda
È possibile configurare Emacs, in modo che salvi tutti i file quando si perde la finestra di emacs concentrarsi?
Soluzione
Lo uso, funzionerà solo se emacs funziona sotto X (come probabilmente farebbe in qualcosa come 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))
Altri suggerimenti
Ho aggiunto gli hook di messa a fuoco a Gnu Emacs 24.4.
Sono chiamati focus-in-hook
e focus-out-hook
.
Puoi aggiungere
(defun save-all ()
(interactive)
(save-some-buffers t))
(add-hook 'focus-out-hook 'save-all)
nel tuo file .emacs e dovrebbe salvare tutti i file in perdita di attenzione.
Non sono sicuro se questo è quello che vuoi.
(defun dld-deselect-frame-hook ()
(save-some-buffers 1))
(add-hook 'deselect-frame-hook 'dld-deselect-frame-hook)
Da: http: //www.dribin. org / Dave / blog / archives / 2003/09/10 / emacs /
EDIT: sembra funzionare solo in XEmacs
[& # 8230;] la funzione di cui sto parlando è di Scribi. È molto comodo quando modificando html e simili, non lo fai devi premere C-x C-s più, tu basta cambiare la finestra e controllare il tuo browser.
In tal caso, invece di passare all'applicazione browser, ordina a Emacs di caricare l'applicazione browser ( C-c C-v
o M-x browsing-url-of-buffer
). Con questo metodo, puoi scrivere la tua funzione che salva il buffer e quindi attiva il browser, come:
(defun my-browse-url-of-buffer ()
"Save current buffer and view its content in browser."
(interactive)
(save-buffer)
(browse-url-of-buffer))
E agganciarlo a una pratica rilegatura.
Oppure puoi ancora usare html-autoview-mode
che ogni volta che salvi il buffer, carica automaticamente il file nel tuo browser preferito.
Puoi usare `auto-save-intervallo 'per salvare ogni n caratteri digitati. Il mio è impostato su 100. Quindi circa ogni 2-3 righe di codice, forse?
intervallo di salvataggio automatico è una variabile definito in "codice sorgente C". Il suo valore è 100
Documentazione: * Numero di eventi di input tra i salvataggi automatici. Zero significa disabilitare salvataggio automatico dovuto al numero di caratteri digitato.
Puoi personalizzare questa variabile.
Questo non risponde alla tua domanda originale; è solo un modo per ottenere qualcosa di simile.