Emacsでフォーカスを失ったときにファイルを自動的に保存する方法
質問
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です
ドキュメント: *自動保存間の入力イベントの数。ゼロは無効を意味します 文字数による自動保存 入力しました。
この変数をカスタマイズできます。
これは元の質問には答えません。同様のことを達成するための方法にすぎません。