@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

org-clockでタイムスタンプが大量発生するのを止める

Excelで作業時間を記録するのがめんどくさくなったので、 org-modeで作業時間を記録するようにしてみました。

org-clockで計時していると、CLOCK: [2015-00-01 Thu 09:27]--[2015-00-21 Thu 10:27] => 1:00のような行が大量発生します。

古いorg-modeでは:CLOCKS:というブロックに囲まれて、TABキーでたためたのですがデフォルトの動作が変更されたようです。

下記設定で:LOGBOOK:というグループにまとめてくれるようになりました。

(setq org-clock-into-drawer t)

Org-Mode for GNU Emacs

kitchingroup.cheme.cmu.edu

おまけ:org-clockとは

  • 詳しい説明。ほぼそのまま使える

d.hatena.ne.jp

  • 翻訳プロジェクトの日本語ドキュメント

orgmode.jp

文字コードが指定されていなくて化けましたが、UTF-8です。 あと、ページ内リンクが同じく文字コードの違いから正しく動いていないです。

  • 英語の本家ドキュメント

orgmode.org

  • clock-in忘れを通知する

「org-clock-in」タグの記事一覧 | るびきち「日刊Emacs」

  • clock-in/clock-outのフックでexe実行してタスクを常に表示する

ichiroc.hatenablog.com

Windows向けなので、フックの内容をいじればMacの通知センターに表示させられるな。 あとで設定する。

;; task viewer 
(defvar my-org-clock-in-shell-buffer-name "*ORG-CLOCK-IN-BUFFER*")
(add-hook 'org-clock-in-hook '(lambda () (interactive)
                                (async-shell-command (concat "taskviewer"
                                                             " \""
                                                             (format-time-string "[%H:%M] " org-clock-start-time)
                                                             org-clock-heading
                                                             "\" "
                                                             (number-to-string (- (display-pixel-height) 160))
                                                             " "
                                                             (number-to-string (- (display-pixel-width)  420)))
                                                     (get-buffer-create my-org-clock-in-shell-buffer-name))
                                (delete-other-windows)))
(add-hook 'org-clock-out-hook '(lambda () (interactive)
                                 (shell-command "taskkill /im:taskviewer.exe")
                                 (let ((clock-process-buffer (get-buffer my-org-clock-in-shell-buffer-name)))
                                   (while (process-live-p
                                           (get-buffer-process clock-process-buffer))
                                     (sleep-for 1))
                                   (kill-buffer clock-process-buffer))))