2009-08-04 61 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文件,它應該保存在失去重心的所有文件。