1.1 はじめに
org-mobile でTODO 管理とかすると,PC からの入力がストレスレスで良いのだけど,なにせ,いちいちコマンド叩いて同期するのが面倒.
というわけで,自動的にorg-mobile-pull とかorg-mobile-push とかするようにしてみた.
まだ,この設定で動かした時間短い(30分ぐらい)ので,どこかおかしなところを見逃してる可能性ある.
だから,あんまり鵜呑みにしないようにお願いします.
(追記: 後述のcapture ファイル監視でのpullは動いてないっぽい... 2015/01/21 09:12)
というわけで,自動的にorg-mobile-pull とかorg-mobile-push とかするようにしてみた.
まだ,この設定で動かした時間短い(30分ぐらい)ので,どこかおかしなところを見逃してる可能性ある.
だから,あんまり鵜呑みにしないようにお願いします.
(追記: 後述のcapture ファイル監視でのpullは動いてないっぽい... 2015/01/21 09:12)
1.2 やること
- Emacs が開いている間,アイドル時間が一定時間以上でpull してpush
org-mobile-capture-file が変更されたらpull(追記: 下記の設定では動いてないぽい)
- capture ファイルは,org-mobile で同期取るときに使う差分を保持する一時ファイルだったかな? とにかく,他のデバイスとかで編集するとこのファイルが更新されるっぽい.
- ファイルをセーブするときにはpush
- ファイルを開くときにはpull
1.3 参考にしたコード
以下のリンクにあるサンプルコードを参考にした
FAQ · matburt/mobileorg-android Wiki
やってることは
- org-mobile に登録したファイルを保存すると,その後アイドル時間30秒経過するとpush を実行
- 24時間に一回の頻度でpush
- Emacs 起動時にpull
- org-mobile が更新されたらpull
1.4 やってみる
1.4.1 コード
(defvar org-mobile-sync-timer nil "Timer that `org-mobile-sync-timer' used to reschedule itself, or nil.") ;;pullしてpush する関数 (defun org-mobile-sync nil (interactive) (org-mobile-pull) (org-mobile-push)) ;;idle 時間が60秒経過すると自動でpullしてpush (defun org-mobile-set-sync-timer nil (interactive) (setq org-mobile-sync-timer (run-with-idle-timer 10 60 t 'org-mobile-sync))) ;;修正 2015/01/21 09:04 ;;自動pull, push を無効にする(一応用意してみたが使うかどうか...) (defun org-mobile-clear-sync-timer nil (interactive) (cancel-timer org-mobile-sync-timer)) ;;↓要修正 (追記:2015/01/21 09:11) ;;指定されたファイルを指定された時間で監視,更新されたらorg-mobile-pull を実行 (defun install-monitor (file secs) (run-with-timer 0 secs (lambda (f p) (unless (< p (second (time-since (elt (file-attributes f) 5)))) (org-mobile-pull))) file secs)) ;; capture ファイルを5秒ごとに監視,更新されたらorg-mobile-pull 実行 (install-monitor (file-truename (concat (file-name-as-directory org-mobile-directory) org-mobile-capture-file)) 5) ;; org-mobile に登録したファイルを保存するとpush (add-hook 'after-save-hook (lambda () (when (eq major-mode 'org-mode) (dolist (file (org-mobile-files-alist)) (if (string= (file-truename (expand-file-name (car file))) (file-truename (buffer-file-name))) (org-mobile-push))) ))) ;; org-mobile に登録したファイルを開くとpull (add-hook 'find-file-hook (lambda () (when (eq major-mode 'org-mode) (dolist (file (org-mobile-files-alist)) (if (string= (file-truename (expand-file-name (car file))) (file-truename (buffer-file-name))) (org-mobile-pull))) ))) (org-mobile-set-sync-timer) ;; ←追記 2015/01/21 09:00
- ファイルをセーブするときpushするコードは,元のコードから遅延を省いただけ.
- capture ファイル変更でpull するコードは元コードそのまま
1.5 おわりに
とりあえず,これでしばらく使ってみる.
もしかしたら何か問題あるかも知れない.
問題が見つかって,気が向いたらこの記事直します.(無責任)
--
My Emacs Files At GitHub
0 件のコメント:
コメントを投稿