LoginSignup
0
1

More than 5 years have passed since last update.

win-sshfsしたファイルをEmacsで編集するといちいち「really edit the buffer?」と聞かれるので自動で返信させる

Posted at

win-sshfsでsshfsしたときタイムスタンプがずれてるのか,保存の度に上書きしていいか聞かれてしまいます.
global-auto-revert-modeなども意味を成しませんでした.
これをelispで黙らせました.

エラーメッセージ例
hoge.txt has changed since visited or saved.  Save anyway? (y or n) y
hoge.txt changed on disk; really edit the buffer? (y, n, r or C-h) y

できること

Windowsでもリモートのファイルを手元のEmacsで操作できる

結論

init.el(一部)

;; y-or-n-pにy,yes-or-no-pにyes,read-char-choiceにyと答える関数(参考1からコピペ)
(defun auto-yes (old-fun &rest args)
    (cl-letf (((symbol-function 'y-or-n-p) (lambda (prompt) t))
              ((symbol-function 'yes-or-no-p) (lambda (prompt) t))
              ((symbol-function 'read-char-choice) (lambda (prompt chars) '(?y ?n ?r ?? ?\C-h) ?y)))
      (apply old-fun args)))

;; バッファを保存し,一文字書き込み,それを消す関数
;; (ファイルのタイムスタンプがバッファよりも未来になっているため書き込み時に本当に書き込むか聞かれる)
(defun hoge ()
    "Save the buffer even if it is not modified."
    (interactive)
    (save-buffer)
    (insert-char #x4220)
    (delete-backward-char 1))

;; hoge関数に自動yes機能を付与
(advice-add #'hoge :around #'auto-yes)

;; C-x C-sを上書き
(global-set-key (kbd "C-x C-s") 'hoge)

マウントしたファイルかどうかで動作を変更

ただ,これだとマウントしていないファイルにもhoge関数を適用してしまいます.
そこでLドライブにマウントした場合にファイルパスがl:で始まることから,次のようにマウントしたファイルを編集しているときのみhoge関数を使用するようにしています.

C-xC-sの上書き
(global-set-key (kbd "C-x C-s") 
  (lambda()
    (interactive)
    (if (string-match-p "^c:" (spacemacs/show-and-copy-buffer-filename))
         (save-buffer)
         (hoge))))

参考

①自動yes応答機能などコードの大部分はここからコピペしてきました
https://emacs.stackexchange.com/questions/14669/sort-of-autoreply-for-specific-messages-in-minibuffer

②同様のコード
https://stackoverflow.com/questions/6591043/how-to-answer-yes-or-no-automatically-in-emacs

③'file changed on disk' 発生時に内部で呼ばれている関数を見れました
https://stackoverflow.com/questions/2284703/emacs-how-to-disable-file-changed-on-disk-checking

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1