是否可以配置Emacs,以便在emacs窗口丢失时保存所有文件 聚焦?
答案 0 :(得分:25)
我为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文件,它应该保存失去焦点的所有文件。
答案 1 :(得分: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))
答案 2 :(得分:2)
不确定这是否是你想要的。
(defun dld-deselect-frame-hook ()
(save-some-buffers 1))
(add-hook 'deselect-frame-hook 'dld-deselect-frame-hook)
来自:http://www.dribin.org/dave/blog/archives/2003/09/10/emacs/
编辑:它似乎只适用于XEmacs
答案 3 :(得分:2)
[...]我正在谈论的功能来自 文士。这时非常方便 编辑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
,自动将文件加载到您喜欢的浏览器中。
答案 4 :(得分:1)
您可以使用`auto-save-interval'保存您键入的每n个字符。我的设置为100左右。那么大概每2-3行代码呢?
auto-save-interval是一个变量 在“C源代码”中定义。它的价值 是100
文档: *自动保存之间的输入事件数。零表示禁用 由于字符数而自动保存 键入。
您可以自定义此变量。
这不能回答你原来的问题;这只是实现类似目标的一种方式。