Pergunta

É possível configurar o Emacs, para que ele salva todos os arquivos quando a janela emacs perde foco?

Foi útil?

Solução

Eu uso isso, ele só funcionará se emacs está sendo executado em X (como provavelmente faria em 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))

Outras dicas

Eu adicionei ganchos de foco para GNU Emacs 24.4.

Eles são chamados focus-in-hook e focus-out-hook.

Você pode adicionar

(defun save-all ()
  (interactive)
  (save-some-buffers t))

(add-hook 'focus-out-hook 'save-all)

ao seu arquivo .emacs e deve salvar todos os arquivos sobre a perda de foco.

Não tenho certeza se é isso que você quer.

(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 / arquivos / 2003/09/10 / emacs /

EDIT: Ele só parece funcionar em XEmacs

[...] a característica que eu estou falando é de Escribas. É muito convient quando edição html e similares, você não faz tem que pressionar C-x C-S mais, você basta alterar a janela e verificar a sua browser.

Nesse caso, em vez de mudar para o aplicativo do navegador, a fim Emacs para carregar o aplicativo navegador (C-c C-v ou M-x browse-url-of-buffer). Com este método, você pode escrever sua própria função que salva o buffer e então traz o navegador para cima, como:

(defun my-browse-url-of-buffer ()
  "Save current buffer and view its content in browser."
  (interactive)
  (save-buffer)
  (browse-url-of-buffer))

E ligá-lo a uma conveniente ligação.

Ou você ainda pode usar o html-autoview-mode que cada vez que você salva o buffer, carrega automaticamente o arquivo em seu navegador favorito.

Você pode usar `auto-save-interval' para salvar a cada n caracteres que você digita. Mina está definido para 100. Então, a cada 2-3 linhas de código, talvez?

auto-save-interval é uma variável definido no código fonte `C'. O seu valor é 100

Documentação: * Número de eventos de entrada entre auto-salva. Zero meios desactivar autosaving devido ao número de caracteres digitada.

Você pode personalizar esta variável.

Esta não responder à sua pergunta original; é apenas uma maneira de conseguir algo semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top