org-modeはEmacsの機能の1つ。独自のアウトライン形式.orgを扱うためのインターフェースを提供する。Emacsのkiller appの一角で、根強い人気がある。
- キーボードにフォーカスしたアウトライン操作
- プロジェクト管理
- 時間計測
- 脚注
- PDF、HTMLなどの各種形式への変換(Insomniaはこの変換を使ってビルドしている)
- コードの実行、実行結果の文書内への挿入
- シンタックスハイライト
- タグを使用した検索
などが可能。
sudo apt install pandoc texlive-lang-japanese texlive-latex-extra texlive-luatex
sudo apt install librsvg2-bin # SVG
pandoc -s test.org -o te2st.pdf --pdf-engine=lualatex -V documentclass=ltjsarticle -V luatexjapresetoptions=morisawa
mkdir -p pdf
find ./ -name "*.org" -type f -exec sh -c 'echo ${0}; pandoc "${0}" -o "pdf/${0%.org}.pdf" --toc -N --pdf-engine=lualatex -V documentclass=ltjsarticle -V luatexjapresetoptions=morisawa && echo ok' {} \;
sudo apt install pdftk
pdftk *.pdf cat output merge.pdf
C-c C-x e
で見積もり時間を設定できる。見積もり時間を設定すると、モードラインの残り時間の横に表示される。[0:51/03:00]という感じ。
<q tag
でquote blockを展開できる- <s tag でsource code blockを展開できる
org-modeをパースした結果が保持されているので、APIによって簡単に扱うことができる。
(org-element-context)
org-modeが各エレメントをどのように扱っているか少し想像がつく。
(org-element-type (org-element-context))
(org-collect-keywords)を使うとorgファイルの情報を取得できる。
https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L299-L309
タスクの状態が遷移したときに、メモを開く設定ができる。
:PROPERTIES: :LOGGING: lognoterepeat :END:
特殊な意味をもつ、大文字で構成されるさまざまなプロパティが存在する。 EXPORTシリーズ、CUSTOM_ID、ID…。
C-c C-x p で挿入できる。
C-c C-x C-i (org-clock-in) でタスク計測できる。
直前のタスクで再度計測するときは、 C-c C-x C-x (org-clock-in-last) で可能。 https://orgmode.org/manual/Clocking-commands.html
clock-inが動くだけで、org-pomodoroはinvokeしない。
Org-roamで見出しへのファイル内リンクを貼りたいとき。
org-store-link (C-c l)
で、見出しのリンクを取得する。このとき見出しのIDが生成される。これを消すと辿れなくなるので注意。
org-insert-link (C-c C-l)
で、貼り付ける。
C-c C-c
で見出しにタグを挿入できる。
WIPとかつけるようにすると便利そう。
基本的なカテゴリは階層で、一時的な状態はタグでやるようにするのがよさそう。
C-c / m
で検索できる。
Emacsはテキストエディタなので、文字表示のほとんどは等幅フォントだ。が、 org-modeでは自然言語の文章なので、幅の違うフォントのほうが読みやすい。
zzamboni.org | Beautifying Org Mode in Emacsの設定がとても良い。
- M-qでインデントの形に文章を整形する
- variable-pitch-modeが可変幅にするmode
- variable-pitch-modeだけだとコードブロックも可変になっちゃうので、コードブロックなどのfaceも変更する
spegoraro/org-alert: System notifications of org agenda items org-alertでDEADLINEが近い見出しを通知できる。 期限設定していても、通知されなければ忘れる。 スケジュール管理に使うのであれば必須か。
ヘッダーでbabelの実行結果のオプションを変えることができる。
#+BEGIN_SRC emacs-lisp :result outputs
(concat "hello" "world")
#+END_SRC
で実行すると標準出力が挿入される。
手書きは忘れやすいのでコマンドでやる。
コードブロック上で C-c C-v j
:: org-babel-insert-header-arg
。
わかりやすい説明。 org-modeのコードブロック(Babel)の使い方 | Misohena Blog
適用させたい見出しレベルのproperty内で、↓追加する。
:header-args+: :results output
動作の違い。
[1, 2]
p [1, 2]
Chrome拡張としてある。ここのReadmeに書いてあるコマンドを実行する。
- emacsclientをorg-protocolのハンドラとして登録する。たぶんプロトコルと対応するアプリケーションを選ぶ、という処理だろう。httpのときはブラウザを起動する、みたいな
cat > "${HOME}/.local/share/applications/org-protocol.desktop" << EOF
[Desktop Entry]
Name=org-protocol
Exec=emacsclient %u
Type=Application
Terminal=false
Categories=System;
MimeType=x-scheme-handler/org-protocol;
EOF
そして↓。Linux MintでもOKだった。
update-desktop-database ~/.local/share/applications/
OSの設定は完了。Emacsの設定を追加する。template名をちゃんと設定する+ディレクトリが存在しないと起動しない。
(setq org-capture-templates `(
("p" "Protocol" entry (file+headline ,(concat org-directory "notes.org") "Inbox")
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?")
("L" "Protocol Link" entry (file+headline ,(concat org-directory "notes.org") "Inbox")
"* %? [[%:link][%:description]] \nCaptured On: %U")
))
Chromeに拡張機能をインストールしてクリックすると、Emacsが立ち上がる。
Linux Mint, Chromeにて。 org-protocolを設定できても、ドメインごとでxdg-openを許可しますかプロンプトが出るので面倒。 ポリシーを変更することで出さないようにする。
設定ポリシーは、chrome://policy/ で確認できる。最初は何もない。 ↓実行する。
sudo mkdir -p /etc/opt/chrome/policies/managed/ && echo '{ "URLAllowlist": ["org-protocol://*"] }' |sudo tee /etc/opt/chrome/policies/managed/whitelist.json
chrome://policy/ に表示されるのを確認する(再読込が必要)。 org-protocol使用時にプロンプトが出なくなる。
C-c C-q
で noexport
を指定するとその場所はエクスポートされない。
org-lint
をディレクトリに対して行う方法。
見出しにけっこうズレがある。そういうのを検知するLintがあるはずだ。
C-c
でチェックできる。
- 人としてやるべきこと [1/3]
- [X] 盆栽に水をやる
- [ ] 子孫に美田を残す
- [ ] 借金を返す
これが脚注[fn:1]である。 定義はどこに書いてもいい。 出力時にはFootnotesのアウトラインが作られてそこに挿入される。
[fn:1] The link is: https://orgmode.org
org-modeを使う理由。
かなりいい感じに表示する設定。
[[https://lists.gnu.org/archive/html/emacs-orgmode/2017-10/msg00227.html][Re: [O] Lint multiple files at once]]
org-mode運用法。
org-protocolの設定。
どういう意味なのか、全く思い出せない。 ああ、org-modeの使用例のページを作るということか。 別にいらないだろう。実際の例で示せばいい。別に見ないから不要だろう。
roamだと時系列、ブログ的に表現しにくいので、denoteを調べる。ほとんどは分野別ファイルで問題ないが、たまに必要なときがある。いい感じだ。
denoteリンクをHTMLエクスポートする方法がわからない。エラーになる。 リネームするときは denote-rename-file を使う。
予定関係をうまく使えてない。- effort表示をorg-agendaでできるようにした
- 目標値だけで、今どれくらいやったのかはわからないのが若干ビミョーだが…
- 週タスクを決めるためのビュー
- TODO一覧を見る
- 今週やると決めたものにeffortを設定する
- 今日(週)やることのビュー
- 週のscheduleの一覧が表示される
- 今日やることをWIPにして開始
- 2つ表示しようとしたが、面倒だったのでやめた
- scheduledがうまく設定できず。まああまり先に設定してもやらないので、まあやらなくていい。せいぜい今週がわかればいい
- effortでのフィルタはできたので、週にやりたいものはeffortを設定することにする