PC・タブレット

org-captureをカスタマイズして、すばやくメモを取る方法

org-captureの設定をカスタマイズしてみました。
超長文なので、興味のあるところだけどうぞ。

org-captureとは

指定したファイルにテンプレートを使って追記できます。
ファイルを開く手間がないので、すばやく記入することが可能です。

M-x org-captureでorg-captureを呼び出すと画面が表示されます。
org-capture設定サンプル

表示されているキーを押すと、ウィンドウが分割され、入力画面になります。
tを押してタスクの入力画面になったところ。
org-capture入力画面

表示されている見出しやTODO、タイムスタンプなどのフォーマットはinit.elで設定できます。
内容を記入して、C-c C-cでファイルに追記、C-c C-kでキャンセル。

init.elの設定

;; org-capture
;; キーバインドの設定
(global-set-key (kbd "C-c c") 'org-capture)

;;ファイルパスの設定
(setq work-directory "/d/work/")
(setq taskfile (concat work-directory "tasks.org"))
(setq listfile (concat work-directory "list100.org"))

(setq org-capture-templates
      '(
	;; タスク(スケジュールなし)
	("t" "タスク(スケジュールなし)" entry (file+headline taskfile "Tasks")
	 "** TODO %? \n")

	;; タスク(スケジュールあり)
	("s" "タスク(スケジュールあり)" entry (file+headline taskfile "Tasks")
	 "** TODO %? \n   SCHEDULED: %^t \n")
	
        ("l" "やりたいこと" checkitem (file+headline listfile "やりたいこと")
	 "[ ] %? \n")

        ("b" "欲しいもの" checkitem (file+headline listfile "欲しいもの")
	 "[ ] %? \n")

        ("g" "行きたいところ" checkitem (file+headline listfile "行きたいところ")
	 "[ ] %? \n")

      )
)

素早く呼び出せるよう、キーバインドをC-c cに割り当てています。

ファイル名は、最初にまとめて変数に入れています。

org-captureを呼び出した時の選択肢は、org-capture-templates以下に追加します。

org-capture-templatesの設定

("キーバインド" "表示名" type (target) template properties)

キーバインド・表示名

org-captureを呼び出した時に表示されます。
キーを押すことで、指定したファイルにtemplateの書式で追記します。

type

追記するものを指定します。

書式 内容
entry 見出し
item リストアイテム
checkitem チェックボックス
table-line 表の行
plain 普通のテキスト

target

追記するファイルの指定や、ファイルのどの位置に書き込むか設定します。

たくさんあるので詳細はOrg Manual(英語)参照。
正規表現やfunctionを使って、追記するファイルやファイルの位置を指定とかもできるらしい。

書式 内容
(file “パス”) ファイルに追記する。
(file+headline “パス” “見出し名”) 指定したファイルの見出しの下に追記します。
指定した見出しがなければ自動で作られます。
(file+datetree “パス”) 年>月>日の見出しの下に追記します。

template

追記する内容のテンプレート(書式)。

記入した文字はそのまま入力されます。
見出しの記号(**)を書いておけば見出しが作られるし、TODOと書いておけばTODOが追加される。

ほかにもタイムスタンプや改行を入れておいたり、カーソル位置を設定することができます。

参考 Org Manual-Template expansion(英語)

書式 内容
%t タイムスタンプ(時刻なし)
%T タイムスタンプ(時刻あり)
%^T プロンプトで日付が設定できるタイムスタンプ。
%^Tなら時刻あり、%^tなら時刻なし。
%U 非活性(agendaに表示されない)タイムスタンプ
%<書式> 指定した書式のタイムスタンプ。agendaには表示されない?
\n 改行
%? カーソル位置を設定

(例1)見出しの下にタスクを追加

1番と2番目の設定を解説。

;; タスク(スケジュールなし)
("t" "タスク(スケジュールなし)" entry (file+headline taskfile "Tasks")
  "** TODO %? \n")

;; タスク(スケジュールあり)
("s" "タスク(スケジュールあり)" entry (file+headline taskfile "Tasks")
  "** TODO %? \n   SCHEDULED: %^t \n")

スケジュールを設定したい時と、とりあえずタスクだけ入れたい時があるので、スケジュールのありなしで2つ設定しました。

org-agendaを呼び出し、tsを押すと/d/work/tasks.orgのTasksという見出しの下に、TODOつきの見出しを追記します。
1番目がスケジュールなし、2番目がスケジュールつきの設定です。

ファイルパスはorg-capture-templatesの前に、変数としてまとめました。

;;ファイルパスの設定
(setq work-directory "/d/work/")
(setq taskfile (concat work-directory "tasks.org"))
(setq listfile (concat work-directory "list100.org"))

1つ1つ設定すると、ファイルの置き場所を変えたあとに全部なおさないといけないですが、変数に入れておけば変数の値を1か所変えるだけですむので楽です。

パスが変わったらwork-directoryを、ファイルパスが変わったらその下のファイル名を指定しているところを変えればOK。

org-captureを起動したあと、t(task)でスケジュールなしのタスクを入れます。
第2レベルでTODOの見出しを作り、カーソルはTODOのあとにセット。

s(Schedule)で、日付ありのスケジュールを入れます。
呼び出すと日付を指定するプロンプトが表示されるので、S-矢印キーで日付を選んでRET
org-captureで日付を設定する

すると、見出しの後ろに選んだ日付のタイムスタンプがつきます。
カーソルはTODOとタイムスタンプのあいだに設定しています。

(例2)チェックリストにチェックボックスを追加

チェックボックスの場合、追記するファイルの下準備が必要です。

追記したいファイルに、あらかじめチェックボックスを作っておきます。

org-captureから追記するlist.orgに「やりたいこと」「欲しいもの」「行きたいところ」の3つの見出しを作り、チェックボックスにしました。

* 人生でやりたいことリスト100
** やりたいこと[/]
** 欲しいもの[/]
** 行きたいところ[/]

init.elの設定。 3つ設定します。

("l" "やりたいこと" checkitem (file+headline listfile "やりたいこと")
  "[ ] %? \n")

("b" "欲しいもの" checkitem (file+headline listfile "欲しいもの")
 "[ ] %? \n")

("g" "行きたいところ" checkitem (file+headline listfile "行きたいところ")
 "[ ] %? \n")

org-captureを呼び出し、lを押すと/d/work/list100.orgのやりたいことの下に、チェックボックスを追記。
カーソル位置はチェックボックスの後ろに設定します。

b(buy)を押すと欲しいもの、g(go)を押すと行きたいところにそれぞれ項目を追加します。