普段のタスク管理にはorg-modeを使用しています。
org-modeには素晴らしいタスクの時間計測機能がついているのですが、
タスク自体はEmacs以外で行うことが多いのもあり
clock-inするのを忘れてタスクに取り掛かってしまったり、
逆にclock-outするのを忘れて次のタスクに取り掛かってしまうことがよくあります。
そこで現在clock-inしているタスクが何か一目でわかるように
BitBar というアプリケーションを使って
メニューバーに現在のタスクと経過時間を表示させてみました。

BitBar のインストール
BitBarとはMacのメニューバーに任意の情報を表示することができるアプリケーションです。
brew cask を用いてインストールすることができます。
$ brew cask install bitbar
インストールが完了し、アプリを起動したらメニューバーの BitBar
をクリックし、
Change Plugin Folder
で任意のディレクトリを指定します
BitBar プラグインの追加
先程指定したディレクトリに以下のプラグインを追加します
BitBarのプラグイン名の命名規則は以下のようになっています
{任意の名前}.{更新間隔}.{拡張子}
今回は5秒間隔で実行するように設定してみました
# !/bin/bash
if [ -e ~/.clockin_task ]; then
task_name=`cat ~/.clockin_task | cut -f 2`
start_time=`cat ~/.clockin_task | cut -f 1`
elapsed=$(expr `date +%s` - $start_time)
h=$(expr $elapsed / 3600)
m=$(expr $elapsed % 3600 / 60)
disph=`printf %02d $h`
dispm=`printf %02d $m`
echo ":hourglass_flowing_sand: [$disph:$dispm] $task_name"
else
echo ":coffee: Break Time"
fi
後ほど記述しますがorg-modeでclockinしたタスクの開始時間(unixtime)とタスク名を
~/.clockin_task
に出力するようにしています
org-clock-hookの設定
clock-inした際にタスク名とタスクの開始時間を ~/.clockin_task
に出力し、
clock-outまたはclock-cancelした際に~/.clockin_task
を削除するように設定します
(defvar clockin-task-file "~/.clockin_task")
(defun write-clockin-task-file ()
(with-temp-buffer
(insert (concat (format-time-string "%s" org-clock-start-time)
"\t"
org-clock-heading))
(write-region (point-min) (point-max) clockin-task-file))
)
(defun delete-clockin-task-file ()
(delete-file clockin-task-file))
(add-hook 'org-clock-in-hook 'write-clockin-task-file)
(add-hook 'org-clock-out-hook 'delete-clockin-task-file)
(add-hook 'org-clock-cancel-hook 'delete-clockin-task-file)
適当な関数を作成し、org-clock-*-hook
に追加しています
今後の課題とか
タスクをクリックしたら本日やる予定のタスクの一覧とか並べられたらいいなーとか思ったり