問題
Emacsで、ファイルサーバと時刻がずれているなどの問題で、ファイルの編集時や保存時に警告が出る問題が昔から知られています。
時刻のずれの方をなんとかしろというのが定番のツッコミですが、秒単位で合わせるのが面倒な場合もあるので、Emacs側で回避する方法も欲しいところです。
Emacs 27.1で試行錯誤したところ、回避方法が一応わかりました。
編集時の警告
バッファを変更し始めたときにchanged on disk; really edit the buffer?
と出る問題です。
出しているのはask-user-about-supersession-threatです。
Emacs 26での変更で、ファイルの日時が変更されていても、警告前にuserlock--check-content-unchangedで中身をチェックするようになったのですが、このチェックがうまく行かない場合があるのかもしれません。
Emacs no longer prompts about editing a changed file when the file's content is unchanged
Instead of only checking the modification time, Emacs now also checks the file's actual content before prompting the user.
このチェックを省く以下のadviceで、今のところ回避できています。
(defun advice:userlock--check-content-unchanged (orig-func &rest args) 'unchanged)
(advice-add 'userlock--check-content-unchanged :around 'advice:userlock--check-content-unchanged)
保存時の警告
C-x C-s(save-buffer)でhas changed since visited or saved. Save anyway?
と出る問題です。
出しているのはbasic-save-bufferです。
こちらではuserlock--check-content-unchangedのような中身のチェックは行われていません。
日時チェックを省く以下のadvice(StackExchangeから)で、今のところ回避できています。
(defun advice:verify-visited-file-modtime (orig-func &rest args) t)
(advice-add 'verify-visited-file-modtime :around 'advice:verify-visited-file-modtime)
望ましい解決方法
- userlock--check-content-unchangedに問題があれば直す
- basic-save-bufferでも同じ方法で中身をチェックする