LoginSignup
2
2

More than 5 years have passed since last update.

Emacs: 小物色々 (Mew 編)

Last updated at Posted at 2018-05-05

Mew の機能を拡張する小物です。

特定キーワードのハイライト

メール中の特定キーワードに色付けできます。
利用法としては発送案内等の定型文メールの中から、運送会社等知りたい情報だけすぐ視認できる等があります。

インストール

.mew.elinit.el 等に以下を追記します。

match-highlight.el
(defvar mew-match-highlight-face 
  (defface deeppink-face '((t :foreground "DeepPink" :weight bold)) "DeepPink."))

(defvar mew-match-highlight-word-list nil)

(defun match-highlight (&optional word face)
  "buffer 内で WORD-LIST にマッチした文字列すべてをハイライト表示。"
  (let ((regexp (regexp-opt (or word mew-match-highlight-word-list)))
        (face   (or face mew-match-highlight-face)))
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward regexp nil t)
        (overlay-put (make-overlay (match-beginning 0) (match-end 0)) 'face face)))))

(add-hook 'mew-message-hook 'match-highlight)

基本設定

変数 mew-match-highlight-word-list にハイライトしたいワードをリストで設定します。
このワードを関数 regexp-opt でひとつの正規表現にするので、メタ文字を使うとおかしくなるかもしれません。

(setq  mew-match-highlight-word-list
       '("ヤマト" "日本郵便" "カトーレック" "佐川"
         "有効期限" "SBS即配サポート" "デリバリープロバイダ"))

デフォルトではピンクのボールドになります。
変更したい場合は mew-match-highlight-face にフェイスを設定してください。

(setq mew-match-highlight-face 'highlight)

補完リストを更新順にする

メールフォルダ名を補完したときの候補リストが更新された順になります。
振り分けてどこかにいってしまったメールを探すとき探しやすくなります。

本当は補完自体を ido で丸々置き換えたかったのですが、 mew の方が古くからあるツールなので、補完ルーチンを自前で持っていて、簡単に差し替えできず断念しました。

以下を .mew.elinit.el 等に以下を追記します。

mew-local-folder-time-alist.el
(advice-add 'mew-local-folder-alist :after 'mew-local-folder-time-alist)
(defun mew-local-folder-time-alist ()
  (setq mew-local-folder-alist
    (sort
     mew-local-folder-alist
     #'(lambda (a b)
         (time-less-p
          (sixth
           (file-attributes
        (concat mew-mail-path (replace-regexp-in-string "\\+" "/" (car b)))))
          (sixth
           (file-attributes
        (concat mew-mail-path (replace-regexp-in-string "\\+" "/" (car a))))))))))

メール中の URL をブラウザで一気に開く

テキストメールの中に書かれた複数(またはひとつ)の URLアドレスを一発ですべて開きます。
文脈によって除外するアドレスの指定ができます。

ダウンロードとインストール

これは少し大きいのでこちらに置いてあります。

これを load-path の通ったところに置き .mew.elinit.el 等に以下を追記します。

(require 'browse-open-all-url)
(add-hook 'mew-summary-mode-hook
      '(lambda ()
             (local-set-key [remap mew-summary-execute-external] 'browse-open-branch)))

C-c C-e
HTML なら Mew デフォルトの mew-summary-execute-external に渡し、通常メールならこの browse-open-all-url を起動するよう振り分けられます。

除外リスト

browse-open-ignore-word-list に正規表現リストで指定します。
メールの中の URL が書かれた行とそのひとつ前の行に指定キーワードが含まれていれば、その URL が除外されます。

(setq browse-open-ignore-word-list
      '("パス" "登録" "変更" "解除" "問い合" "修正" "停止" "マイページ"
        "いいね" "シェア" "TERMS" "PRIVACY" "POLICY" "UNSUBSCRIBE"
        "facebook" "twitter" "line" "unsub_center" "antispam" "profile_center"
        "link.rakuten" "news.html" "/auctions.yahoo.co.jp/"))

細やかな設定

通常日本のメールの場合「解除」等の文言は アドレスの1行前か、アドレス先頭に書かれているので、デフォルト(before)でだいたい問題ないのですが、海外のものだとアドレスの後に書かれいるもの等も存在するので、なるべく狙った動作になるよう From: によって見る箇所をコントロールできるようにしてあります。

car にはメアドを指定し、 cdr で指定する範囲指定のキーワードは以下の表の通りです。

キー 範囲
just アドレスのみ
before アドレス行と 1行前
here アドレスを含むその行
after アドレスとその 1行後
around アドレス行と1行前と後

以下の場合 メールアドレスに "foo" が含まれていれば アドレスの行とその次の行を対象にします。

(setq browse-open-scan-direction-alist '(("foo" . after)))

いくつか指定したい場合以下のようにリストにして追加します。

browse-open-all-url.el
(setq browse-open-scan-direction-alist '(("foo" . after) ("bar" . around) ("baz" . just)))

トラッキング

仕様として洗練されていないのですが、HTTPパターン以外に数字列12桁にもマッチするようになっていて、数値12桁だった場合その数値の前に
browse-open-url-search-prefix で設定された文字列を付け足してブラウザに渡します。
トラッキングサーチ用です。

動作確認している Emacs と Mew のバージョン

GNU Emacs 25.3.1 (i686-w64-mingw32) of 2017-09-18
Mew version 6.7

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2