Domanda

È possibile configurare Emacs, in modo che salvi tutti i file quando si perde la finestra di emacs concentrarsi?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top