Как автоматически сохранять файлы при потере фокуса в Emacs

StackOverflow https://stackoverflow.com/questions/1230245

  •  22-07-2019
  •  | 
  •  

Вопрос

Можно ли настроить EMAC, чтобы сохранить все файлы, когда окно EMACS теряет фокус?

Это было полезно?

Решение

Я использую это, оно будет работать только в том случае, если 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))

Другие советы

Я добавил фокус-хуки в Gnu Emacs 24.4.

Они называются focus-in-hook и focus-out-hook .

Вы можете добавить

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

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

в ваш файл .emacs, и он должен сохранить все файлы при потере фокуса.

Не уверен, что это то, что вы хотите.

(defun dld-deselect-frame-hook ()
  (save-some-buffers 1))

(add-hook 'deselect-frame-hook 'dld-deselect-frame-hook)

От: http: //www.dribin. орг / Dave / блог / архивы / 2003/09/10 / Emacs /

РЕДАКТИРОВАТЬ: кажется, что работает только в XEmacs

  

[…] функция, о которой я говорю,   Книжники. Это очень удобно, когда   редактирование HTML и тому подобное, вы не   придется нажимать C-x C-s, вы   просто измените окно и проверьте ваш   браузер.

В этом случае вместо переключения на приложение браузера прикажите Emacs загрузить приложение браузера ( C-c C-v или M-x browse-url-of-buffer ). С помощью этого метода вы можете написать свою собственную функцию, которая сохраняет буфер и затем запускает браузер, например:

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

И подключите его к удобной привязке.

Или вы все равно можете использовать html-autoview-mode , который каждый раз, когда вы сохраняете буфер, автоматически загружает файл в ваш любимый браузер.

Вы можете использовать `auto-save-interval' для сохранения каждых n вводимых вами символов.У меня установлено значение 100.Так примерно каждые 2-3 строки кода, может быть?

Auto-Save-Interval-это переменная, определенная в «C-исходном коде».Его значение 100

Документация:*Количество входных событий между автосохранениями.Ноль означает отключение аутосовирования из -за количества набранных символов.

Вы можете настроить эту переменную.

Это не отвечает на ваш первоначальный вопрос;это просто способ добиться чего-то подобного.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top