あなたは自動保存系のelispを使っていますか?
real-auto-save とauto-save-buffers-enhanced を本サイトでは紹介しました。
どちらも一定時間ごとにバッファをファイルに保存してくれます。
おかげさまでC-x C-sを押す手間を省いてくれます。
僕はとても便利だと感じています。
ところで、これらのパッケージを使っていると、
たまにおかしい現象に出喰わしませんか?
こちらでは
「File to save in:」
というプロンプトがいきなり出てくることがあります。
このプロンプトは basic-save-buffer 関数経由です。
僕は今はreal-auto-saveを使っています。
僕が思うに、保存されるタイミングが悪くてEmacs的に
「ちょっとタンマ、今ダメ!」
みたいなことだと思います。
とりあえず run-at-time から run-with-idle-timer に
書き換えることでその現象は出なくなりました。
どちらもユーザがEmacsを操作しなくても関数を実行するタイマー機能です。
run-at-timeは指定された時間になったらたとえ作業中だろうと
問答無用でタイマー関数が実行されます。
対してrun-with-idle-timerは一定時間Emacsを触っていないときに
タイマー関数が実行されます。
後者の方が「ちょっとタンマ」になりにくいので、
上の怪現象が起きないのだと思います。
real-auto-saveでは以下のアドバイスを設定しています。
(defun real-auto-save-start-timer--idle-timer () "Start real-auto-save-timer." (setq real-auto-save-timer (run-with-idle-timer real-auto-save-interval real-auto-save-interval 'real-auto-save-buffers))) (advice-add 'real-auto-save-start-timer :override 'real-auto-save-start-timer--idle-timer)
まだ仮説段階なのでissueは出していません。
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。