2009-08-04 52 views

回答

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)) 
+0

作为广告宣传在Ubuntu上运行,并不需要将Emacs作为工作流程的核心。 – 2013-03-19 15:55:22

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的

工作
+0

是的,我看了所有的 - 钩和功能,但我没有找到说选择或重点的东西。 – Rockiger 2009-08-05 21:48:10

1

你可以用`自动保存间隔”,保存您键入的每n个字符。我的设置为100.那么对于每2-3行代码,也许呢?

auto-save-interval是`C源代码'中定义的变量 。其值 是100

文档: *自动保存之间的输入事件数量。零意味着禁用 自动保存,因为键入的字符数为 。

您可以自定义此变量。

这并不回答您的原始问题;这只是一种实现类似的方式。

+0

我知道,我所说的功能是来自Scribes。 编辑html之类的东西非常方便,你不必再按C-x C-s,只需更改窗口并检查浏览器即可。 – Rockiger 2009-08-08 08:53:11

2

[...]我在说的功能是从 抄写员。 编辑html之类的时候非常方便,你不用 必须再按C-x C-s,你只需要改变窗口并检查你的 浏览器。

在这种情况下,代替切换到浏览器应用程序,命令的Emacs加载浏览器应用程序(或C-c C-vM-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,自动将文件加载到您喜欢的浏览器中。

+0

这听起来像一个有趣的解决方案。我会试试这个。但是我仍然有点惊讶,Emacs无法对改变焦点等事情做出反应。 – Rockiger 2009-08-11 19:44:49

+0

@Rockiger Emacs似乎并没有提供一种方法来处理未聚焦的事件。 – 2009-08-12 15:45:02

24

我在Gnu Emacs 24.4中添加了焦点钩子。他们被称为focus-in-hookfocus-out-hook

您可以添加

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

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

到你的.emacs文件,它应该保存在失去重心的所有文件。