読者です 読者をやめる 読者になる 読者になる

yaotti's diary

QiitaやKobito、Qiita:Teamを作っています。Software is Eating the World

auto-save-buffersを使っている人のためのoutputz.elの設定

emacs

ファイル保存時ではなく,バッファをキルした時&emacsを終了するときにoutputzにリクエストを投げる設定.
Emacs終了時はファイルに紐付いている全バッファの記録を投げる.

以下を.emacsに追加すればok

;; http://d.hatena.ne.jp/antipop/20081120/1227180641 より
(require 'outputz)
(setq outputz-key "Your Private Key")      ;; 復活の呪文
(setq outputz-uri "http://example.com/%s") ;; 適当なURL。%sにmajor-modeの名前が入るので、major-modeごとのURLで投稿できます。
(global-outputz-mode t)
;; http://dotfiles.org/~jbromley/.emacsを参考に
(remove-hook 'after-save-hook 'outputz)
(add-hook 'kill-buffer-hook 'outputz)
(defvar my-before-kill-emacs-hook nil
  "Hook to run before `save-buffers-kill-emacs'.")
(defun outputz-buffers ()
  (dolist (buf (buffer-list))
    (with-current-buffer buf
      (outputz))))
(add-hook 'my-before-kill-emacs-hook 'outputz-buffers)
(defadvice save-buffers-kill-emacs (around before-kill-hook activate)
  (run-hooks 'my-before-kill-emacs-hook)
  (sleep-for 1) ;;とりあえず
  ad-do-it)

そのままrun-hooksだけだとリクエストを投げ終わる前にEmacsが終了してしまうので,sleepしている.
url.el読んだけど,処理が終わったかどうかのうまいチェックが思いつかなかったので :P
また考えてみよう.