雑文発散

«前の日記(2014-08-12) 最新 次の日記(2014-08-14)» 編集
過去の日記

2014-08-13 [長年日記]

[Emacs] Mew で受信したメール内のリンクを eww で開く

個人所有のドメイン宛に届くメールは Emacs Lisp で書かれた Mew で読み書きしている。

メール内のリンクを開くのに、Chrome などの外部ブラウザを使っていたんだけど、そういえば eww でできるんじゃないか?と思って調べてみた。

サンプルのメールはこんな感じ。これはテキストとHTMLのマルチパートメールのテキスト部分が表示されているところ。

メールの内容

このメール内の URL にカーソルを合わせて、g キーを押すと、裏で mew-browse-url-at-point が実行される。

標準では、システムが優先するブラウザ(オレの場合だと Chrome)で該当の URL を開く動作になるけど、mew-browse-url-at-point が内部で使っている browse-url.el の設定を変えてあげれば良いのだと知った。

次のように browse-url-browser-functioneww-browse-url に設定してやれば良いようだ。

(setq browse-url-browser-function 'eww-browse-url)

こうすると、Mew で読んでいるメール内の URL に合わせて g キーを押すと、Emacs 内部に eww を使って表示される。

リンクを eww で開いた

ウインドウの切り替えとかが発生しなくなるので、ちょっとした確認ならこちらの方が便利かもなぁ。しばらくはこれで使ってみよう。

本日のツッコミ(全6件) [ツッコミを入れる]
Emacs-Lover (2014-11-12 01:12)

Emacs24.4 + Mewで、HTMLのシングルパートメールもしくはマルチパートメールのHTMLパートで<br>"." (mew-summary-analyze-again)実行時のEmacs内表示を、w3m + emacs-w3mの代わりにewwで、<br>実現することはできないでしょうか。

Emacs-Lover (2014-11-13 09:58)

お騒がせしています。前件の「w3mによらない、HTMLパートのEmacs内レンダリング」は自己解決した?かもです.

すずき (2014-11-13 22:36)

おお、反応できておらずすみません。もし良かったら、どのように解決できたのか教えて頂けませんか??

Emacs-Lover (2014-11-14 23:09)

(mew-summary-analyze-again)実行時に呼ばれ、HTMLなMIMEパートを処理しデフォルトが<br>mew-mime-text/html-w3m関数であるmew-prog-text/htmlを、ewwのベースでshrパッケージの<br>shr-render-region関数に設定し(なおし)ただけです。<br><br>ただし、shrパッケージでshr-render-region関数は24.4から新たに定義されたこと、<br>emacs-w3mの存在による不具合有無は深く追っていないため、emacs-w3mパッケージを導入せず<br>.mewでのその関連設定が機能しないようにした上、安全のために以下のように実際にはしています。<br>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>;;;<br>;;; Using "shr" (Simple HTML Renderer) for in-frame HTML rendering<br>;;;<br>;;; The \\[shr-render-region] is newly introduced since Emacs 24.4.<br>;;;<br>;;; The "emacs-w3m/mew-w3m" package w/ "w3m" is no longer needed.<br><br>(when (and (fboundp 'shr-render-region)<br> ;; \\[shr-render-region] requires Emacs to be compiled with libxml2.<br> (fboundp 'libxml-parse-html-region))<br> (setq mew-prog-text/html 'shr-render-region)) ;; 'mew-mime-text/html-w3m<br><br>マルチパートメールのHTMLパートのレンダリングのみ追って行なった上述の設定は、HTMLのシングル<br>パートメールにも有効のようです。(ここも深く追っていません。結果的に良さそう、としました)<br><br>「自己解決した?かも」と言ったのは、最後の1行のような設定で果たして本当によかったのか、<br>副作用はないのか、については自信がないからです。<br><br>いかがなものでしょうか。

すずき (2014-11-15 10:15)

こちらでも試してみました。うまく動いているように見えます!<br><br>Mew の内部については、僕もあまり詳しいわけではないのですが、<br>変更するなら mew-prog-text/html の上書きだよなぁとは思っていました。<br><br>だいぶ良いのではないかと思います!<br>情報ありがとうございました!

Emacs-Lover改め Emacs&Mew-Lover (2014-11-16 12:51)

このスレの本題に近づく話ですが、<br>URLが dokosoko/doresore.html(arekore1/arekore2) で「(arekore1/arekore2)」はURLの一部ではなく<br>単なるこちらの注釈の場合、Emacs 24.3までは `thing-at-point-url-path-regexp' をデフォルトの<br>"[^]\t\n \"'<>[^`{}]*[^]\t\n \"'<>[^`{}.,;]+" から「()」を2箇所追加して<br>"[^]\t\n \"'()<>[^`{}]*[^]\t\n \"'()<>[^`{}.,;]+" に設定・変更することで、<br>"g" (mew-browse-url-at-point) に限らず (mew-browse-url-at-mouse) や<br>(browse-url-at-point)、(browse-url-at-mouse) も、「(arekore1/arekore2)」部を除いたもの<br>dokosoko/doresore.html をURLとして返してくれていました。<br><br>Emacs 24.4では、`thing-at-point-url-path-regexp' を前記のいずれに設定しても「(arekore1/arekore2)」部を<br>除いてくれません。同変数周りの定義が変わっているのは見て取れるが、対策がわかりません。<br><br>ヒントがあればお願いします。