org-mode
Memo
pandocでディレクトリ内のorgファイルを1つのPDFにする
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]という感じ。
easy templates
<q tag
でquote blockを展開できる- <s tag でsource code blockを展開できる
orgエレメントの情報を取得する
org-modeをパースした結果が保持されているので、APIによって簡単に扱うことができる。
(org-element-context)
(src-block (:language emacs-lisp :switches nil :parameters :results raw :begin 530 :end 622 :number-lines nil :preserve-indent nil :retain-labels t :use-labels t :label-fmt nil :value (org-element-context) :post-blank 1 :post-affiliated 553 :caption (((細かい情報を取得できる))) :parent nil))
org-modeが各エレメントをどのように扱っているか少し想像がつく。
(org-element-type (org-element-context))
src-block
orgファイルからkeywordsを取得する
(org-collect-keywords)を使うとorgファイルの情報を取得できる。
https://github.com/kd-collective/org-roam/blob/abe63b436035049923ae96639b9b856697047779/org-roam-db.el#L299-L309
(defun org-roam-db–file-title () “In current Org buffer, get the title. If there is no title, return the file name relative to `org-roam-directory’.” (org-link-display-format (or (cadr (assoc “TITLE” (org-collect-keywords ’(“title”)))) (file-name-sans-extension (file-relative-name (buffer-file-name (buffer-base-buffer)) org-roam-directory)))))
(defun org-roam-db-insert-file ()
メモをつける
タスクの状態が遷移したときに、メモを開く設定ができる。
: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も変更する
org-alertで通知する
spegoraro/org-alert: System notifications of org agenda items org-alertでDEADLINEが近い見出しを通知できる。 期限設定していても、通知されなければ忘れる。 スケジュール管理に使うのであれば必須か。
babelのヘッダーを挿入する
ヘッダーでbabelの実行結果のオプションを変えることができる。
#+BEGIN_SRC emacs-lisp :result outputs (concat "hello" "world") #+END_SRC
で実行すると標準出力が挿入される。
手書きは忘れやすいのでコマンドでやる。
コードブロック上で C-c C-v j
:: org-babel-insert-header-arg
。
babelで結果をそのまま表示する
適用させたい見出しレベルのproperty内で、↓追加する。
:header-args+: :results output
動作の違い。
[1, 2]
1 | 2 |
p [1, 2]
[1, 2]
org-protocolを設定する
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が立ち上がる。
org-protocolでプロンプトを出さないようにする
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
を指定するとその場所はエクスポートされない。
Tasks
TODO org-lintをCIで実行する
org-lint
をディレクトリに対して行う方法。
TODO ファイルごとの形式を正規化する
見出しにけっこうズレがある。そういうのを検知するLintがあるはずだ。
Reference
Why and How I use “Org Mode” for my writing and more
org-modeを使う理由。
zzamboni.org | Beautifying Org Mode in Emacs
かなりいい感じに表示する設定。
Org-mode Workflow: A Preview · Jethro Kuan
org-mode運用法。
Archives
CLOSE exampleを完成させる
どういう意味なのか、全く思い出せない。 ああ、org-modeの使用例のページを作るということか。 別にいらないだろう。実際の例で示せばいい。
CLOSE org-pomodoro完了後メモを残すように設定を復活
別に見ないから不要だろう。
DONE denoteを調べる
roamだと時系列、ブログ的に表現しにくいので、denoteを調べる。ほとんどは分野別ファイルで問題ないが、たまに必要なときがある。いい感じだ。
denoteリンクをHTMLエクスポートする方法がわからない。エラーになる。 リネームするときは denote-rename-file を使う。
DONE Agenda Viewの整理
予定関係をうまく使えてない。
- effort表示をorg-agendaでできるようにした
- 目標値だけで、今どれくらいやったのかはわからないのが若干ビミョーだが…
- 週タスクを決めるためのビュー
- TODO一覧を見る
- 今週やると決めたものにeffortを設定する
- 今日(週)やることのビュー
- 週のscheduleの一覧が表示される
- 今日やることをWIPにして開始
- 2つ表示しようとしたが、面倒だったのでやめた
- scheduledがうまく設定できず。まああまり先に設定してもやらないので、まあやらなくていい。せいぜい今週がわかればいい
- effortでのフィルタはできたので、週にやりたいものはeffortを設定することにする
Footnotes:
The link is: https://orgmode.org