Emacs: how to disable 'file changed on disk' checking?

前端 未结 4 1309
一生所求
一生所求 2020-12-08 10:38

How to disable Emacs from checking the buffer file was changed outside the editor?

4条回答
  •  离开以前
    2020-12-08 11:08

    I have the following in my .emacs. It makes Emacs only ask about really changed files. If a file remains the same bytewise, just its timestamp is updated, as often happens when you switch branches in VCS, this "change" is ignored by Emacs.

    ;; Ignore modification-time-only changes in files, i.e. ones that
    ;; don't really change the contents.  This happens often with
    ;; switching between different VC buffers.
    
    (defun update-buffer-modtime-if-byte-identical ()
      (let* ((size      (buffer-size))
             (byte-size (position-bytes size))
             (filename  buffer-file-name))
        (when (and byte-size (<= size 1000000))
          (let* ((attributes (file-attributes filename))
                 (file-size  (nth 7 attributes)))
            (when (and file-size
                       (= file-size byte-size)
                       (string= (buffer-substring-no-properties 1 (1+ size))
                                (with-temp-buffer
                                  (insert-file-contents filename)
                                  (buffer-string))))
              (set-visited-file-modtime (nth 5 attributes))
              t)))))
    
    (defun verify-visited-file-modtime--ignore-byte-identical (original &optional buffer)
      (or (funcall original buffer)
          (with-current-buffer buffer
            (update-buffer-modtime-if-byte-identical))))
    (advice-add 'verify-visited-file-modtime :around #'verify-visited-file-modtime--ignore-byte-identical)
    
    (defun ask-user-about-supersession-threat--ignore-byte-identical (original &rest arguments)
      (unless (update-buffer-modtime-if-byte-identical)
        (apply original arguments)))
    (advice-add 'ask-user-about-supersession-threat :around #'ask-user-about-supersession-threat--ignore-byte-identical)
    

提交回复
热议问题