Emacsでフォーカスを失ったときにファイルを自動的に保存する方法

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

  •  22-07-2019
  •  | 
  •  

質問

Emacsウィンドウを失ったときにすべてのファイルを保存するように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)

From: http://www.dribin。 org / dave / blog / archives / 2003/09/10 / emacs /

編集:XEmacsでのみ動作するようです

  

[…]私が話している機能は   スクライブ。とても便利です   htmlなどを編集しても、   もうC-x C-sを押す必要があります、あなたは   ウィンドウを変更して確認してください   ブラウザ。

その場合、ブラウザアプリケーションに切り替える代わりに、Emacsにブラウザアプリケーションをロードするように命令します( C-c C-v または M-x browse-url-of-buffer )。このメソッドを使用すると、次のように、バッファーを保存して then ブラウザーを起動する独自の関数を作成できます。

(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