是否可以配置 Emacs,以便在 emacs 窗口失去焦点时保存所有文件?
5 回答
我在 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 文件,它应该保存所有失去焦点的文件。
我使用它,只有当 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))
[…] 我所说的功能来自 Scribes。编辑html之类的时候很方便,不用再按Cx Cs,换个窗口检查一下浏览器就行了。
在这种情况下,不要切换到浏览器应用程序,而是命令 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
每次保存缓冲区时使用它,自动将文件加载到您喜欢的浏览器中。
不确定这是否是您想要的。
(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
您可以使用 `auto-save-interval' 保存您键入的每 n 个字符。我的设置为 100。所以大约每 2-3 行代码,也许?
auto-save-interval 是在“C 源代码”中定义的变量。它的值为 100
文档:*自动保存之间的输入事件数。零表示由于键入的字符数而禁用自动保存。
您可以自定义此变量。
这不能回答你原来的问题;这只是实现类似目标的一种方式。