2012-07-12 183 views

回答

1

鉴于您已经安装了diff,这将做到这一点:

(defun my-update-modified-flag() 
    "Update the buffer modified flag." 
    (interactive) 
    (let* ((buffer (current-buffer)) 
     (basefile 
      (or (buffer-file-name buffer) 
       (error "Buffer %s has no associated file" buffer))) 
     (tempfile (make-temp-file "buffer-content-"))) 
    (with-current-buffer buffer 
     (save-restriction 
     (widen) 
     (write-region (point-min) (point-max) tempfile nil 'silent))) 
    (if (= (call-process "diff" nil nil nil basefile tempfile) 0) 
     (progn 
      (set-buffer-modified-p nil) 
      (message "Buffer matches file")) 
     (message "Buffer doesn't match file")) 
    (delete-file tempfile))) 
+0

非常感谢!这正是我需要的 – 2012-07-12 14:15:13

+0

好。接受答案呢? – scottfrazer 2012-07-12 15:19:17

+0

@scottfrazer如何将一个非交互式版本挂接到'kill-buffer-query-functions'? – 2012-07-12 16:08:44

1

您可以使用此表达式:

(set-buffer-modified-p nil) 

当心!即使缓冲区真的被修改,它也会清除该标志。

+2

有一个命令'未modified'这势必'M-〜'。请参阅http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#index-M_002d_007e-995 – tripleee 2012-07-12 16:57:40