Wanderlust on OS/2 PMMule2.3 / EmacsPM20.2

ここは、環境依存しない汎用的な話題、ちょっと突っ込んだ技術情報、OS/2 に特化した話、その他のゴミ、が入り交じったアジア的カオス状態です。肩ひじ張らないページ構成を目指していますので、気楽に覗いてください;-p

[PL 法に基づく(特に非畿内人に対する)使用上の注意事項]

;; 1.  応仁の乱以来、同じ所(隣町は河内)に住んでいるため、時々 畿内語が混じります。
;; 2.  根っからの畿内人なので時々ボケてツッコミ入れたりアホなことも書きます。
;; 3.  生まれてこのかた畿内人なので「謎」も多いです(謎)。
;; 4.  毒に当たっても、処方箋はありません(皿まで喰らうしかないらしい)。

[Wanderlust ことはじめ]

Mew/IM は確かに好きなんだけど、Mew を使いたいのは何故かと考えたら、

    ユーザ・インターフェイスが好み
    キーバインドに慣れてしまった

だけのことで、似た UI とキーバインドであれば、別に Mew そのものでなければならない必然性はあまりない、ということに思い至りました。Emacs20.2 for OS/2 のテスト公開版では Mew だけが安定しなかった、というのも大きな原因ではあります。

;; リリース版で比較的安定したけど、やっぱりそのうち core 吐いて落ちる (^-^;;

ただ、
    Gnus は 2.3@19.28 の時に 5.0.15 でさんざん苦労させられたので触らないことに決めた、
    mh-e はダサ過ぎるので今更使いたくない、
    VM は1フォルダ1ファイルな点だけが好みではない、
    cmail は重いし厭(1フォルダ1ファイルだからやむを得ないけど)、
    rmail なんぞ、過去の産物じゃい
ということで、他に乗り換えられずにいました。それにメイルだけ、なんてのは避けたいですし。

しかし、今や(αとは言え、)Wanderlust があります:-)
絶えず高速化/安定化を目指して改良されているので、初心者の方にも安心してお勧めできる状態になりました。

え、OS/2 Emacs20.2 上ではどんなんかって? では、お約束の 「ウリウリ、こんなん、でやっ!画像」 (44,367 bytes) をご覧ください(笑)おもいっクソ派手でっしゃろ ;-p 使って楽しい、というのは日常的に使う上でとても重要だと思います。が、それだけでなく機能も充実してるってことは、、実際に試してみてのお楽しみ :-)

さて、OS/2 上での使いこなし、などというものは実はないです(^-^;; 圧縮フォルダ以外は全て elisp のみの実装なので、もともとが非常にポータブルなわけです。PM専用版 Mule2.3 や OS/2 Emacs20.2 でも全く問題なく動きます。というわけで、使いこなしについては津邑さんとこ村田さんとこが参考になると思います。概要や設定全般については寺西さんとこを見てね。既にソースを持ってるならば、立派な日本語 Info があるのでそちらもご覧ください。

[みんなでバックエンドを作るのじゃ〜]

取りあえず、バックエンドの作り方を備忘録を兼ねて置いておきます。不備や誤謬があればご指摘くださると嬉しいです。これが新規バックエンド作成に際して少しでも役に立てば幸いです。
;; UNIX MAIL/MMDF mbox と SQL と MHonArc 誰か書いてくれ〜 (^-^;

[OS/2 特化機能を密かに紛れ込ませてみる:-p]

先ほど、OS に特有の話はない、と書きましたが、実は一つだけ OS/2 だけの最適化機能があります。圧縮フォルダで Info-Zip を使っている場合がそれで、UnZip32.DLLizwlagent.cmd から叩いて高速にメッセージデータベースを作ります(unzip.exe を使う場合に比べて 30% 強の高速化)。ただ、start-process() で非同期にすると、疑似端末(PTY, pseudo TTY) が使えない場合(要するに標準的な佐々木版 PMMule2.3@19.28, Emacs20.2 のどっちもが当てはまるってことだ)に標準入力の REXX 側の扱いが問題になる(stream を LINEIN() で全部読むため、REXX 内部で無限ループに陥る。PTY が無効な環境では start-process() はパイプを使ってサブプロセスと通信するしかないので、当然と言えば当然な結果なんやけど、C だとこうはならへんので納得いかん)ことが判明したので、非同期化する時に elisp とともに改造する予定です。
また、現時点では実装していませんが、izwlagent 側の GREP 機能(RxJIS.DLL で日本語対応)を利用するコードを elmo-archive-search() に追加します。これらは TODO の中でも優先度が高いです。
なお、izwlagent を使う機能は OS/2 であればデフォルトで有効になります。これを殺すには
     (setq elmo-archive-use-izip-agent nil)
~/.wl または ~/.emacs に入れておいてください。

[WL との出会い・「ふ」の活動(暇人向け)]

Wanderlust(以下 WL)は、そもそも IMAP 対応のために書かれたものですが、僕が使い始めた v0.2.0 当時から MH/IM のローカルフォルダ、NNTP へのアクセスもできるというものでした。当時は MH/IM のフォルダは検索できなかったものの、Gnus5 と同じバックエンド方式を採用していることに次世代のアーキテクチャを認め、将来性を感じました。また、MULE2.3@19.28 をもサポートし、開発が進行中の新鋭 MUA としては貴重な存在だと思いました。Gnus,VM とも Emacs19.2x はおろか、VM になると FSF Emacs そのものが対象外だったわけですから。
また何よりも、作者の寺西さんが X-Face ネタとか Mew/IM 開発者用 ML で一緒だったとかで親近感があったのと、Mew 的なキーバインドが気に入りました。見た目は生の Mew とは大きくかけ離れていますが、それ以前から RxLocalProm-Mew を組み合わせて使っていたので、UI 面でも全く違和感を持ちませんでした。慣れ親しんだ環境から別の環境へ移行する時には、この二点が非常に重要です。というわけで、(作者には失礼ながら)tm/SEMI 上の Yet Another Mew として使い始めました。今は、WL そのものの機能と派手さで気に入っています :-)
因みに、tm/SEMI の UI(中身じゃないですよ、あくまで見た目と操作性)は正直なところ、好みではありません。emu は無条件に好きなんだけど。泥臭いって言うのかなあ、MIME-View は気にならないけど、MIME-Edit のほうはどうもしっくりこない。素直な実装である、と言えば褒め言葉になるねんけどね。まあ、だいぶ慣れてしもたので気にしないことにしましょう。WL を使うためには仕方ないです。

バックエンド型なら、みんな幸せ

さて、だいぶ横道に逸れてしまいましたが、バックエンド方式を採用しているということは、必要なバックエンド関数を書くだけで新たなリソースに統一された操作性でアクセスできる、ということを意味します。
以前から Mew をちょっとだけ改造し、imcat を REXX でフックすることによって疑似的にアーカイブモードを実現していたのですが、Mew 上からアーカイブをメンテナンスするよう改造するのは大変だったので、閲覧専用でした(今も)。こういう根本的な改造は、構造上 Mew は適しません。なぜなら、バックエンド型ではないのと、elisp だけでなく、えてして perl までいじらないといけないから(それよりも、非同期で軽快に動作する点を評価すべきでしょう。 両者は実装上の思想が根本的に異なるので、同列に評価することはできません)。

そこで、アーカイブモードを誰かが WL 上で実現してくれないかな、との期待を持ちました。1メッセージ1ファイル形式は、動作が軽快なことと、多国語コード混在による MBOX の破壊という危険性はないものの、ディスクを喰いまくる欠点があるからです。だったら cmail で安全に MBOX 使えて expire もできるやん、と言われそうですが、消すだけの単純な expire はして欲しくないので、やっぱり厭です。LHA や Info-Zip が使えると、1メッセージ1ファイルの利点はそのままで、ディスクも節約できます(オーバーヘッドが入るけど);-)
他に、RDB をバックエンドに用いるための SQL インターフェイスが実現したらいいな、と思いました。どっちも他の(公開されている) MUA では実現されていない機能です。MBOX も読めるってのも将来的には実装されると思いますが、他の MUA でできることばっかりやっても面白くないでしょ? :-p

だから、WL なら多い日も安心(謎)。(飯■直子談 <ウソ)

SQL インターフェイスはまだ妄想に過ぎませんが、後に LHA を利用した圧縮フォルダ用バックエンド elmo-lha.el を書きました。必要は発明のパパ(なんじゃそれ)。これは更に寺西さんによって検索機能が実装され、津邑さんによって汎用的にディレクトリ構造を持ち込まない対策がなされました。このお陰で、Info-ZIP/UNZIP, LHA, ZOO などのマルチアーカイバに対応させることができ、elmo-archive.el へと発展しました。
;; なお、OS/2 EMX 版の ZOO は標準出力への展開時に問題があるので、パッチが必要です。

また、寺西さんの素晴らしいアイデアで、最初妄想していて諦めざるを得なかった ML アーカイブサービスの *.tar.gz をマウントできるようになりました。efs. ange-ftp 経由でネットワーク上に存在するアーカイブを直にマウントすることができるのだそうです(EM 版 PMEmacs は別として、佐々木版 OS/2 Emacs/MULE では ange-ftp が動かないので手許では確認していません)。
村田さんが開発中の wl-expire.el のお陰で、expire すると圧縮フォルダに移動、ということもできるようになっているようです。

管見では、こんな芸当ができる MUA は、(elisp 版に限らず)聞いたことがありません :-)

人種3(謎)であるがゆえ、、

それと、これに先立って、現在収録されている im-wl.el を書きました。元ネタは Emacs20.2 付属の gnus/nnspool です。もともと sendmail は使いたくないのと、オフラインで sendmail なんぞ使うと mailq.exe を使う羽目になりますが、こいつがすっげー遅い!というわけで、人種3(謎)な人間としては imput を使うほうが幸せなのです。これも念願の非同期化が達成されました。
MH 系の人間としてはサマリにボディの要約が見えないのが最初厭で、なんとか imget/imls の出力を取り込めないかなあと思ったんだけど、elisp の msgdb を作らせる手順が別途必要になるのでやめました。そのうちスレッドが開閉できたり、系統樹表示できるようになったので、今や WL の機能の方が気に入っています:-) ボディの要約は、localdir と archive では出せるようにしてもいいんじゃないかとは思うけど、それは elisp で可能な範囲です。im-wl への大幅な機能追加は多分なされないでしょう。

今後やりたいこと/できたらいいなと思うこと

  アーカイバの非同期実行(PTY 実装して〜 > 佐々木大明神、中川師)。
  OS/2 上でネットワーク経由の ML アーカイブのマウント(やっぱり PTY!!  ^-^;;)。
  izwlagent の日本語 grep 機能を利用する(OS/2 のみ)。
  pack-number() で指定番号から安全に付け直す仕組み。
  フィルタ、マルチの msgdb 高速作成(ソースの msgdb が利用できれば超高速化可能)。
  複数フォルダ補完、補完時のエイリアス展開機能。
  POP フォルダと +inbox の統合、もしくは POP から直接 localdir への自動振り分け。

God Lisper も WL なのだ

あ、それと、Prom-Mew の作者である村田さんも WL に乗り換えられてProm-WL を書かれました(外部パッケージのみならず、WL/ELMO に膨大な貢献をされており、寺西・村田両 God Lisper 体制で、凄まじい勢いで成長しつつあります:-)。
今も Prom-Mew な人は、WL + Prom-WL を試してみる価値はあると思います :-)

;; Prom-Mew の開発がいつまで続くか、も。。?? ずっとメンテされるんだろうか?
 

[WL 関連リンク]

情報(http)

寺西さんとこ (Wanderlust Official Home Page)
津邑さんとこ
村田さんとこ (Prom-WL, wl-expire Official Home Page)

WL パッケージの入手(ftp,http)

一次配布元:英国(寺西さんとこ)
ミラー:京都大学(津邑さんとこ)
ミラー:北陸先端科学技術大学院大学
ミラー:米帝東海岸(山岡さんとこ)

Powered by OS/2 Emacs/MULE

ふ@Team OS/2-WL :-p <fuji0924@mbox.kyoto-inet.or.REMOVEME.jApAN>