添付された PDF を emacs内 で見れるようにするには?

428 views
Skip to first unread message

KIRIHARA Masaharu

unread,
Apr 5, 2022, 9:02:12 AM4/5/22
to mew...@googlegroups.com

再び桐原です.

メールに添付された PDF を DocViewモード など emacs内 で
見れるようにするには,どうしたらよろしいでしょうか?

================================================================
--- mew-mime.el.orig Mon Jul 02 20:17:44 2018
+++ mew-mime.el
@@ -596,15 +596,18 @@
(mew-mime-part-messages t)
(message "Displaying a PDF document...failed"))
(setq file1 (mew-make-temp-name))
+ (setq file1 (concat file1 ".pdf"))
(with-current-buffer cache
(mew-flet
(write-region begin end file1 nil 'no-msg)))
(setq file2 (mew-make-temp-name))
(call-process prog nil nil nil "-layout" "-enc" "UTF-8" file1 file2)
+(if (not t) ;;;;;; Set t if viewing pdf. Set nil if viewing text.
(when (file-exists-p file2)
(mew-frwlet 'utf-8 mew-cs-dummy
(insert-file-contents file2)))
- (if (file-exists-p file1) (delete-file file1))
+(find-file file1)) ;;;;;; To view pdf under doc-view mode
+; (if (file-exists-p file1) (delete-file file1))
(if (file-exists-p file2) (delete-file file2))
(message "Displaying a PDF document...done"))))

================================================================

とりあえずこの修正で DocViewモード で見れるようになりますが,
<0> (あたりまえのことですが,DocViewモード が使えるようにするため,
Ghostscript をインストールする必要がある.)
<1> 上記の修正では t/nil がハードコーディングされている.
<2> 使っていない pdftotext がインストールされていないといけない.
<3> メジャーモードで開いているためなのか,Mew/Emacs を終了する時,
開いている PDF のバッファを C-x C-b 等で消去しなければ
ゴミ として残ってしまう.
および,次のメールを見ようとした時,開いている PDF のウインドウは
そのままで,Summaryモード のウインドウを分割して
Summaryモード と Messageモード を表示しようとする.
# 当方,emacs lisp のプログラムを(本格的に)したことがないので,
# メジャーモードとかマイナモードとかはよく知らないです.
<4> emacs に付随している DocViewモード では,
それ専用の ディレクトリ/フォルダ を作り,
それはEmacs を終了する時には削除されない.
などといった点が非常に気になります.


<1> は,mew-vars.el かどこかのファイルに,例えば
(defvar mew-pdf-docview nil)
としておいて,~/.emacs.d/init.el とかに必要に応じて
(setq mew-pdf-docview t)
とすればいいと思っています.
# 変数名は適当に変えて定義してください.


<2> は上記の新たに定義した変数を使って適当に条件分岐等を変えたら,
うまく解決できると思っています.


<3> が一番の問題で,
上記の通り emacs lisp でプログラムしたことがないので,
どなたか解決して頂きたい,と思っています.


<4> は,例えば pdf-tools ( https://github.com/politza/pdf-toolshttps://github.com/vedang/pdf-tools )
をインストールすれば解決できます.
(そして同時に <0> も解決できます.)


というところまでは出来たのですが,
誰か <3> (および <1>,<2>) を解決して頂けないでしょうか?
もしくは,修正のヒントを示して頂けないでしょうか?


################
経緯

PDF添付のメール は,当方 Windows を使っていることもあり fiber.exe を使って
添付された PDF を見ていました.

ある時,TeXLive をインストールしたら pdftotext もインストールされたようで,
テキストで見れるようになりました.
そして,TeXLive には ghostscript (とそのラッパー) があり,試しに PDFファイル を
emacs で開くと DocViewモード でPDF が見れることを確認しました.

ただ <4> のように ゴミ が残るので他の方法がないか探していたところ,
pdf-tools がよさげなので,Windows でなんとか使ってみたいと思っていました.
すると最近 msys2 でバイナリ (epdfinfo.exe) が更新されたようで,
pacman -S mingw-w64-x86_64-emacs-pdf-tools-server
としてバイナリをインストールし,MELPA Stable で emacs lisp をインストールすると
Windows(の MSYS2 MinGW x64)上 で pdf-tools が使えるようになりました.
## ちなみに poppler に依存しているので pdftotext.exe もインストールされます.

そこで,mew に PDF添付のメール の PDFの部分 を pdf-tools で見れるようにできないか,
と,mew に修正を加えました.
が,自分の力ではこれ以上のことはできず,この投稿に至った訳です.


よろしくお願いします.

---
KIRIHARA, Masaharu

KIRIHARA Masaharu

unread,
Oct 10, 2025, 7:00:38 AMOct 10
to mew...@googlegroups.com

桐原です.
# ML へ参加する e-mail address を変えました.

Date: Tue, 05 Apr 2022 22:01:53 +0900 (JST)
> そこで,mew に PDF添付のメール の PDFの部分 を pdf-tools で見れるようにできないか,
> と,mew に修正を加えました.
> が,自分の力ではこれ以上のことはできず,この投稿に至った訳です.

なんとか作ってみました.
https://github.com/kazu-yamamoto/Mew/pull/209

Mew ver. 6.10 で作成したので,このパッチを ver. 6.10 に当てて,~/.emacs.d/init.el 等に
(setq mew-pdf-tools-use t)
と書けば,pdf-tools を使って 添付PDF が見れるようになります.(デフォルトは nil )

## 以下の環境で動作確認をしました.
## ・ Mew 6.10 + pdf-tools 1.1.0 on Emacs 30.2 in Windows 11 with MSYS2
## ・ Mew Git + pdf-tools 1.1.0 on Emacs 30.2 in Windows 11 with MSYS2
## ・ Mew 6.10 + pdf-tools 1.1.0 on Emacs 29.4 in NetBSD 10.1
## ・ Mew Git + pdf-tools 1.1.0 on Emacs 29.4 in NetBSD 10.1

pdf-tools で必要な実行ファイル (epdfinfo) の有無を確認しています.
(mew-var2.el の mew-pdf-tools-installed-p 関数で有無を確認しています.)
その実行ファイルは ELPA 等で pdf-tools をインストールし,
初めて PDF ファイルを開けばコンパイルして作成してくれます.
もしくは,(Windows の MSYS2 のように) 実行ファイルそのものを
インストールしてもいいです.
どのような PDF ファイルでもいいので,それが pdf-tools で開けるかどうか,を
確認した後に,PDFを添付したメールを見てみたらいいでしょう.


ただし,PDF を表示するバッファが *Mew message*0 ではなく
別の新たなバッファを作成しそこで表示するため,
‘SPC’を押していけば PDF がスクロールして PDF のすべてが見れる,
とはならず,
PDF の最初の画像が表示された後‘SPC’を押したら次のメッセージを表示する,
となります.
また,PDF を見ようとすると emacs が warning等 を出力する関係で
PDF が見れない時は,C-x C-b 等で PDF を表示しているバッファに
移動すればいいでしょう.


PDF が表示された状態で C-x o 等で PDF が表示されたバッファに移動すれば,
C-n , C-p , n , p などの pdf-tools のキー操作ができます.


### メジャーモードで PDFファイル を開いているので
### 先述の通り新たなバッファを作成するのですが,
### 添付画像ファイル の表示のように *Mew message*0 で表示させるには
### 本格的に pdf-tools のソースファイルを解読/理解しないといけないと思われ,
### かつ,pdf-tools は GPL3 ということもあり
### (= Mew のライセンスとは相容れないと思われ) ,
### これ以上はやる気が出ないでいます….

---
KIRIHARA, Masaharu (桐原正治)

KIRIHARA Masaharu

unread,
Oct 11, 2025, 10:25:40 AMOct 11
to mew...@googlegroups.com

桐原です.

> なんとか作ってみました.
> ・ https://github.com/kazu-yamamoto/Mew/pull/209

終了時に pdf-tools の作成した /tmp 内のディレクトリが殘っていたので,
それを削除するように一行追加しました.
上記の pull request のページをご覧ください.

++++++++++++++++++++++++++++++++

> # ML へ参加する e-mail address を変えました.

昨日とこの e-mail が皆さんに届いていると信じています….
# 昨日の e-mail では [mew-ja] が Subject: につかなかったのですが….

---
KIRIHARA, Masaharu (桐原正治)

Reply all
Reply to author
Forward
0 new messages