Original: Mon Sep 19 01:08:04 JST 2005
Last modified: Sun Oct 06 10:51:04 JST 2019

魔導(Meadow)士への道 II

この記事は昔, 以下のリンクに置かれていたものです.

http://www1.ttcn.ne.jp/~uranov/U/meadow/meadow.html
http://www1.ttcn.ne.jp/uranov/U/meadow/meadow.html

Meadow(メドウ)の達人(導師)を目指す意味合いで '魔導士への道' と命名しました. 'まどうし' と書いていますが無理矢理 'めどうし' と読んでください.

前回の記事を書いてから, はや 2 年半が経ちました. その間, Meadow もバージョンが上がり, Mew などの付随するアプリもちょこちょこと アップデートしてきましたが, 基本的は使い方はほとんど変わっていませんでした. そんな中, 今回久しぶりに見直しを行い, 使い勝手が少し向上しました. 個人的な覚え書きの意味も含め, その報告を書いておきます.

目次

  1. Meadow のインストール
  2. メーラ(Mew)
    1. UCS 設定
  3. 日本語入力(Canna + yc)
  4. 日本語検索(Migemo)
  5. Windows との連携強化
    1. 下準備 gnuserv の導入
    2. ドラッグ & ドロップ用ショートカットの作成
    3. 送り先に Meadow を加える
    4. ファイルの関連付け
    5. 外部ブラウザを開く
    6. mailto で Meadow を開く
  6. SPAM メール対策(POPFile)
  7. 付録. 設定サンプル(.emacs, .mew.el)

1. Meadow のインストール

Netinstall を用いてインストールを行います. このため以前に比べ インストールは格段に楽になっています. (以前も簡単だと書いたのですが :-) 特に今まで別途用意し, インストールしていたさまざまなアプリケーションが package と言う形で用意されており, インストール時に選択しておくだけで すぐに使える状態になります. この Netinstall についてはあちこちの Web に紹介がありますが, 私も簡単なメモを書いてみました. 私が追加選択したパッケージは, gnuserv, html-helper-mode, mew, mule-ucs の 4 つです. インストールが終われば, ホームディレクトリにMeadow 設定ファイル .emacs を置き, 準備完了です.

2. メーラ(Mew)

Netinstall で Mew の package を選択しておけば, 後はホームディレクトリに Mew 設定ファイルを置けば OK. すぐにメールが使えるようになります.

とは言っても Mew を初めて使う人は, まず使い方を覚える必要があります. UNIX 系の多くのアプリケーションの説明は Info にまとめられており, これらは Meadow(Emacs) を使って読むことが出来ます. もちろん Mew の使用法説明もあります. Info の読み方を簡単に書いておきます.

2.1 UCS 設定

Emacs-21.4 からは utf-8 に標準で対応しており Mule-UCS は要らない との情報もありますが, まだ対応が完全ではないとの話しもあり, 私は依然 mule-ucs を使っています. 手間はほとんど要りません. package で mule-ucs を選択し, 以下の記述を .emacs に加えるだけです. 注意点としては, 日本語環境設定 (set-language-environment "Japanese") より この記述は前に置く必要があります.

;;---------------
;; Mule-UCS 設定
;;---------------
(require 'un-define) ; Unicode
(require 'jisx0213) ; JIS X 0213
;; Emacs-21.4 の標準機能を利用する場合(Mule-UCS を使わない時)
;;(if (fboundp 'utf-translate-cjk-mode) (utf-translate-cjk-mode 1))
;; Emacs-22 系は設定不要(Mule-UCS を使わない時)

3. 日本語入力(Canna + yc)

かんな と YC の導入は, 以前 と全く手順を踏みました. 今回調べたところ, かんなや YC のバージョンも 上がっていました. 時間があれば, 新しいものを試して置き換えて行きたいと思います.

4. 日本語検索(Migemo)

前回 Migemo をインストールし, しばらく喜んで使っていましたが, 何故か最近は 全く使わなくなってしまいました. このため, 今回はインストールしていません. 興味のある方は以前の記事(特に CMigemo の 部分)を御覧ください.

5. フォント設定

今回はフォント設定にほとんど手を加えていません. サンプルの dot.emacs.ja に書かれている TrueType 16dot 版を 14dot に 変えているだけです. 出来れば 12dot BDF フォントを完成させ, それを使うようにしたいのですが, 12dot BDF フォント作成計画は頓挫しており, 実現の見通しは全く立っていません.

6. Windows との連携強化

ここまで長々と書いて来ましたが, ここからがやっと今回新しく試した内容です. あれこれ手を加え, Windows での使い勝手を向上させます. 尚, 今回 Windows は主に XP を用いていますが, ファイルのパス等を読み変えれば 他のバージョンでも使えると思います.

6.1 下準備 gnuserv の導入

a. gunserv.el のインストール

何も考えずに RunMW32.exe にファイルを関連付けると, ファイルを開く度に 別の Meadow が立ち上がってしまいます. それでも構わないと言ってしまえば それまでなんですが, ちょこちょこ不都合が生じます. 最も困るのが, 間違えて別々の Meadow で同じファイルを開いてしまった場合. 「(このプログラムで)最後に読み込んでからファイル(内容)が変更されちゃってる けどどうする?」なんて何度も聞かれる事態が発生します. その他にも, 起動時間のロスや, Yank バッファもバラバラになる等の問題も...

あの(仕様もない?) Microsoft Word でさえ, 関連付けから複数のファイルを開いても, 立ち上がるプログラムは一つです. Meadow でそれが出来ないはずはない. ここで gnuserv の登場です. Meadow のインストール時に package で選択していれば, 準備の第一段階は OK. lisp のサーチパス上(例えば C:\Meadow\packages\lisp)に gnuserv.el が置かれ, 実行ディレクトリ(例えば C:\Meadow\bin)には gnuserv.exe 等 gnu で始まる実行ファイルが 5 つほど置かれているはずです.

b. 環境変数の設定

Meadow のインストール時の作業と同様に環境変数設定を行います. gnuserv を使うための環境変数は以下の 4 つです. RUNEMACS は必須. 残りの物はオプションで, Meadow 呼び出し時に 自動的に画面が最前面に来るようにしたい時に設定します.

変数            値
RUNEMACS        RunMW32.exe     ←パスが通ってなければフルパス指定を
GNUCLIENTW      -F              ←呼び出し時自動的に最前面に
GNUDOITW        -F              ←〃
EMACS           MEADOW          ←〃
c. .emacs の設定

.emacs に以下の設定を加えます.

;;==============
;; gnuserv 設定
;;==============
(require 'gnuserv)
(gnuserv-start)
(setq gnuserv-frame (selected-frame)) ; 新しくフレームを開かない

これで gnuserv が使えるようになりました. 後は今まで RunMW32.exe を 呼び出していたところを gnuclientw.exe に置き換えれば, Meadow が複数起動 することは無くなります.

実行ファイルには gnuclient.exe と言う w 無しの物もあります. この gnuclient.exe と gnuclientw.exe との関係は, ちょうど Meadow.exe と RunMW32.exe との関係と 同じで, 立ち上げ時に DOS 窓(コマンドプロンプト?)を経由するかしないかが 異なります. つまり w 無しの方を立ち上げると DOS 窓が出てしまうので, 通常使用は常に w 付きの方で問題ないはずです.

d. gnuserv の問題と回避策

「これで完璧さ」と言いたいところですが, gnuserv にはちょっと問題もあります. きっとサーバとクライアントの立ち上げ順・タイミングの問題だと思いますが, 立ち上げ時に「Unable to connect mailslot. Error code: 2」と言う エラーメッセージが出ることがあります. 近い将来には, サーバが確実に 立ち上がってからクライアントが起動するような, 根本的対策がなされると思います

とりあえずの回避策として, .emacs 中の (gnuserv-start) 記述が 出来るだけ早い段階で評価されるように, これを先頭行近くに置くようにします. 但し, 日本語環境設定 (set-language-environment "Japanese") より前に置くと ファイル名に日本語を使ったものが開かなかったりするので注意が必要です.

参考までに私の .emacs です. この対策はあくまでもその場しのぎで, プロセスが建て込んでいてサーバがなかなか 立ち上がらないときには, 依然エラーが出ます.

6.2 ドラッグ & ドロップ用ショートカットの作成

ここまで来たら準備完了. まずはドラッグ & ドロップ用に gnuclientw への ショートカットを作成し, デスクトップに置きます. 設定はこんな感じ. これでファイルをここへ落とせば Meadow が立ち上がります.

[Shortcut to Meadow2]

gnuclientw へのショートカットですが, ショートカット名は Meadow2 に, またアイコンは meadow の実行ディレクトリにある meadow.ico にしています.

6.3 送り先に Meadow を加える

ファイル選択時の右クリックメニューの「送る(N)」のリストに Meadow2 を加えるには, 上述のショートカットを SendTo フォルダにコピーします. 以下を御覧ください.

[SendTo Folder]

私(uranov)の場合, 先程のショートカットを C:\Documents and Settings\uranov\SendTo フォルダにコピーしました. 個人フォルダでなく All Users を使うことも可能です. Windows Xp 以外の場合, SendTo フォルダは少し違う位置にあるかも知れません.

6.4 ファイルの関連付け

  1. エクスプローラの「ツール(T)」から, もしくはコントロールパネルから 「フォルダ オプション(O)」を選ぶ.
  2. 「ファイルの種類」タブのリストの中から, TXT を選択し 「詳細設定(V)」ボタンを押す.
  3. アクションリストの中から open を選び, 「編集(E)」ボタンを押す.
  4. 「アクションを実行するアプリケーション(L)」欄を gnuclient.exe に変更して終了. このときに引数としてダブルコーテーションで 囲んだ %1 を指定します(下図参照).
[File Association]

6.5 外部ブラウザを開く

こちらは gnuserv とは関係なく動作可能です. .emacs 中に以下のような記述を 入れます. URL 記述がある部分にマウスカーソルを持って行き, キーボードの Shift キーとマウスのセンターボタン(スクロールボタン)を同時に押せば, 外部ブラウザが起動し, 指定ページが開かれます.

;;==================
;; 外部ブラウザ設定
;;==================
(setq browse-url-browser-function 'browse-url-msie)
(setq browse-url-msie-program
;;      "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE")
      "C:\\Program Files\\Fenrir & Co\\Sleipnir\\bin\\Sleipnir.exe")
(defun browse-url-msie (url arg)
  (interactive (browse-url-interactive-arg "URL: "))
  (if browse-url-msie-program
      (let ((w32-start-process-show-window t))
	(start-process (concat browse-url-msie-program url)
		       nil browse-url-msie-program url))))
;;(global-set-key [S-mouse-2] 'browse-url-at-mouse)
(global-set-key [S-mouse-3] 'browse-url-at-mouse)

ブラウザは Sleipnir がお気に入りです. チルトホイール機能付きの USB コードレスマウスを使うようになってから, Shift + センタークリックが効かなくなり, Shift + 右クリックに変更してます.

6.6 mailto で Meadow を開く

a. mew-browse.el の導入

まずは Mew 側の設定です. Mew のコントリビューションプログラム集(contrib) に含まれる mew-browse.el を適当なディレクトリに置き byte-compile します.

残念ながらこの mew-browse.el は Mew の package に含まれていません. Mew のオフィシャルサイト からソースコードをダウンロードし, 展開すると, contrib の中に mew-browse.el があります.

b. mew-browse の設定

次に .emacs に以下の設定を加えます.

(setq mew-prog-text/html-ext
      "C:\\Program Files\\Fenrir & Co\\Sleipnir\\bin\\Sleipnir.exe")
(require 'mew-browse)
c. Windows のレジストリ操作

最後にレジストリの [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\shell\open\command] のデータを gnudoit.exe に書き換えます. 具体的な書き方は下図を参照ください.

[MailTo Registry]

(なんらかの理由で)元に戻せるようにバックアップを取っておくと良いでしょう. やり方はレジストリエディタ(regedit.exe)の対象データを開いた状態で 「ファイル(F)」からエクスポートを選ぶだけです. ファイル名は Before_Mailer_change.reg など分かりやすいものを. このファイルを ダブルクリックするか, regedit.exe でインポートすれば元に戻ります.

7. SPAM メール対策(POPFile)

ここ数年来, SPAM メールに悩まされていました. どうせ読み飛ばすだけだと 無視していたのですが, 出張や旅行などでメールが溜ってしまった場合, 読み飛ばすだけでも大変です. SPAM メールの一番の原因は, Web ページの あちこちにメールアドレスを載せているせいだろうと考え, 該当箇所を 一所懸命削りました. が, 一向に SPAM メールは減りません.

そこで SPAM 対策に POPFile を導入することにしました. POPFile の仕組みは簡単で, メールリーダと POP サーバの間に入り, POP サーバからメールリーダに渡されるメールに対しフィルタリングします. SPAM かどうかの判断は学習により進化させて行きます. 判断後はメールヘッダに拡張情報を加えたり, Subject 行に文字を追加することが出来ます.

a. POPFile のインストール

まずは POPFile のインストールです. ダウンロードからインストールまで JP POPFile Documentation Project のクイックリンクに従えば, 全く問題なく作業できるはずです. 振り分けのためのバケツは SPAM を振り分けるだけであれば personal と spam だけで OK. バケツをたくさん持ち, 振り分けを複雑にする程動作が遅くなるようです.

b. メーラ(Mew)の対応

後は Mew 側の対応です. .mew.el に以下を加えます. これにより PopFile 側で SPAM と分類し, X-Text-Classification: spam と言うヘッダが付けられたメールは, Mew での取り込んだ段階で最初から +spam フォルダへの移動マークが付いています. 実行キー(x)を押せば実際に +spam フォルダに移動します.

;;---------
;; POPFile
;;---------
(defun mew-spam-popfile (val)
  (let ((case-fold-search t))
    (if (string-match "^spam" val) "+spam")))
(setq mew-scan-fields (delete mew-spam: mew-scan-fields))
(setq mew-spam: "X-Text-Classification:")
(setq mew-scan-fields (append mew-scan-fields (list mew-spam:)))
(setq mew-inbox-action-alist
      '(("X-Text-Classification:" mew-spam-popfile)))
c. 日々の管理(POPFile の学習)

最初 POPFile はメールをどう分類するかの知識を持ちません. そのため全て personal でも spam でもない unclassified(未分類) とします. いくつかメールを受け取った後, Web のユーザインタフェース(POPFile UI, POPFile コントロールセンター)を開き, 履歴のページで正しい振り分け先を教えてやり, 「再分類」します. これを繰り返す毎に少しずつ分類の確度が上がって行きます. どことなく育成ゲーム感覚です.

Mew 側ではメールを取り込んだ時点で, すぐに振り分けを実行して構いません. 但し, POPFile の学習経験が少ないうちは, 時々 +spam フォルダを訪れて, 間違って SPAM となってしまった物が無いかをチェックします. それが見つかった場合, Mew 側では該当ファイルを適当なフォルダに再移動(o)させ, POPFile 側では履歴画面で再学習させます. もちろん, SPAM フォルダに入るべき物が, +inbox に入っている場合も同じです.

慣れて来ても時々, +spam フォルダをチェックすることをお薦めします. Mew 上で C-uD もしくは ma, md, x を実行することにより, フォルダ内の 全てのメールを削除することが可能です. しかし, 実際に削除する場合も, メール一つ一つを確認しつつ, 削除(d)をマークして行く方が安全です.

付録. 設定サンプル(.emacs, .mew.el)

私の .emacs私の .mew.el です. 適当にパスやユーザ名を置き換えて解釈ください.