cheat sheet for mu4e
Table of Contents
Last modified: 20241015T1616+0900
emacsはメーラーとしても優秀。Mew, mu4e, notmuch, Wanderlust, Gnusなどの選択肢があるが、今はmu4e(とnotmuch)がアツいんではないか。
これらのメーラーを使う利点は、何といっても、emacsを使った通常業務との連携が抜群であること。emacsでメールを書けるのは当たり前だが、org-modeなどemacsの他のパッケージとメールが地続きになっている感覚は、なかなか爽快である。たとえば、
- org-agendaの予定に、mu4eのメール本文へのリンクを貼り付けておく。 (
C-c l
,C-c C-l
で可能) - mu4eでメールを読みながら、org-captureを使って、そのメールのリマインダや、関連する予定を作成する。(「明日返信」とか)
- 何度も参照するメールをemacs標準のbookmarkに登録し、すぐに参照できるようにする。(mu4eのbookmarkとは別)
- emacsで他の作業をしているときに、
C-x m
で、mu4eのメイン画面を経由せずに、新規メール作成画面を開く。 - diredで選択したファイルをメールに貼り付ける。
等々。
例によって、キーバインドが独特なので、慣れるまではこういったチートシートが必須だが、 dired
や org-mode
など他の有名パッケージとなんとなく共通しているので覚えやすい。最初は、基本的なものだけを覚えて、他は、必要になったら調べるというのでOK。
(言うまでもなくこのページは自分が参照するために作ってます。)
1. セキュリティーの関係で使えないとお悩みの方に
Gmailなどは、認証が厳しくなって、ツールを使ってメールの送受信をするのが難しくなっている。頑張って設定するのもロマンだが、困難を回避する簡単な道もある。
1.1. 送信
最近のemacsでは、送信を、OSデフォルトのメーラーに任せる設定ができる。
(setq send-mail-function 'mailclient-send-it) ; 送信はMail.appを使う
これを使えば、認証の問題は解決する。たとえば、Macだと、mu4eで作成したメールの内容を、送信の時点で、Mail.appのメール作成画面に貼り付けることができるので、Mail.appが動いているかぎり、認証の問題は生じない。
この場合、Mail.appは送信だけに使うので、Mail.appでアカウントの設定をしたら、そのアカウントをオフラインにすることをお勧めする。複数のメーラーをバックグラウンドで動かすとか、メールを複数の場所で管理するとかは、非効率で混乱のもとになる。(気にしない人は無視してください。)
1.2. 受信
isyncなどで受信できるようなメールサーバーに転送して、そちらから受信する。
2. emacsからマニュアルが読めるようにする
mu4eには詳細なマニュアルがあるが、homebrewでmuをインストールした場合などは、そのままではemacsのInfoから読めない。Web上のmu4e manual for version 1.12.5を参照してもいいが、emacsのInfoから読みたい場合には、mu4eのマニュアルがある場所を調べて、それをリストに追加する必要がある。
ターミナルで、
$ brew info mu
として出てきたインストール先のディレクトリの下、share/info/の下に、 mu4e.info.gz
が見つかったら、そのディレクトリを、以下のように追加する。これは、init.elで指定する。
(add-to-list 'Info-additional-directory-list "/opt/homebrew/Cellar/mu/1.12.6/share/info")
3. ヘッダー画面 (The headers view)
メールのヘッダーが並んでいる画面でのキー操作。Cf. 4.2 Keybindings
3.1. 基本操作
n p |
次のメッセージ 前のメッセージ |
] [ |
次の未読メッセージ 前の未読メッセージ |
} { |
次のメッセージ 前のメッセージ (n p と同じ) |
y |
ヘッダー画面とメッセージ画面を行き来する |
RET |
メッセージを開く |
3.2. 検索
以下はキー操作。検索で用いる表現は、 mu find
と共通する。7.1 Queries
s |
検索 |
S |
直前の検索語を編集 |
/ |
絞り込み |
b |
ブックマークを検索 |
B |
検索前にブックマークを編集 |
c |
検索語を補完 |
j |
メールディレクトリにジャンプ |
M-left |
前回の検索語へ |
M-right |
次回の検索語へ |
O |
並び替え順を変える |
P |
簡易or詳細検索をトグル |
3.3. マーク(メールの削除、未読管理)
diredと似ている。
d |
削除(ゴミ箱へ移動)マークを付ける |
= |
削除(ゴミ箱へ移動)マークを外す |
DEL D |
完全削除マークを付ける |
m |
別のフォルダへ移動するようにマークする |
r |
refiling用にマークする |
+ - |
フラグを付ける(外す) |
? ! |
未読(既読)にする |
u |
マークを外す |
U |
全てのマークを外す |
% |
正規表現でマークする |
T t |
スレッド全体(サブスレッド全体)をマークする |
x |
マークしたファイルをそれぞれ実行する |
3.4. スレッド
S-left |
ルートへ |
TAB |
現在のレベルのスレッド表示をトグル |
S-TAB |
全てのスレッド表示をトグル |
3.5. メールの作成
R,W,F,C | 返信、全員に返信、転送、作成 |
E | 下書きを編集 |
3.6. その他
a |
ヘッダに対して定義した操作を実行 |
C-+ C-- |
表示されるヘッダの数を増減 |
H |
ヘルプ(Infoを表示) |
C-S-u |
メールを更新 |
C-c C-u |
メールを更新 |
4. メッセージ画面 (The message view)
メールの内容が表示される画面でのキー操作。ヘッダー画面でのキー操作と同じものは省略。
Cf. 5.2 Keybindings
4.1. 基本操作
RET | 下へスクロール |
M-RET | カーソル位置にあるURLや添付ファイルを開く |
SPC | 下へスクロールして、最後まで来ると、次のメッセージに移動 |
S-SPC | 上へスクロール |
4.2. 操作
添付ファイルの操作は、org-modeのattachmentの操作に似ている。添付ファイルを確認するのは e
。
g | 番号付きURLをブラウザで開く |
C-u g | 複数のURLを開く |
f | 番号付きURLをダウンロード |
C-u f | 複数の番号付きURLをダウンロード |
k | 番号付きURLをキルリングに保存 |
C-u k | 複数の番号付きURLをキルリングに保存 |
e | 添付ファイルをアプリで開く・保存する |
a | 現在のメッセージに対して、定義したアクションを実行 |
A | 現在のメッセージの添付ファイルに対して、定義したアクションを実行 |
4.3. その他
z, Z | 通常は連動しているヘッダーとメッセージを分離させる(結び付ける) |
. | メールのソース(raw)を表示 |
5. 設定例 sample setting
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; mu4e.el (参考になりそうなところだけ抜粋) ;;; (add-to-list 'load-path "/opt/homebrew/share/emacs/site-lisp/mu/mu4e") (add-to-list 'Info-additional-directory-list "/opt/homebrew/Cellar/mu/1.12.6/share/info") (require 'mu4e) ;; use mu4e for e-mail in emacs (setq mail-user-agent 'mu4e-user-agent) ;; send-mail-function (setq send-mail-function 'mailclient-send-it) ; 送信はMail.appを使う ;; folders (setq mu4e-drafts-folder "/Drafts") (setq mu4e-sent-folder "/Sent") (setq mu4e-trash-folder "/Trash") (setq mu4e-maildir-shortcuts '( (:maildir "/INBOX" :key ?i) (:maildir "/Sent" :key ?s) (:maildir "/All" :key ?a) (:maildir "/Starred" :key ?r) (:maildir "/Drafts" :key ?d) ) ) ;; allow for updating mail using 'U' in the main view: (setq mu4e-get-mail-command "mbsync -a") (setq mu4e-update-interval 60) ;retrieve and index every 60 seconds ;; composing mails (add-hook 'mu4e-compose-mode-hook 'turn-off-auto-fill) ;; sending mails (setq message-confirm-send t) ;confirm before sending ;; make an original bookmark "flag" (add-to-list 'mu4e-bookmarks '( :name "flag" :query "flag:flagged" :key ?f)) ;; mu4eの中からorg-captureを使う(主にメール返信スケジュールの作成) (with-eval-after-load 'org-capture (add-to-list 'org-capture-templates '("s" "scheduled to rspond" ;返信する日をスケジュールする entry (file+olp+datetree "") "* TODO respond to %:fromname: %:subject\nDEADLINE: %T\n%a" :time-prompt t :immediate-finish t) ) (add-to-list 'org-capture-templates '("r" "Rspond in a day" ;1日以内に返信する entry (file+olp+datetree "") "* TODO respond to %:fromname: %:subject\nDEADLINE: %(org-insert-time-stamp (org-read-date nil t \"+1d\"))\n%a" :immediate-finish t) ) ) ;; mu4eからorg-captureを使うときはmu4eが用意した特別なコマンドを使う (define-key mu4e-headers-mode-map (kbd "C-c c") 'mu4e-org-store-and-capture) (define-key mu4e-view-mode-map (kbd "C-c c") 'mu4e-org-store-and-capture) ;; org-captureのメール返信スケジュールのためのキーは、mu4eの中からしか見えない (setq org-capture-templates-contexts '(("s" ((in-mode . "mu4e-headers-mode")(in-mode . "mu4e-view-mode"))) ("r" ((in-mode . "mu4e-headers-mode")(in-mode . "mu4e-view-mode")))))