当缓冲区等于文件但被标记为已修改时,是否有办法重置缓冲区修改标志?在这种情况下,我希望emacs不要求我保存。
答案 0 :(得分:1)
您可以使用以下表达式:
(set-buffer-modified-p nil)
小心!即使缓冲区 真的被修改,它也会清除标记。
答案 1 :(得分: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)))
答案 2 :(得分:0)
受@scottfrazer的回答启发,我编写了一组函数来自动检查是否应将与文件关联的缓冲区更新为“未修改”:
acg-update-unmodified-buffer.el
原始代码有一些改进:
combine-after-change-calls
,以便Emacs可以更有效地处理'after-change-functions
钩子。说实话,尽管我与Emacs合作已经有好几年了,但我对Elisp的了解并不丰富。我非常感谢社区提供的反馈,以帮助改善这一点。希望这会有所帮助!