如何在Emacs中自动保存失去焦点的文件

Roc*_*ger 20 emacs autosave elisp focus

是否可以配置Emacs,以便在emacs窗口失去焦点时保存所有文件?

bon*_*dog 25

我为Gnu Emacs 24.4添加了焦点挂钩.

他们被称为focus-in-hookfocus-out-hook.

你可以加

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

(add-hook 'focus-out-hook 'save-all)
Run Code Online (Sandbox Code Playgroud)

到您的.emacs文件,它应该保存失去焦点的所有文件.

  • 一行:`(add-hook 'focus-out-hook (lambda () (interactive) (save-some-buffers t)))` (2认同)

Tho*_*man 10

我使用它,只有当emacs在X下运行时才会起作用(就像它可能会像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))
Run Code Online (Sandbox Code Playgroud)