Last modified: November 20, 2024, 9:25 pm
emacsのorg-journalだが、いろいろ試行錯誤して、結局、org-journalのdailyの作成時に、templateを読み込ませることにした。
(defun org-journal-date-format-func () "Custom function to journal date header" (insert-file-contents "./template_for_daily")) (add-hook 'org-journal-after-header-create-hook 'org-journal-date-format-func)
ファイルを作成してヘッダを挿入した時点で、テンプレートを読み込ませる。テンプレートの内容は今のところシンプルに次のようなもの。
** life - ** work - ** research -
ヘッダと時間は、自動で挿入しないように設定する。
(setq org-journal-time-format "") (setq org-journal-time-prefix "")
メモの右上の Last modified
の部分は、これまで、このページを表示するphpが書かれているファイルの更新日だったのだが、あまり意味がないので、このメモがあるディレクトリ全体で、一番新しいメモの更新日時を表示するように改良する。表示形式も、読みやすいように改める。
<?php /* ディレクトリ内のファイル一覧を最新順に取得して$outputに配列で格納 * $output[0]には最新のファイル名が入っているので、その更新時刻を取得して表示 */ date_default_timezone_set('Asia/Tokyo'); exec('ls -t -1 memo????????.html', $output); print '<p align="right">Last modified: '. date('F j, Y, g:i a', filemtime($output[0])) . '</p>'; ?>
結果は、
着順 | 馬番 | 馬名 | 単勝人気 |
---|---|---|---|
1 | 8 | ブローザホーン | 1 |
2 | 13 | サヴォーナ | 4 |
3 | 14 | サトノグランツ | 3 |
新春二連勝で三連複 3,040円。ヒンドゥタイムズは12着。
memo-latest.php
を作る。上のメニューには、 latest day
のボタンを配置。一日単位で見る場合にはこちらが便利だと思います。■品川 | のぞみ19号(N700S系) | 09:19-12:25[186分] ◇岡山 | しおかぜ11号(松山行) | 12:35-13:52[77分] ■伊予三島
■伊予三島 | しおかぜ24号(岡山行) | 16:55-18:11[76分] ◇岡山 | のぞみ50号(N700S系)(東京行) | 18:20-21:25[185分] ■品川
org-journalをdenoteに寄せる作業。journalファイルに、denote風のヘッダを付ける。具体的には以下のコードを追加する。
(setq org-journal-file-header "#+title:%t%A, %e %B %Y\n#+date:%t[%F %a %R]\n#+filetags:%t:journal:\n#+identifier:%t%Y%m%dT%H%M%S\n")
~/Dropbox/.diary/diary
にするか?
研究日誌について。emacs標準装備のcalendarの機能としてのdiaryを、研究日誌として使うことにしたが、ファイル名とその置き場所について考える。デフォルトは /.emacs.d/diary
なのでできれば変えたくないが、この日誌からメインのノートにリンクを張りたいので、割り切って、通常のdenoteのファイルとして日誌を作成し、そのファイルを diary-file
に格納する。
((setq diary-file "~/Dropbox/org/20240524T103226--research-journal__diary_index_journal_metanote_research.org"))
こうすると、この日誌自体がdenoteの対象となるので、denoteの機能をフルに使える。
C-x g
でmagitに入り、stage, commit, pushする。org-agenda-files
を、denoteで管理したい。予定の中に、denoteファイルへのリンクを張ったりしたい。たとえば、面談の予定があると、そこにその人のファイルへのリンクを張っておけば便利。diredに入ってそのファイルまで移動して、 org-store-link
( C-c l
)でリンクをコピーして、元のファイルに戻って org-insert-link
( C-c C-l
)という操作でそれは可能だが、ちょっと面倒。org-agenda-files
を denote-directory
のサブディレクトリとしてみる。意図したとおり、簡単に、予定ファイルにdenoteのリンクを挿入できるようになった。C-x C-a
とすると、メニューが現れ、任意のファイルをそのノードに添付してくれる。 org-sotre-link
と org-insert-link
を使うのと、ほぼ同じ結果になるが、添付ファイルの管理が自動的に行われるので、はるかに簡単で直観的。 cf. 10.2 Attachments
しかも、 denote-journal-directory
を org-agenda-files
に含めておくと、agendaを管理することにもなる。しかし単純にこれをやると、denoteのファイル名が長すぎるので、agenda viewが破綻する。解決するには、
#+category: denote
という行をヘッダ部分に書いておくことだが、これを自動で入れるにはどうすればいいか。
denoteのfrontmatterは、 denote-org-front-matter
という変数で管理されている。ストレートにそれを変更すると、
((setq denote-org-front-matter "#+title: %s #+date: %s #+filetags: %s #+identifier: %s #+category: denote " ))
こうなるが、ちょっとglobalすぎるか。巨大な denote-directory
を org-agenda-files
に含めることはありえないので、journalを書くときだけ、categoryを加えるのがいい。そうすると、新しいjournalを作成したときに、hookで書き込んでやるか。
((defun my-denote-insert-category () (insert "#+category: denote\n\n") )) ((add-hook 'denote-journal-extras-hook 'my-denote-insert-category))
これでしばらく様子を見てみよう。
d, x
や ~, x
がエラーとなる現象は、 delete-by-moving-to-trash
を nil
にすると治った。その後、 EmacsWikiのSystem Trashのページで情報を見つけて、 brew install trash
で trash
をインストールして、diredで消去したものは「ゴミ箱」に移動させるようにした。class.org
もdenote形式にした。C-c j
で org-journal-new-entry
を起動すると、エラーになる。テストで、昨日のファイルに予定を入れておいたのだが、それを削除すると、無事に起動する。time-headerを変更したりしているのがよくないのだろうか。予定は原則的に記入しない方針だからいいのだが。JRAの結果は、
1 | ブローザホーン |
2 | ソールオリエンス |
3 | ベラジオオペラ |
… | … |
6 | ドウデュース |
… | … |
10 | ジャスティンパレス |
あえて外したソールオリエンスが2着。人気の2頭はいずれも来なかった。雨が降り出して重馬場になったことが影響したか。
consult-notes.el
が優れているのに気付いて、キーを割り当てる。
:bind ( ("C-c n F" . consult-notes) ;Find ("C-c n g" . consult-notes-search-in-all-notes) ;grep )
2012年から2015年にかけて使っていたemacsのメモ書きパッケージであるhowmが、まだメンテされていることに気付き、懐かしくて再インストールしてみる。しかしなぜかうまく動かない。あれやこれや悩んでいると、grepの代わりにripgrepを入れたのだが、その設定をちゃんとしてないせいだった。以下のように設定すると無事に以前のように動く。独特の操作感が懐かしい。
(setq howm-view-use-grep t) (setq howm-view-grep-command "rg") (setq howm-view-grep-option "-nH --no-heading --color never") (setq howm-view-grep-extended-option nil) (setq howm-view-grep-fixed-option "-F") (setq howm-view-grep-expr-option nil) (setq howm-view-grep-file-stdin-option nil)
M-x calc
で起動して、先に数字を入力してから演算子を入力する形で計算する。マニュアルを見ると、非常に高度な計算もできるらしい。iPhoneの計算機を起動するのが面倒なときに使えそうだ。C-x C-e
でelispを評価するのは知っていたが、*scratch* バッファで C-j
とやるのと大差ないだろうと思っていた。しかし、 C-x C-e
は、どのファイルからも使えるのが大違いで、これを使えば、あらゆる文書にハイパーリンクを埋め込める。たとえば、 (shell-command "open ~/Dropbox/abc.xlsx")
と書いておけば、 C-x C-e
で、エクセルが起動して abc.xlsxというファイルが開かれる。こういう機能は、org-mode系の得意分野で、tex系は不得意だと思っていたが、このやり方を使えば、texのソースにもハイパーリンクを書いておける。emacsql
を使うのに、古い emacsql-sqlite
が残っていて邪魔をしていたせいだった。 emacsql-*
を含むパッケージを全てアンインストールすることで解決する。削除すべきパッケージを使った場合に、エラーメッセージが出るようになっているようだが、そのメッセージを出すプログラムのコメントアウトができていなくて、コメント部分をコードと判断して実行エラー(there is no variable This)が出ていたみたいだ。こちらでは特に何も設定していないので、同じ症状で困っている人も多いんではないか。C-c C-f
次の日の日誌、 C-c C-b
前の日の日誌、 C-c C-s
検索、と操作も統一感がある。 C-u C-c j
で、その日の日誌を別ウインドウに開くのも使い勝手がいい。モバイルバッテリー関係を整理する。旅行用に、日常使いとは独立したセットを用意する方がいいかもしれないが、煩雑だ。
device | device side | power side |
---|---|---|
Apple Watch | special | USB-C |
iPhone 13 | lightning | any |
Kindle | USB-C | any |
mobile battery | USB-C | any |
Air Pods | USB-C | any |
notmuchの整備はほぼ終了。 mbsync
でメールを取ってきて、 notmuch new
でインデックスを付け、受信箱を表示するという手順を毎回やるのは面倒なので、そこを自動化する関数を書く。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; my_fetch_and_show_mail ;; (defun my_fetch_and_show_mail () "execute mbsync -a, notmuch new, and show unread messages in notmuch" (interactive) (shell-command-to-string "mbsync -a") ;メールを取ってきて (shell-command-to-string "notmuch new") ;tagを付けて ;; (message "%s" (shell-command-to-string "notmuch count tag:unread")) ;未読数をミニバッファに表示 (notmuch-search "tag:unread") ;未読メールを表示する )
emacsが起動したら、org-agendaとnotmuchとeshellが三つのタブで開いていて欲しい。ちょっと調べたら、簡単にできることがわかった。こんな感じで、開くタブで実行するコマンドを指定してから、 tab-new
でタブを開いていくだけ。emacs27.1から実装されているらしい。しかしもう少しスマートにできないものか。
(setq tab-bar-new-tab-choice 'eshell) (tab-new) (setq tab-bar-new-tab-choice 'notmuch) (tab-new) (setq tab-bar-new-tab-choice 'org-agenda-list) (tab-new) (setq tab-bar-new-tab-choice "*scratch*") ;手動で新しいタブを開くときは*scratch*を開く
emacsのtab-modeの整備。ポイントはキー操作か。今のところの割り当て。コマンドキー+矢印キーで、タブの移動と開閉ができるようにした。あと、コマンドキー+リターンキーで、開いているタブのリストを表示して選択できる。
("s-<right>" . tab-next) ("s-<left>" . tab-previous) ("s-<up>" . tab-new) ("s-<down>" . tab-close) ("s-b" . switch-to-buffer-other-tab) ("s-n" . tab-new) ("s-o" . tab-next) ("s-w" . tab-close) ("s-<return>" . tab-switch)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; my/mailcheck.el ;; (defun my/mailcheck () "show unread mails if any" (interactive) (shell-command-to-string "mbsync sakura") (shell-command-to-string "notmuch new") (setq mails (substring (shell-command-to-string "notmuch count tag:unread") 0 -1)) (if (equal "0" mails) (message "No mail") (notmuch-search "tag:unread") (message "%s unread" mails) ) )
:unfixed:
というタグを付けて予定を記録する。通常のagenda-viewの下に、unfixed todoを表示するように、org-agenda-custom-commandsをセット。
(setq org-agenda-custom-commands '(("A" "my Agenda view" ((agenda "") (tags "unfixed")))))
このcustom-commandをinit.elから呼び出すには、以下のようにする。
(org-agenda nil "A")
vertico-multiform-commands
を設定することで、操作感が格段に上がることがわかる。BBDBの整備。ちゃんとしたマニュアルがないので難易度が高い。今のところの整備状況は次の通り。(現状ではnotmuchで使っているが、mu4eやGnusなどでも使える)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; bbdb.el ;; (use-package bbdb :ensure t :init (setq bbdb-file "~/Dropbox/.bbdb") (bbdb-initialize 'notmuch 'message) (bbdb-mua-auto-update-init 'notmuch 'message) :hook (mail-setup . bbdb-mail-aliases) (message-setup . bbdb-mail-aliases) :custom (bbdb-mua-auto-action 'query) (bbdb-mua-update-interactive-p '(query . create)) (bbdb-message-all-addresses t) (bbdb-north-american-phone-numbers-p nil) (bbdb-use-pop-up nil) (bbdb-complete-name-allow-cycling t) :bind (:map notmuch-show-mode-map (";" . bbdb-mua-edit-field) (":" . bbdb-mua-display-sender) ) (:map notmuch-tree-mode-map (";" . bbdb-mua-edit-field) (":" . bbdb-mua-display-sender) ) )
これで、メールアドレスをデータベースに自動で追加して、メール作成時にそのアドレスを使って補完ができる。グループメールにも対応。Gmailのコンタクトをインポートできるので、一からデータベースを作る必要がない。かなりの優れもの。だれかがきちんとしたマニュアルを書けばもっと評価されるだろうに。