Atomでは標準でAutoSaveパッケージが添付されているのだけど、動くタイミングがバッファの切替タイミング等だけなので個人的にはちょっとイマイチ。
ということで、実装してみた。
パッケージとして作っても良かったのだが、まずは簡単に init.coffee
に追加する感じで。
需要が多そうだったり、あるファイルは除くとかの指定が欲しくなったらパッケージとして作るかも知れない。
saveTimer = {}
atom.workspace.observeTextEditors (e) =>
e.onDidStopChanging () =>
return unless e.getPath()?
unless saveTimer[e.getPath()]?
saveTimer[e.getPath()] = 0
else
if saveTimer[e.getPath()] is 0
saveTimer[e.getPath()] = setTimeout () =>
e.save()
saveTimer[e.getPath()] = 0
, 1000 # wait msec
最後の行の 1000
を変えることで、更新の頻度を変えることができるけど、問題がなければ短いほうが良いと思う。
でも、1秒だと onDidStopChanging
のほうが長いので、実はほとんど意味がなかったりもする。
AutoSaveには色々な考えがあるけど、僕は「Emacsでファイルの自動保存 (auto-save-buffers)」に賛同派。
しかし、auto-save-buffers はたいへん便利であると主張しても、 大方の人は「今のままでいいや」 「まちがって修正してしまったのが、勝手に保存されるほうが嫌」 などと理由を挙げて、なかなか納得してくれない。 Emacsのマニュアル を見ても、同じようなことが書かれている。
自動セーブは通常は読み込んだファイル名でのセーブは行ないませ ん.これは予定の半分しか変更していないような中途半端なプログ ラムをセーブするのは望ましくないからです.その代わり,自動セー ブは自動セーブファイルと呼ばれる別のファイルに行なわれ,読み 込んだファイルは,陽にセーブした(C-x C-sなどで)場合のみ変更 されます.
この考え方は CVS などのバージョン管理システムが広く使われる ようになった現在では古くなっていると思う。きりのいいところで ファイルに保存するのではなく、きりのいいところでバージョン管 理システムに保存すればいい。
ところで、起動時のオーバーヘッドとかも考えて init.coffee
に記述するスタイルにしてみたのだけど、間違ってないよね?