Org Mode - org.el

Org ModeはEmacsが標準で提供する拡張機能です。同機能のプロジェクトサイトでは以下のように紹介しています。

Org mode は、様々な機能をサポートしています。メモを取ることから、タスクリストの管理、プロジェクトの管理、文書の編集、再現性のある計算ノート、文芸的プログラミングなどです。これらを高速で効率的なプレーンテキストシステムで実現しています。

以下のリンク先に詳細な情報が載っています。

  1. Org mode for GNU Emacs
  2. Org Mode Compact Guide
  3. The Org Manual
  4. Org tutorials
  5. emacs/org-mode.git - Emacs Org mode

インストール

最新のOrg Modeを利用したい場合はELPAもしくはソースコードからインストールします。

見出し

コマンド

見出しとカーソル移動

動作 キーバインド 関数
見出しの位置を上に移す M-up org-metaup
見出しの位置を下に移す M-down org-metadown
見出しの位置を1階層上に移す M-left org-metaleft
見出しの位置を1階層下に移す M-right org-metaright
カーソルを近くにある前の見出しに移す C-c C-p outline-previous-visible-heading
カーソルを同階層にある次の見出しに移す C-c C-n outline-next-visible-heading
カーソルを現階層の親の見出しに移す C-c C-u outline-up-heading
  • org-backward-heading-same-level (C-c C-b)
    • カーソルを同階層の前の見出しに移動します。
  • org-forward-heading-same-level (C-c C-f)
    • カーソルを同階層の次の見出しに移動します。
  • org-promote-subtree (C-c C-<)
    • 現在の見出しを子見出しも含めて1階層浅くします。
  • org-demote-subtree (C-c C->)
    • 現在の見出しを子見出しも含めて1階層深くします。
    • 見出しの位置で M-S <right> を押した場合も同様です。

なお、筆者は以下のようにキーバインドを調整しています。

  • org-backward-heading-same-level (C-c <up>)
  • org-forward-heading-same-level (C-c <down>)

コピー/カット/ペースト

動作 キーバインド 関数
見出しと本文を切り取る C-c C-x C-w org-cut-special
見出しと本文をコピーする C-c C-x M-w org-copy-special
見出しと本文を貼り付ける C-c C-x C-y org-paste-special

プロパティ

https://orgmode.org/manual/Property-Syntax.html http://orgmode.org/guide/Properties.html

  • org-set-property (C-c C-x p)
    • プロパティを設定する
  • org-delete-property
    • プロパティを削除する
    • Property Syntax (The Org Manual)には C-c C-c d でプロパティを削除できると記載がある。
    • 筆者の環境ではそのキーバインディグは確認できなかった。

単語はアンダースコアでつなぐ。

1
:LAST_REPEAT: hogehoge

ID

見出しはプロパティにIDを持てる。 M-x org-id-get-create で作成する。

1
2
3
.:PROPERTIES:
.:ID:  0A9AAD49-F4D8-467F-8FD6-E8989456640F
.:END:
  • コマンド

    • org-id-get-create
      • 筆者は M-z o i にアサインしています。

タグ

  • org-set-tags-command (C-c C-q)
    • 現在の見出しにタグを設定する

下記のように予めタグのリストをorgファイルに記述にしておけば、 org-set-tags-command実行時にそのリストが表示される。

1
#+TAGS: laptop car pc

TODOキーワード

コマンド

  • org-todo (C-c C-t)
    • 現在の見出し(エントリー)にTODOキーワードを付与する
    • このコマンドを実行するとTODOの状態が遷移する
  • org-insert-todo-heading (S-M-RET)
    • TODOキーワード付きで新しい見出し(エントリー)を追加する
  • org-todo-list
    • M-x org-agenda t で呼び出し可
    • TODO付きの見出し(エントリー)を一覧で表示する

資料

ナローイング (絞り込み)

ナローイング (絞り込み) はバッファ (ファイル) の表示範囲を制御できる。 Org-Modeでは特定の見出しのみを画面に表示するといったことが可能。

振る舞い キーバインド 関数名
現在のサブツリーに絞り込み C-x n s org-narrow-to-subtree
現在のブロックに絞り込み C-x n b org-narrow-to-block
絞り込みを解除する C-x n w widen
org-narrow-to-subtreのトグル なし org-toggle-narrow-to-subtre

資料

タスクと繰り返し

https://orgmode.org/manual/Repeated-tasks.html

毎月 +1m
毎週 +1w
毎日 +1d

特殊な記号

1
2
++ => ???
.+ => ???

TODOをアジェンダ化 - org-agenda.el

https://orgmode.org/manual/Agenda-Views.html

M-x org-ageda で表示します。

org-agenda-files に登録した .org ファイルを対象にTODOなどを表示します。

  • org-agenda-file-to-front (C-c [)
    • 現在のファイルを org-agenda-files に追加します。
  • org-remove-file (C-c ])
    • 現在のファイルを org-agenda-files から除外します。
  • org-cycle-agenda-files (C-' or C-,)
    • org-agenda-files のファイルを順番に移動します。
  • org-agenda-set-restriction-lock (C-c C-x <)
    • org-agenda の処理対象を現在のサブツリーに限定します。
    • org-agenda-set-restriction-lock 実行後、該当箇所がグレー色に変わります。
  • org-agenda-remove-restriction-lock (C-c C-x >)
    • org-agenda-set-restriction-lock を解除します。

agenda view

アジェンダビューは日、週、月、年単位で表示される。 その表示単位に応じて、下記のキーでアジェンダを移動できる。

キー 機能
f 次のアジェンダを表示
b 前のアジェンダを表示
j 指定した日を表示

アジェンダビューの表示単位は下記のキーで切り替えることができる。

キー 機能
v d 日単位のアジェンダ表示に切り替え
v w 週単位のアジェンダ表示に切り替え
v m 月単位のアジェンダ表示に切り替え
v y 年単位のアジェンダ表示に切り替え

ソースコード実行 - ob.el

, でエスケープできる。

1
2
3
#+BEGIN_EXAMPLE
,#+TAGS: laptop car pc
#+END_EXAMPLE
1
2
3
4
5
6
7
8
9
using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}
1
2
3
4
5
6
7
8
9
(leaf org-contrib
  :ensure t)

(leaf org-babel
  :config
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((emacs-lisp . t)
     (csharp . t))))

基本操作

https://orgmode.org/manual/Key-bindings-and-Useful-Functions.html

  • org-edit-src-code (C-c ')
    • 前提条件: ソースブロック上で実行します。
    • ソースブロックを別のバッファで編集します。
  • org-babel-insert-header-arg (C-c C-v j)
    • 前提条件: ソースブロック上で実行します。
    • ソースブロックのヘッダー引数を指定します。
  • org-babel-execute-src-block (C-c C-c)
    • 前提条件: ソースブロック上で実行します。
    • ソースブロックを評価します。
  • org-babel-next-src-block (C-c C-v n or C-c C-v C-n)
    • 次のソースブロックに移動します。
  • org-babel-previous-src-block (C-c C-v p or C-c C-v C-p)
    • 前のソースブロックに移動します。

C#

org-contribパッケージにあるob-csharp.elを使う。

Ruby - ob-ruby.el

https://github.com/dangom/org-mode/blob/master/lisp/ob-ruby.el

Swift - ob-swift.el

https://github.com/zweifisch/ob-swift

アーカイブ - org-archive.el

コマンド

  • org-archive-subtree (C-c C-x C-s)
    • (見出しの)サブツリーをアーカイブ用ファイルに移動する。

資料

計時 - org-clock.el

コマンド

  • org-clock-report
  • org-dblock-update (C-c C-c or C-c C-x C-u)

資料

脚注 - org-footnote.el

脚注は英語圏で footnote と呼ぶ。

以下にorg-modeの脚注の記載例を示す。(12.10 Creating Footnotes (The Org Manual)より引用)

1
2
3
The Org website[fn:1] now looks a lot better than it used to.
...
[fn:55] The link is: https://orgmode.org

コマンド

  • org-footnote-new
    • 新しい脚注を作成します。
  • org-footnote-goto-definition
    • 指定した脚注に移動します。
  • org-footnote-action (C-c C-x f)
    • カーソルが脚注のラベルにある場合は、脚注本文へ移動します。
    • カーソルに脚注のラベルがない場合は、新しい脚注を作成します。

資料

Speed Keys

カーソルが見出しのアスタリスクにある場合に、n, pなどのキー入力でカーソルを動かすことができる。 ほかにもたくさんのショートカットキーがある。

コマンド

org-speed-commands を使う場合は、事前に org-use-speed-commands でフラグを立てておく。

1
(setq org-use-speed-commands t)

コマンドは M-x org-speed-command-help を参照のこと。

追加

org-speed-commands はカスタマイズできる。以下に例を示す。

1
(add-to-list 'org-speed-commands '("z" call-interactively #'consult-org-heading))

資料

Org QL query - org-ql.el

https://github.com/alphapapa/org-ql

例えば、 TODO コージーコーナーに行く買い物/誕生日 にrefileしたい場合、 org-ql-refile コマンドでクエリ欄に todo:TODO olp:買い物 誕生日 と入力すると、 TODOステータスが TODO で見出しのパス 買い物/誕生日 に移せる。

1
2
3
4
5
6
* Inbox
** TODO コージーコーナーに行く
* 買い物
** DONE クリスマス
** DONE 正月
** TODO 誕生日
1
2
M-x org-ql-refile
Refile to: todo:TODO olp:買い物 誕生日

Consult - consult-org.el

consult-org.elはconsult.el (GitHub - minad/consult) が提供する機能です。

consult-org-heading

TBD.

consult-org-agenda

TBD.

Sparse Tree

Sparse Tree はorgバッファのアウトラインから該当するorgエントリーを検出し、それらを用いてアウトラインを構築する機能です。

https://orgmode.org/manual/Sparse-Trees.html

コマンド

  • org-sparse-tree (C-c /)
  • org-match-sparse-tree (C-c \)

org-sparse-tree (C-c /) を実行すると、どのように絞り込むかミニバッファに入力を求められます。

例えば、プロパティを検索する場合は p を選びます。タグで絞り込む場合は m を選びます。

絞り込んだ後にorgエントリーをトグルすると絞り込みは解除されます。

使い方

orgバッファが以下の内容と仮定します。

1
2
3
4
* Books     :READING:
** Book A   :2010:
** Book B   :2015:
** Book C   :2020:

例1 +READING

org-match-sparse-tree (C-c \) で +READING と入力した場合、検索結果は以下の通りです。

1
2
3
4
* Books     :READING:
** Book A   :2010:
** Book B   :2015:
** Book C   :2020:

例2 +READING+2015

org-match-sparse-tree (C-c \) で +READING+2015 と入力した場合、検索結果は以下の通りです。

1
2
* Books     :READING:
** Book B   :2015:

例3 +READING-2020

org-match-sparse-tree (C-c \) で +READING-2020 と入力した場合、検索結果は以下の通りです。

1
2
3
* Books     :READING:
** Book A   :2010:
** Book B   :2015:

org-tabel - org-table.el

コマンド 効用
M-S-UP 上に行を挿入
M-S-DOWN 現在の行を削除
C-c = 行に対する計算式を入力
C-u C-c = 列に対する計算式を入力
C-c C-c 再計算
表計算の関数 やってくれること
vcount(範囲) データの個数
vsum(範囲) データの総和
vprod(範囲) データの総積
vmax(範囲) データの最大値
vmin(範囲) データの最小値