org-modeでclock-inしているタスク名をmacOSのMenu Barに表示したい
#emacs
#macOS
org-mode で TODO 管理をしている際、clock-in してることを忘れたり今何やってたっけ?となることがある。常に目に入るよう macOS の Menu Bar に進行中のタスクを表示できると嬉しい。
Menu Bar に好きな情報を表示する方法は xbar (旧 bitbar) がある。あんまりメンテが活発でないが手頃な代替ツールがない事と、シェルスクリプトの実行結果を Menu Bar に反映できるシンプルさが良くてこれを使って解決することにした。
clock-in しているタスクを Emacs の外へ伝える
org-mode で clock-in しているタスクを xbar から参照できるよう、一時的なファイルにタスクを書き出す。以下のように clock-in/clock-out にフックしてファイル書き込みする設定を書いた。
;; init.el (defun my/write-to-task-file (content) (write-region content nil "~/.emacs.d/clock-task.txt" nil 'quiet) ) (defun my/org-clock-in-hook () ... ;; タスクを書き出す (my/write-to-task-file (substring-no-properties org-clock-current-task))) (defun my/org-clock-out-hook () ... ;; clock-outしたらMenu Barから消すためファイルを空に (my/write-to-task-file "")) (setq org-clock-in-hook 'my/org-clock-in-hook) (setq org-clock-out-hook 'my/org-clock-out-hook)
xbar で Menu Bar にタスクを表示する
xbar の plugin フォルダにorg-current-task.1m.sh
のようなスクリプトを用意する。
中では単純にファイルを読みにいくだけ。
#!/usr/bin/env bash echo "$(cat ~/.emacs.d/clock-task.txt) | length=32" # ノッチ端末向けにtruncate