How to automatically save files on lose focus in Emacs

前端 未结 5 1109
日久生厌
日久生厌 2020-12-09 16:23

Is it possible to configure Emacs, so that it saves all files when the emacs window loses focus?

5条回答
  •  猫巷女王i
    2020-12-09 17:23

    I use this, it will only work if emacs is running under X (like it probably would in something like 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))
    

提交回复
热议问题