org-mode を使う上で、標準で用意されているコマンド以外に自分でも適当にコマンドを用意しているのでここにまとめている。
指定したフォルダに org-mode なファイルを作るためのコマンドを用意している。
が、使ってないし意味をあまり感じないし消して良さそう。
(setq my/org-document-dir (expand-file-name "~/Documents/org/"))
(defun my/create-org-document ()
(interactive)
(find-file-other-window my/org-document-dir))
org-clock-display で各ツリーにおける org-clock で記録された所要時間が表示でき、 org-clock-remove-overlays でそれを非表示にできるが、それを Toggle できるようにコマンド/関数を定義している。
(defun my/org-clock-toggle-display ()
"各ツリーの末尾に掛かった作業時間を表示/非表示を切り替えるコマンド"
(interactive)
(if org-clock-overlays
(org-clock-remove-overlays)
(org-clock-display)))
ivy で org-todo-keywords を選択可能にするために org-todo-keywords を加工してシンプルな文字列の配列にする関数を定義している。
後述の my/org-todo
で利用している
(defun my/org-todo-keyword-strings ()
"org-todo-keywords から装飾を省いた文字列のリストを返す関数"
(let* ((keywords (cl-rest (cl-first org-todo-keywords)))
(without-delimiter (cl-remove-if (lambda (elm) (string= "|" elm))
keywords)))
(mapcar (lambda (element)
(replace-regexp-in-string "\(.+\)" "" element))
without-delimiter)))
標準の org-todo だと画面がガチャガチャ動くのが気になったので ivy で選択できるようにしている。
(defun my/org-todo ()
"ivy で TODO ステータスを切り替えるためのコマンド
Hydra から利用するために定義している。"
(interactive)
(ivy-read "Org todo: "
(my/org-todo-keyword-strings)
:require-match t
:sort nil
:action (lambda (keyword)
(org-todo keyword))))
タグ毎に見たいことがありそうなので用意したやつ。存在を忘れてしまっていたのであまり使ってない。
カスタムアジェンダを頑張る方が良い気もする
(defun my/org-tags-view-only-todo ()
(interactive)
(org-tags-view t))
appt.el で通知されるように登録する必要があるのでコマンドを定義している。
(defun my/org-refresh-appt ()
(interactive)
(let ((org-agenda-files (append my/org-agenda-calendar-files org-agenda-files)))
(org-agenda-to-appt t)))
(defun my/open-calendar ()
(interactive)
(ivy-read "Calendar: "
my/calendar-targets
:require-match t
:sort nil
:action (lambda (target)
(progn
(setq cfw:org-icalendars `(,(concat org-directory target ".org")))
(cfw:open-org-calendar)))))
review-requested-prs というコマンドでレビュー対象の PR を取得できるようにしているのでそれを Emacs から叩けるようにしているコマンド。
(defun my/insert-review-requested-prs-as-string ()
(interactive)
(let* ((cmd (concat "review-requested-prs " my/github-organization " " my/github-repository))
(response (shell-command-to-string cmd)))
(insert response)))
実際のところこの Emacs のコマンドは使わず Terminal で review-requested-prs というコマンドを直で叩いているから何かしら工夫が必要そうである。
あと、そもそも既にバッファにあるやつとマージしたいとか色々やりたいことはあるのでそれをなんとかしたいですね。
org-journal で作られたその日のファイルを org-clock-report の対象にしたくて org-agenda-files をいい感じにするコマンドを用意した。まだ Hydra には組み込んでないけど、とりあえず M-x で呼び出して使うつもり
(with-eval-after-load 'org-agenda
(setq my/org-agenda-files--original (copy-sequence org-agenda-files))
(defun my/reset-org-agenda-files ()
(interactive)
(let ((tmp my/org-agenda-files--original))
(setq org-agenda-files
(cl-pushnew (org-journal--get-entry-path) tmp)))))