質問: 軽いメモを取るときにGmailのメール下書きを利用しています。 理由としては、PCがフリーズしてもGmailの下書きであれば、データが残るからです。 MacOS X Yosemiteを利用していますが、何故かブラウザで動画を閲覧しているとフリーズすることが頻繁に発生します。(Flashのせい?) 本日、たまたまEmacsでメモをとっており、メモの途中で電話が入り、そこで動画を閲覧していたところ、OSがフリーズしてしまいました。 マルチディスプレイで、Emacsを画面に表示したままだったので、アナログ的にモニタをiphoneのカメラで撮影することで、なんとかテキストを失うことは避けれたのですが、これがディスプレイに表示されていなかったらということを考えるとフリーズが恐ろしくてたまりません。 いちいちGmailを利用するのも面倒なので、Emacsのスクラッチバッファが自動保存される仕組みが作ることができればよいのでは?とおもいました。 既にemacsでファイルを保存すると、その段階で`~/.emacs.d/backup`にもバックアップを作成するような設定は行っていますので(1日だけでものすごい大量のファイルが作られますが)、スクラッチバッファのテキストを`~/.emacs.d/.scratch`などに自動保存できれば、恐らくそれだけで世代バックアップもできると考えられますので素敵だなと思っています。 emacsで指定時間放置または指定文字以上の編集が行われた時に自動保存する仕組みが備わっているのは、わりとよく聞く話で、検索すると設定方法も出てくるのですが、この自動保存の仕組をスクラッチバッファのみ有効にする方法がわかりません。できれば、その自動保存の条件(放置時間やタイプ数)もカスタマイズしたいとおもっていますので、以下の3点を教えていただきたいです。 1. スクラッチバッファを自動保存するelisp 2. 操作の放置による自動保存発動時間の設定方法 3. テキスト入力数による自動保存発動文字数の設定方法 よろしくお願いいたします。
回答: masm さんの回答ですが、`with-current-buffer` を使うと以下の様に書く事ができます。 ``` (add-hook 'emacs-startup-hook '(lambda () (with-current-buffer "*scratch*" ;;(setq default-directory user-emacs-directory) ;; or ;;(setq buffer-file-name (concat user-emacs-directory ".scratch")) (auto-save-mode) (set (make-local-variable 'auto-save-timeout) 10) (set (make-local-variable 'auto-save-interval) 20)))) ``` ただ、この方法ですと、自動保存されるファイルが `default-directory`(`*scratch*` バッファでの初期値はホームディレクトリ)に作成される事になります。 ``` $ ls -l ~/ -rw-r--r-- 1 nemo nemo 12 Jun 28 00:55 #%2Ascratch%2A#27799ads# ``` `~/.emacs.d/` ディレクトリに作成したい場合は、`default-directory` か `buffer-file-name`(どちらも buffer local 変数)を設定すると良いかもしれません。 `buffer-file-name` を設定する場合、`*scratch*` バッファがファイルに関連付けられますので、Emacs を終了する際にセーブしていない場合には「`Save file ~/.emacs.d/.scratch?`」などと尋ねられる事になります(ファイルと同じ扱い)。