やっぱりなったー。だからいってんじゃん。

どうもです。

入り

ついにというか,やはりというか,その時はやってきたのです。
Emacsを起動して数日が経過。
shell-mode のバッファで,ついついバイナリファイルをcatしてしまいました。
shell-mode では,C-cもC-dも,というか,Windows上でcygwinとかEmacs内でシェルを
動かしていると,C-c の効きがいまいちなのは気のせいか?
シグナル処理? Linuxではきびきび反応してくれた記憶がある。
ま,いいや。
ほいで,そのうち終わるだろうとほっといたら,エラーでEmacsが落ちた。
・・・。
ゴクッ。
・・・。
Emacsを立ち上げる。
やっぱりだー!! この数日分のセッション情報,開いたバッファやら,実行したコマンドやら,
なんやらかんやらが,保存されてないお。
だから,言ってんじゃん。タイマーで session-save-session を呼べば,
少しは救われるだろうって。でもそのときは,対岸の火事というかなんというか。

タイマー

なので,Info読んで設定を書いてみた。
保存する間隔はどのくらいが適当かなと考えて,30分毎に保存しておけば,
万が一Emacsが落ちても,ダメージは少ないだろうと,適当な判断。
で,できたのが,以下の最後の行ね。
my-timer-for-session-save-session に,作ったタイマーを保存しているのは,
なにかしらの理由でキャンセルしたい場合に,あれば便利だから。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; session.el
;; http://emacs-session.sourceforge.net/
(when (require 'session nil t)
  (setq session-save-file-coding-system 'utf-8-unix)
  (setq session-save-file (expand-file-name "~/.session/.session.ntemacs"))
  (setq session-initialize '(session places))
  (setq session-globals-max-size 1024)
  (setq session-globals-max-string (* 1024 1024))
  (setq session-globals-include '((kill-ring 512)
                                  (session-file-alist 512)
                                  (file-name-history 512)
                                  ;; TODO make it be able to use shell-command-history
                                  ;; keyword: comint-input-ring
                                  ; (shell-command-history 512)
                                  (tags-table-set-list 128)))
  (add-hook 'after-init-hook 'session-initialize)
  ;; Save session info every 30 minutes
  (setq my-timer-for-session-save-session (run-at-time t 1800 'session-save-session)))

おまけ

キャンセルする場合は,(cancel-timer my-timer-for-session-save-session) すればオッケー牧場。
また,timer-list を覗けばどんなタイマーがあるかわかる。


最初お試しで,5秒毎にメッセージを表示するタイマーを作ってみた。
(run-at-time t 5 '(lambda () (message "Hello from timer")))
をしたものの,どうやって削除すればいいかわからず(笑)
5秒毎に,Hello from timer とか言われて。
うるせーよ,おまえさっきも同じこと言ってたし。
で,結局,(cancel-timer (cadddr timer-list)) して,なんとか削除。
また,run-at-time を評価するとそのたびにtimer-listにタイマーが追加されるので,
注意。
同じことをするタイマーが3つくらいできてしまったということは,ワタシに限っては,
ないので,注意されたい。