top page > PC unix > here

FreeBSD における mew


概要

xemacs, emacs のために mew を導入する方法を提示します.

検討した環境は次のようなものです.

  1. OS は FreeBSD/i386 6.2, 7.2, 7.4, 8.2, 8.3, 8.4 および FreeBSD/amd64 8.4, 10.3, 12.3, 13.1 です.
  2. xemacs 21.4 にて使用している mew は 3.3 です.
  3. emacs 24.3 にて使用している mew は 6.5 です.
  4. emacs 24.5 にて使用している mew は 6.7 です.
  5. emacs 27.2 にて使用している mew は 6.8 です.

目次

1. 概況
1.1 xemacs, emacsmew
1.2 UTF-8
2. mew on xemacs
2.1 導入
2.2 bug 対応
2.3 UTF-8 対応
3. mew on emacs
3.1 導入
3.2 UTF-8 対応
4. tips
5. emacs の version の指定

1. 概況

1.1  xemcs, emacs と mew

ここで述べることは FreeBSD においての話ですが,おそらくそこに限定されない一般性があると思います.

xemacs, emacs の上で動く mailer として mew があります.[1] ただ,ベースが xemacsemacs かで状況が大きく異なります.[2]

xemacs では,それ自体が更新されなくなっていることから,次のような問題が生じています.

  1. 最新の mew 6 系は make できない. 少なくとも mew 3.3 ならばできます.
  2. FreeBSD 6 系以降は ports/packages に xemacs 用の mew がない. また,自前で make しても動作に問題がある.

ここでは,mew 3.3 を ports を利用して導入する方法と,動作の問題を回避する方法とを提示します.[3]
この部分は,xemacs + mew 3.3 の組合わせに格段の思い入れなり使い続けねばならない理由がある方,もしくは別の環境に乗り換える準備 (乗り換え先の検討とか,試用とか) の間のつなぎとして以前から使っている環境を踏襲したいという方のために書きました. ちなみに私は後者なのですが,動作に問題がなければこのまま使い続けてしまうかもしれません.[4]

emacs は活発に更新されておりますし,それに対応する mew も最新版を使うことができます. xemacs での環境に比べれば,導入は本当に楽です. 強いて難点を挙げるなら,emacs が重いので非力な PC では辛いということです.

[1] FreeBSD で使える mailer は xemacs, emacs を前提としてもしなくても多数あります.

[2] 困ったことに,ports/packages として複数の (x)emacs を共存させて導入することはできません. 従って,いろいろな組み合わせを試すのはかなり面倒です. 比較検討には,可能ならば複数の PC を使うと良いでしょう.

[3] 最新の mewxemacs で動かす努力をするつもりはありません.

[4] FreeBSD/amd64 で xemacs や Wnn 7 がうまく動いておりませんので,そこではこれらの組み合わせはあきらめたいです.

1.2  UTF-8

最近,まれにですが UTF-8 の e-mail が届くようになりました. 送り主がそれと自覚していない場合が多いのが困りものなのですが,受け取るこちら側も対策が必要になってきました. これまでは文字コードの変換で対応してきましたが,効率が悪いので少し真面目に取り組むことにしました. 結論から言うと,UTF-8 の e-mail の授受の環境はかなり以前から整備されており,当方の課題はそれを使えるように設定するだけです. 具体的な設定法は次節以降に記します.

以下の注意書きは念のため.

  • UTF-8 対応は xemacs, emacs, mew の内部で閉じているので,shell の環境変数 LANG*.UTF-8 にする必要はない.
    (うちでは,e-mail の授受も含めた (試用のためでないという意味での) 通常の環境変数 LANGja_JP.eucJP です.)
  • 送信するメールの作成や受信したメールの表示は,mew が内部コードである ctext-unix に変換している.[1] すなわち,UTF-8 を直接扱っているわけではない.[2][3]
  • 送信するメールの文字コードは,single part に関しては mewISO-2022-JP に変換する.
    (私は UTF-8 のメールを送信したことはありません.)

[1] ctext-unix というのは xemacs の方の呼称のようで,emacs ではモード行で例えば EUC の場合に E と表示される位置に x と表示されます. うちにある書籍などは古いので,これらが何なのか書いてありません.

[2] これまでに受け取った UTF-8 の e-mail は,すべて ISO-2022-JP に変換できるものばかりです. すなわち,ASCII code と日本語のみから構成されています. そうでなく,様々な言語が使われている内容だった場合,この内部コードで対応できるのかは分かりません. そのようなメールを書く場合も同様です.

[3] emacs 23.1 からは,内部コードが UTF-8 になっています.

2. mew on xemacs

2.1  導入

mew 3.3 は,ports の以下のところにあります.

/usr/ports/mail/mew3               : FreeBSD 4.10 emacs21 用
/usr/ports/mail/mew3-xemacs21-mule : d.o          xemacs21 用  ← FreeBSD 6 系以後にはありません.
/usr/ports/mail/mew3               : FreeBSD 6.2  emacs21 用
/usr/ports/mail/mew3               : FreeBSD 7.2  emacs21 用
/usr/ports/mail/mew3               : FreeBSD 8.2, 8.3  emacs21 用  ← FreeBSD 8.4 以後にはありません.

FreeBSD の ports として最新の mew は,FreeBSD 6.2 では mew 5.1,FreeBSD 7.2 では mew 6.2,FreeBSD 8.2 では mew 6.3,FreeBSD 8.4 では mew 6.5 です. mew 6 系は xemacs には対応しておらず,make の段階で壁に当たります. 主な原因は elisp の仕様の差異です. (mew 4,5 系は試しておりません.)

次のような手順により,xemacs21 用の mew 3.3 (mew-xemacs21-mule-3.3) を導入することができます.

(0) 先に xemacs を導入する.

(1) 作業用の directory を作成する.

# cd /usr/ports/mail
# mkdir mew3-xemacs21-mule

ここに mew3-xemacs21-mule があったころの ports から以下の三つのファイルを cp します.

(私が使ったのは FreeBSD 4.10 のものです.)

Makefile
pkg-descr
pkg-plist

または,現在の ports の mew3 を利用して次のようにします.

# cd /usr/ports/mail
# cp -pR mew3 mew3-xemacs21-mule
# cd mew3-xemacs21-mule
# vi Makefile

ただし,Makefile の中に PKGNAMESUFFIX= -${EMACS_PORT_NAME} という項目があるならば mew3 をそのまま使えます.

(FreeBSD 8.4 においては,8.2 の ports から mew3 を持ってきました.)

この二通りのやり方でファイルの展開される場所が微妙に異なりますが,動作には影響ありません.

Makefile は次のように修正します. (COMMENT の方は直さなくても支障はありません.)

--- Makefile.org        2010-06-14 10:28:28.000000000 +0900
+++ Makefile    2011-04-09 17:03:09.000000000 +0900
@@ -13,7 +13,7 @@
 PKGNAMESUFFIX= -${EMACS_PORT_NAME}

 MAINTAINER?=   ports@FreeBSD.org
-COMMENT?=      Message interface to Emacs Window (version 3) for emacs21
+COMMENT?=      Message interface to Emacs Window (version 3) for xemacs21-mule

 LATEST_LINK?=  mew3

@@ -28,7 +28,7 @@

 # emacs port setup
 USE_EMACS=     yes
-EMACS_PORT_NAME?=      emacs21
+EMACS_PORT_NAME?=      xemacs21-mule

 # target name for make build and install
 ALL_TARGET?=   all info jinfo

(2) 通常の ports の流儀で導入作業を行なう.

# make
# make install

(3) ~/.xemacs/init.el にて諸々の設定を行なう. (~/.mew.el~/.mew でも可です.)

(4) 起動する.

% xemacs
M-x mew

または

% xemacs -f mew

2.2  bug 対応

mew 3.3 は,xemacs-packages の変更に伴い,例えば FreeBSD 6.2, 7.2, 7.4, 8.2 では動作しなくなっています. すべての version を試しているわけではないので「どこから」とは言えません.

症状ですが,i で POP server にアクセスをしようとすると次のようにエラーになります.
(この情報は,[View][メッセージログ表示] で見ることができます.)

Loading timer-funcs...
Loading timer-funcs...done
Setting up Mew world...done          ← ここで i を打つ.
Connecting to the POP server...
Connecting to the POP server...done
itimer "run-at-time<2>" quit
Symbol's function definition is void: cancel-timer
itimer "run-at-time<2>" quit         ← これが延々と繰り返される.

以下では file, directory は /usr/local/lib/xemacs/xemacs-packages/lisp/ を起点として示します.

以前は run-at-time()cancel-timer() も同じ fsf-compat/timer.el にありました. また run-at-time()fsf-compat/auto-autoloads.el に登記されていました. そして,mew を起動すると,上記のメッセージには

Loading timer...

と表示されました.

ところがある時期から run-at-time() を含む fsf-compat/timer.el の一部が新規に作られた xemacs-base/timer-funcs.el に移されました. それに伴い,run-at-time() の登記も xemacs-base/auto-autoloads.el に移されました. 一方,cancel-timer()fsf-compat/timer.el に残りました. しかし,fsf-compat/auto-autoloads.el には fsf-compat/timer.el の関数は一つも残りませんでした. それゆえ,timer (fsf-compat/timer.elc) は Load されず,

Symbol's function definition is void: cancel-timer

となってしまったわけです.

ところで,すべての auto-autoloads.el の冒頭には

;;; DO NOT MODIFY THIS FILE

と書かれています. ゆえにここに cancel-timer() の登記を加えることはしません. 従って,我々に許される対策は上述の ~/.xemacs/init.el の設定により timer を読み込むか,または mew のソースを変更することです.

(対策 1) ~/.xemacs/init.el による設定
  次の一行を加えて下さい.

(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)
(autoload 'cancel-timer "timer" nil t)  ← これ
;; (require 'timer)                     ← うまく行かないならば,代りにこちら

私はこちらの対策を採用しておりますが,4 年ほど使い続けて問題は生じておりません.

(対策 2) mew のソースの修正
  以下の内容のファイルを patch-af という名で /usr/ports/mail/mew3/files/ に置いて,/usr/ports/mail/mew3-xemacs21-mule/ にて make します.[1]

--- mew-highlight.el.orig       2003-07-16 12:48:23.000000000 +0900
+++ mew-highlight.el    2009-09-12 15:28:49.000000000 +0900
@@ -6,6 +6,7 @@
 ;;; Code:

 (require 'mew)
+(require 'timer) ; cancel-timer, etc.

 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;

[1] この内容を mew-highlight.el でなく mew.el に書き加えるという選択肢もあります. (ここで mew.elmew のソースの一部です. home directory に置く dot file と混同しないで下さい.)

前者の対策の方が手間がかからないという点で優れています.

ただし,mewcancel-timer() 以外にも fsf-compat/timer.el の関数を使っているので,mew の機能を使う順序によっては同様の問題が生じる可能性があります. そのような場合には,後者の対策を採る方が楽かもしれません.

2.3  UTF-8 対応

xemacs 21.5 は UTF-8 に対応済みです. 21.4 でも xemacs UTF-8 対応 に記した設定を行なえば対応できます.

3. mew on emacs

3.1  導入

mew 6.5 は,ports の以下のところにあります. (最新の ports においては 6.7 です.)

/usr/ports/mail/mew

先に emacs を導入します. 後は普通に make, make install すれば導入できます.

起動は以下のようにします.

% emacs
M-x mew

または

% emacs -f mew

3.2  UTF-8 対応

emacs 22 以後は対応済みです. 21 以前でも emacs UTF-8 対応 に記した設定を行なえば対応できます.

4. tips

次のように指定しておけば e-mail の受信後にそれが POP server から消されません.

(setq mew-pop-delete nil)

従って,複数の OS から同じ e-mail を受信することができます. 面倒ですが,新環境はしばらくは動作試験中という扱いで,旧環境と併用した方が良いでしょう.

5. emacs の version の指定

2022.4.10 時点の話です. FreeBSD 12.3 にて ports を更新し,emacs も 27.2 から 28.1 へと更新しました. ところが Wnn 8 の動作に問題が生じたので 27.2 に戻しました.

当然,mew も新たに make し直したのですが,

===>   mew-6.8_6 depends on file: /usr/local/bin/emacs-28.1 - not found
*** Error code 1

と言われて失敗します.

/usr/ports/Mk/Uses/emacs.mk を次のように直せば emacs の version を指定することができます.

--- emacs.mk.orig       2022-04-09 11:30:53.503656000 +0900
+++ emacs.mk    2022-04-10 00:45:35.935904000 +0900
@@ -108,7 +108,7 @@
 EMACS_VER=             29.0.50
 EMACS_PORTDIR=         editors/emacs-devel
 .else
-EMACS_VER=             28.1
+EMACS_VER=             27.2
 EMACS_PORTDIR=         editors/emacs
 .endif