top page > PC unix > here

FreeBSD における Wnn 8


概要

FreeBSD/amd64 10, 11, 12, 13, 14 系に Wnn 8 を導入する方法を提示します.

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

  1. Wnn 8 はアップデート後のものです.
  2. OS は FreeBSD/amd64 の 10.4, 11.2, 11.3, 11.4, 12.0, 12.1, 12.2, 12,3, 12.4, 13.0, 13.1, 13.2, 13.3, 13.4, 14.0, 14.1 です.
  3. emacs の version は 26.1, 26.3, 27.1, 27.2, 28.1, 28.2, 29.1, 30.0, 31.0 です.

私は Wnn 8 を emacs 系のエディターを通じてしか使っておりません. それゆえ,それ以外の使い方に関しては深く掘り下げません.

(2023.8.30) Wnn7Egg の修正に関する部分がかなり長くなってしまいました. 今後,別頁を作って移すことも検討しています.

このページだけは便宜を優先して「外部の link 先にはアンカーをクリックすれば直接行く」動作にしました. ただし新たな Tab を開きます.


目次

1. はじめに
2. Wnn 8 の導入
2.1 準備
2.2 install on FreeBSD 11.2
2.3 install on FreeBSD 12.0
2.4 install on FreeBSD 13.0
2.5 install on FreeBSD 14.0
3. wnn8le からの利用
4. Wnn7Egg からの利用
4.1 emacs 26 以前
4.2 emacs 27 以後
4.3 cl の問題
4.4 emacs 28 以後
4.5 emacs 29 以後
4.6 emacs 31 以後
4.7 patch
5. 辞書のメンテナンス
6. マニュアル
7. tamago-tsunagi からの利用
8. tamago からの利用

1. はじめに

Wnn 8 for Linux/BSD は 2005 年に発売されました. しかし,その当時は FreeBSD においては動作に問題があるようでした. それゆえに購入しないで放っておいたら,「旧バージョンユーザ優待販売」の権利を失効してしまいました.

その後,うちの PC も 64bit になり,OS も FreeBSD/amd64 になりました. また,FreeBSD 9 のあたりで package system が更新されました. 新 package system においては,旧 package system 用に作られた package を install することはできないのです.[1] それゆえ,Wnn 8 を使うのがより困難になり,ますます遠ざかってしまいました.

2013.11.21 に Ver1.01 が出て「FreeBSD 対応/最新OS対応/64bit 対応」になりました. emacs に対しては,Wnn 7 の Wnn7Egg と同様の使い方もできるようになりました.[2]

2017.7.10 に,新 package system に対応した FreeBSD/i386, FreeBSD/amd64 10.3 および 11.0 用のものが配布されました. そこで今回,遅ればせながら購入して試用してみました.

以下に Wnn 8 の導入と,それを emacs にて wnn8le から,および Wnn7Egg から使う方法を記します.

[1] Wnn 7 も i386 用かつ旧 package system 用ですが,いろいろ頑張って使えるようにしております.
  もう頑張らなくても良いようにしたいので,Wnn 8 等の試用を始めたのです.

[2] 使える機能に制限があります. オムロンソフトウェア (株) はこの使い方を Web Page に提示しつつも,あまり推奨していないように思います.

2. Wnn 8 の導入

2.1 準備

(1) 最新版の情報を確認する
  情報は Wnn8 アップデートモジュール にあります. 2020.8.19 の時点では,こうなっております. (2023.4.2 の時点で変更ありません.)

dpkey8          Ver 1.01         ['13.11.21]
iiimf-wnn8      Ver 12.3.3519.2  ['14.12.17]
wnn8-le         Ver 1.02         ['13.11.21]
wnn8-maindic    Ver 1.05         ['20.07.16]
wnn8-optiondic  Ver 1.04         ['20.07.16]
wnn8-server     Ver 1.01         ['13.11.21]
wnn8-utils      Ver 1.02         ['16.04.08]

(2) (install されていれば) Wnn 7,旧版の Wnn 8 の状態を確認する
  Wnn 8 の install にあたり,Wnn 7 や旧版 Wnn 8 が install されているとそれらは「消される」という記述をどこかで目にしましたが,正確には次のような動作になります.

  1. Wnn 8 の installer は,Wnn 7 も古い Wnn 8 も pkg delete してくれない.自分で消すことになる.[1]
    (上書きされて消えるものは除く.)
  2. Wnn 7 のライセンスパスワードは上書きされて消える.
  3. Wnn 7, 8 のユーザー辞書の学習結果は引き継がれる.[2]

[1] そもそも,Wnn 7 も CD-ROM 版の Wnn 8 も旧 package sysytem の形で配布されているので,FreeBSD 10, 11, 12 では pkg add できません. ですから,こういう状況になるのは,ユーザーがこれらを自力で install した場合です. その場合には,消し方も分かっているはずです.

なお,pkg2ng が使える環境で,package database を新 package sysytem の書式に変換しておけば,pkg delete はできます.

[2] 例えば Wnn 7 があった場合,その学習結果は Wnn 8 の書式に変換されて,/usr/local/lib/wnn8/dic/usr/[username]/ に置かれます.

ユーザー辞書の学習結果を継承したいなら,Wnn 7 や古い Wnn 8 の辞書関連の package を消すのは新しい Wnn 8 を install した後にします.

(3) 最新版を download する

これは Wnn8 アップデートモジュール(フルセット版) に,パッケージ一式を一つのファイルにまとめた状態が配布されています.

現時点では FreeBSD 11 の i386, amd64 および FreeBSD 12 の amd64 に対応しています. どちらも 新 package system 用です.

wnn8-fb11_200708-1.tgz     FreeBSD 11.3 用
wnn8-fb12_200708-1.tgz     FreeBSD 12.1 用

(4) 必要となる ports/packages を install する
  何かが足りていないと,Wnn 8 の install の途中で「これらがありませんよ.これらを install してからやり直してね」と言われます. X Window System (x11/xorg) はあらかじめ install しておきましょう. その他のものは,指摘されてから install すれば良いでしょう.

2.2 install on FreeBSD 11.2

ここに示す例は,2020.7.16 以前に配布されていた次のものを新規に install した記録です. (これらはもう配布されておりません.)

wnn8-fbsd10-fullset_170710-1.tgz     FreeBSD 10.3 用
wnn8-fbsd11-fullset_170710-1.tgz     FreeBSD 11.0 用

これらを install した後に,pkg delete, pkg add によって最新版に置き換えました.

今後,最新版を新規に install する機会があればその記録を提示いたします.

この例では,Wnn 7 が install された状態を出発点とします.

(0) 環境変数 LANG, LC_ALL を確認します.

% setenv | grep LANG
% setenv | grep LC_ALL

これらが ja_JP.eucJP または ja_JP.UTF-8 でないと install できません.
  (この時点でこれらの設定が必要なのは installer のメッセージのためだけなので,install した後でこれらを切り換えることは可能です.)

(1) FreeBSD 11 用の最新版 (現時点では一つ古いもの) を解凍します.

% tar czvf wnn8-fbsd11-fullset_170710-1.tgz

wnn8-fbsd11 という directory が作られて,その中に展開されます. package は wnn8-fbsd11/pkg_fbsd/ にあります.

dpkey8-fb11-1.01_1.txz
iiimf-wnn8-fb11-12.3.3519.2_1.txz
ja-wnn8-le-fb11-1.02_1.txz
ja-wnn8-server-fb11-1.01_1.txz
ja-wnn8-utils-fb11-1.02_1.txz

dpkey8-fb11-amd64-1.01_1.txz
iiimf-wnn8-fb11-amd64-12.3.3519.2_2.txz
ja-wnn8-le-fb11-amd64-1.02_1.txz
ja-wnn8-server-fb11-amd64-1.01_1.txz
ja-wnn8-utils-fb11-amd64-1.02_1.txz

ja-wnn8-maindic-fb11-1.03_1.txz
ja-wnn8-optiondic-fb11-1.03_1.txz

(2) Wnn 8 の CD-ROM を mount します.

# mount -r -t cd9660 /dev/(CD drive のデバイス) /media   ← この mount point はあくまで例です.

この CD-ROM を使うのは,ライセンスパスワードのためだけです.

(3) 最新版 (現時点では一つ古いもの) を install します.

download したのと同じページの「アップデート手順」に従って作業します. wnn8-fbsd11/README.{euc,txt} にも同等のことが書かれています.

# cd wnn8-fbsd11
# ./Install

とすると,次のように始まります.

システムチェック...

あなたがご使用の OS は "FreeBSD 11.2-RELEASE (amd64)" だと思われます。
しかし 11.2-RELEASE は動作対象外です。
インストール作業を続けますか? (y/n) : y   ← ひるまずに続けます!

インストール処理開始...

途中で次のように聞かれます.

パスワードファイルの場所を指定してください。: /media     ← CD drive の mount point のみで可

これで先に進んでくれます.

Wnn7 のユーザ辞書が見つかりました。
こちらを退避して利用します。                      ← 元のものは変更されずに残ります.
/usr/local/etc/dpkey/dpkeylist を退避しました。   ← どこに「退避」したのか,見つかりません.

ユーザ辞書のリストア...完了
ライセンスパスワードのリストア...完了

ただ,最後は残念な結果になります.

Wnn8 基本辞書パッケージのインストール...完了
Wnn8 オプション辞書パッケージのインストール...完了
Wnn8 サーバパッケージのインストール...pkg: archive_read_open_filename(pkg_fbsd/): Unrecognized archive format
失敗
Wnn8 LEパッケージのインストール...pkg: archive_read_open_filename(pkg_fbsd/): Unrecognized archive format
失敗
Wnn8 ユーティリティパッケージのインストール...pkg: archive_read_open_filename(pkg_fbsd/): Unrecognized archive format
失敗
Wnn8 IIIMFパッケージのインストール...pkg: archive_read_open_filename(pkg_fbsd/): Unrecognized archive format
失敗
dpkey8 ライセンスサーバパッケージのインストール...pkg: archive_read_open_filename(pkg_fbsd/): Unrecognized archive format
失敗

ドキュメント/HTMLマニュアルのインストール...完了

dpkeyserv の起動...失敗
jserver の起動...失敗

...インストール処理終了

失敗したものは自分で pkg add します. これで問題なく出来るので,"Unrecognized archive format" って何だったのかと言いたいです.

# cd pkg_fbsd
# pkg add dpkey8-fb11-amd64-1.01_1.txz
# pkg add ja-wnn8-le-fb11-amd64-1.02_1.txz
# pkg add iiimf-wnn8-fb11-amd64-12.3.3519.2_2.txz
# pkg add ja-wnn8-utils-fb11-amd64-1.02_1.txz
# pkg add ja-wnn8-server-fb11-amd64-1.01_1.txz

dpkeyservjserver を起動します. これで Server 側としては,Wnn 8 を使える状態になります.

# cd /usr/local/etc/rc.d
# ./dpkey8 start
# ./wnn8 start

次回以降の OS の起動時には,これらは自動的に起動されます.

2.3 install on FreeBSD 12.0

前節に示す FreeBSD 11 用の旧版が install された状態で,freebsd-update upgrade により FreeBSD 12.0 にしました. その状態にて pkg delete, pkg add によって Wnn 8 を FreeBSD 12 用の最新版に置き換えました.

そういうわけで,FreeBSD 12 にて最新版を新規に install した経験はないのです. 今後,その機会があれば記録を提示いたします.

2.4 install on FreeBSD 13.0

前節の状態から,freebsd-update upgrade により FreeBSD 13.0 にしました. 使用する library は FreeBSD 12 から変更はないようで,compat12 なしで問題なく動作しております.
(後述する iiimx の GNOME 2 関連の library の問題は生じますが,それは FreeBSD の version の差異が原因ではありません.)

FreeBSD 13 にて新規 install を試みてはおりません.
実験的に,この環境にて FreeBSD 12 用の Wnn 8 の pkg add を試みましたが失敗しました.

# pkg add dpkey8-fb12-1.01_1.txz
Installing dpkey8-fb12-1.01_1...
pkg: wrong architecture: FreeBSD:12:amd64 instead of FreeBSD:13:amd64

Failed to install the following 1 package(s): dpkey8-fb12-1.01_1.txz

pkg add-f option を付ければ,この問題を回避することができます.

# pkg add -f dpkey8-fb12-1.01_1.txz

ここを修正するだけで install 用の script (Install) が動作すれば良いのですが.

2.5 install on FreeBSD 14.0

FreeBSD/amd64 14.0 に 12.0 用の Wnn8 を新規に install しました.

pkg add-f option を付ければ,OS の version の違いを回避することができます.

# pkg add -f dpkey8-fb12-1.01_1.txz

compat12 なしで問題なく動作しております.

FreeBSD 14.1 でも問題なく動作しております.

3. wnn8le からの利用

環境変数を設定します. 私は ~/.login にて以下のようにしております.

setenv LANG ja_JP.eucJP       または ja_JP.UTF-8
setenv XMODIFIERS "@im=iiimx"
setenv GTK_IM_MODULE xim
setenv QT_IM_MODULE xim

~/.xinitrc に以下のように記述します. 私はこれを,Window Manager を起動する直前に置いております.[1]

iiimx -iiimd &

X Server を起動し直して,諸設定の確認をします.

% echo $XMODIFIERS
% ps ax | grep iiimx
% ps ax | grep iiimd

ports の editors/emacs にて make config とすれば分かるように,emacs は default で XIM に対応しています.[2]

 [x] XIM         X Input Method

したがって,普通に emacs を起動し,キーボードで [Ctrl] + [\] または [Ctrl] + [Space] と入力すれば,wnn8le の Window が現れて使える状態になります. もう一度同じキー操作をすれば Window は消えます.

変換候補のフォントはかすれたゴシックで美しくないので,何とかしたいところです.
このフォントは見た目から jiskan16 だと思います. 残念ながら,これを変更するための情報は得られませんでした.

[1] X を終了して console に戻る際に,iiimx, iiimd は停止します.

[2] /var/db/ports/editors_emacs/options を見ても分かります. 次の行があれば XIM 対応です.

OPTIONS_FILE_SET+=XIM

emacs 以外にも,xtermfirefox の文字を入力する部分にカーソルを持っていけば,同様のキー操作で wnn8le が使えます.

(2020.1.26) FreeBSD 11.2 から 11.3 へと upgrade しましたが,その環境でも動作しております.

一方,FreeBSD 12.1 では FreeBSD 11 用の iiimx動作しません. core を吐きます. compat11x を使うようにしてもだめでした. (ldd iiimx を見る限り,compat11x は関係ないようです.)

(2020.8.19) 最新版は FreeBSD 11.4 および FreeBSD 12.1 にて動作しております.

(2021.9.19) FreeBSD 12.2 にて最新の ports に更新したところ,以下のように多くの library がなくなっており,iiimx動作しません. 今日になって気付いたのですが,これらは 2021.5.1 に ports から削除されていました. これは GNOME 2 が古くなり過ぎたことが原因らしいです.

# pkg check -d
Checking all packages: 100%
iiimf-wnn8-fb12 is missing a required shared library: libgnome-2.so.0
iiimf-wnn8-fb12 is missing a required shared library: libglade-2.0.so.0
iiimf-wnn8-fb12 is missing a required shared library: libbonobo-activation.so.4
iiimf-wnn8-fb12 is missing a required shared library: libbonoboui-2.so.0
iiimf-wnn8-fb12 is missing a required shared library: libbonobo-2.so.0
iiimf-wnn8-fb12 is missing a required shared library: libgnomecanvas-2.so.0
iiimf-wnn8-fb12 is missing a required shared library: libgnomeui-2.so.0
iiimf-wnn8-fb12 is missing a required shared library: libgnomevfs-2.so.0

4. Wnn7Egg からの利用

Wnn 8 を Wnn7Egg (ななたまご) から使う場合には,Wnn 7 の一部である ja-wnn7-elisp が必要になります.

Wnn 7 が install されていない状態から始めるならば,/usr/local/lib/wnn7/elisp を Wnn 7 のある別の PC から cp するか,ja-wnn7-elisp-1.02_1.tgz を解凍して cp すれば良いです.

あるいは ports/japanese/wnn7egg から導入することもできます. この場合には /usr/local/share/emacs/site-lisp/ に展開されるので init.el の記述には要注意です. (諸々の patch をこの ports で使える形にして files/ の中に入れました. この管理法が一番楽なように思います.)

ただし,少なくとも FreeBSD においては ja-wnn7-elispemacs 20 にしか対応しておりません. また FreeBSD/amd64 にも対応しておりません. emacs 21 以降への対応 および FreeBSD/amd64 への対応 にしたがって修正する必要があります.

4.1 emacs 26 以前

FAQ 3-1  Wnn6/Wnn7 対応のクライアントを Wnn8 で使用する方法は? にて eggrc-wnn7 というファイルが配布されています.

これを download して,以下の directory にある同名のファイルと置き換えます.

# cp -p eggrc-wnn7 /usr/local/lib/wnn7/elisp/emacs20
# cp -p eggrc-wnn7 /usr/local/lib/wnn7/elisp/xemacs21   ← こちらは必要ならば.

前節で述べたように,emacs は XIM 対応です. iiimx, iiimd が動いていない状態ならば,そのことは意識せずに普通に (すなわち Wnn 7 と同様に) 使えば良いです.

一方,これらが動いている状態ならば,emacs を次のように起動する必要があります.

% env XMODIFIERS="@im=none" emacs

なお,Wnn 7 と同様に,入力予測のバグの暫定対策をする必要があります.

入力予測により「りゅ」が「りゅう」に,「しゅ」が「しゅう」にされてしまいます. (例えば「しゅかん」を変換すると候補に「週間」などが現われます.) eggrc-wnn7 にて

 (wnn7-set-boin-kabusoku nil)   ← t から変更する.

として入力予測をやめれば解決します. (またはこれを ~/.eggrc-wnn7 に記述しても可です.) 一方,wnn8el ではこの問題は生じません.

(2020.1.26) FreeBSD 11.3, 12.1 にて ports を最新のものにした環境で試用しましたが,問題なく動作しております. FreeBSD 12.1 においては compat11x は必要ありませんでした.

(2020.8.19) 最新版の Wnn 8 を試用しました.FreeBSD 11, 12 共に問題なく動作しております.

4.2 emacs 27 以後

ports に従って emacs を 26.3 から 27.1 に更新したところ,二つの不具合が生じました. 以下にそれらの症状と対処法を提示します.

(「二つ」と書きましたが,これら以外の不具合に現時点では気付いていないだけかもしれません.)

1. process-kill-without-query (wnn7egg-lib.el) の問題

Wnn 8 を使おうとすると,次のようなエラーが出て使えません.

wnn7-server-start: Symbol’s function definition is void: process-kill-without-query

この関数は emacs 22.1 の時点で obsolete になっていて,emacs 27 では廃止されたとのことです. 以下のように対処しました.

--- wnn7egg-lib.el.orig 2002-05-24 00:00:00.000000000 +0900
+++ wnn7egg-lib.el      2020-11-14 13:22:36.361432000 +0900
@@ -714,7 +714,7 @@
                                                wnn7-active-server-port))
              ((error quit))))
          (when proc
-           (process-kill-without-query proc)
+           (set-process-query-on-exit-flag proc nil)
            (if (featurep 'xemacs)
                (set-process-coding-system proc 'binary 'binary)
              (set-process-coding-system proc 'no-conversion 'no-conversion))

なお,この修正版は emacs 26 でも使えました.

2. comm-unpack-u32 (wnn7egg-com.el) の問題 (?)

最初にかな漢字変換を行なおうとした際に,かなりもたつきます. 次のような警告が出てから変換が可能になります.

comm-wait-for-space: backend timeout

二度目の変換からはもたつきません.

以下のように対処しました.

--- wnn7egg-rpc.el.orig 2013-06-25 16:32:14.000000000 +0900
+++ wnn7egg-rpc.el      2020-11-14 22:20:50.084610000 +0900
@@ -457,6 +457,7 @@
 (defmacro wnn7rpc-get-result (&rest body)
   `(let (result)
      (comm-unpack (u) result)
+     (if (= result 4294967295) (setq result -1))
      (if (< result 0)
        (progn
         (comm-unpack (u) result)
@@ -538,6 +539,7 @@
                 env-id type)
     (wnn7rpc-get-result
       (comm-unpack (u) result)
+      (if (= result 4294967295) (setq result -1))
       (1+ result))))

 (defun wnn7rpc-set-autolearning-dic (env type dic-id)

原因ですが,私は Lisp も elisp も良く解っていないので,あくまでそのレベルでの考察です.

emacs が 26 から 27 になった際に,整数の扱い方が変わりました. 後者では整数の符合と絶対値とが別個に管理され,正の数を左にシフトして最上位の bit を on にした場合でも「負の数に化け」なくなりました.

(format "%x" -1)
"3fffffffffffffff"       emacs 26
"-1"                     emacs 27

emacs 26, 27 共通
(format "%x" 4294967295)
"ffffffff"

emacs 26
(ash (lsh -1 30) -30)
-1
(ash (lsh 4294967295 30) -30)
-1

emacs 27
(ash (lsh -1 30) -30)
-1
(ash (lsh 4294967295 30) -30)
4294967295     ← emacs 26 のように -1 にならない!

この問題は,FreeBSD/amd64 への対応 にて紹介した問題と症状は似ています. しかし,結果が -1 になる場合以外は正しく動作している点が異なります. すなわち,そこで紹介した patch が,結果が -1 になる場合以外は正しく機能しているということです. ですから,comm-unpack-u32 を更に改良して解決した方が合理的かもしれません.

(補足) うちには試す環境がないのですが,ここに記した問題は FreeBSD/i386 の環境や Wnn 7 を使う場合にも生じるはずです. いずれの場合にも,同じやり方で対処できると考えます.

4.3 cl の問題

emacs 27 になってから,Wnn 8 に関連して mini buffer に次のような警告が出るようになりました.

Package cl is deprecated

「将来 cl は廃止されます」ということです. 「当面は今のままで動きます」という意味でもあるのですが,今のうちに cl-lib に乗り換えることを試みた方が良さそうです.

ここまでに記した修正を行なったソース (ここでは wnn7egg.el.mod) を以下のように変えれば対応できます.

--- wnn7egg.el.mod      2021-02-18 22:47:17.823615000 +0900
+++ wnn7egg.el  2021-10-09 18:11:45.204885000 +0900
@@ -1298,7 +1298,7 @@
                        (for-each* (cdr vars) body)
                        (list 'setq tvar (list 'cdr tvar))))))))
                             
-(eval-when-compile (require 'cl)) ;; dolist
+(eval-when-compile (require 'cl-lib)) ;; dolist

clcl-lib とは完全に互換ではないらしいのですが,Wnn 8 が使っている範囲では互換のようで,関数名の書き換え等は必要ありませんでした. (おそらく dolist しか使っていない.)

4.4 emacs 28 以後

emacs 28 では,以下のような警告が出て動作がおかしくなります.

Symbol's function definition is void: make-coding-system

make-coding-systemwnn7egg-com.el で使われているのですが,emacs 23.1 の時点で deprecated になっており,28 になって廃止されたようです.

資料には「代わりに define-coding-system を使うべし」とあるのですが,単純な置き換えで済みそうにありません.

時間がとれないので,とりあえず emacs 27.2 に戻しました.

(2022.4.16) ports/editors/tamagoegg-com.el を参考にして wnn7egg-com.el を以下のように修正しました. emacs 28.1 で問題なく動作しております.

@@ -152,8 +170,11 @@
       (write-read-repeat r0))))))
 
 (if (not (coding-system-p 'egg-binary))
-    (make-coding-system 'egg-binary 4 ?W "Coding System for binary data"
-                   (cons ccl-decode-egg-binary ccl-encode-egg-binary)))
+     (define-coding-system 'egg-binary "Coding System for binary data"
+      :mnemonic ?W :coding-type 'ccl :ccl-decoder ccl-decode-egg-binary
+      :ccl-encoder ccl-encode-egg-binary))
+;    (make-coding-system 'egg-binary 4 ?W "Coding System for binary data"
+;                  (cons ccl-decode-egg-binary ccl-encode-egg-binary)))

4.5 emacs 29 以後

emacs 29 では,以下のような警告が出て動作がおかしくなります.

Symbol's function definition is void: set-face-underline-p

この問題は,/usr/local/share/emacs/site-lisp/wnn7egg/ にて以下のようにすれば回避することができます.

--- wnn7egg-cnv.el.orig 2023-08-22 03:07:24.075249000 +0900
+++ wnn7egg-cnv.el      2023-08-24 01:43:05.122261000 +0900
@@ -1931,7 +1931,7 @@
 (if (not egg-ud-face)
     (progn
       (setq egg-ud-face (make-face 'egg-ud-face))
-      (set-face-underline-p egg-ud-face t)))
+      (set-face-underline egg-ud-face t)))

 (defun egg-predict-mode-in-inline ()
   (interactive)

なお,tamagotamago-tsunagiset-face-underline-p を使っていないので,この問題は生じません. (set-face-underline も使っておりません.)

もう一つ問題があります. Ctrl-\ で英字とローマ字入力のモードを切り換えていますが,ローマ字入力から英字に戻る際に

deactivate-input-method: Symbol’s function definition is void: nil

と言われて戻りません. なぜか,もう一度 Ctrl-\ とすれば戻ります. こう直せば良いです.

--- wnn7egg-leim.el.orig        2023-08-22 03:07:24.075451000 +0900
+++ wnn7egg-leim.el     2023-08-27 02:11:33.206847000 +0900
@@ -48,13 +48,13 @@
 (defun wnn7egg-activate (&optional name)
   (require 'wnn7egg)
   (require 'wnn7egg-cnv)
-  (setq inactivate-current-input-method-function 'wnn7egg-inactivate)
+  (setq deactivate-current-input-method-function 'wnn7egg-deactivate)
   (setq wnn7egg-default-startup-file "eggrc-wnn7")
   (wnn7-egg-mode)
   (setq wnn7-activate t);;;;
   (toggle-egg-mode))
 
-(defun wnn7egg-inactivate ()
+(defun wnn7egg-deactivate ()
   (setq wnn7-activate nil);;;;
   (cond (egg:*mode-on* (toggle-egg-mode))))

emacs 29.1 にて byte-compile すると,Warnig が多数出ます. そのうち obsolete と言われる箇所を修正しました. 4.7 節の patch29.tgz をご覧下さい.

なお,これらの修正を施したものは emacs 30.0.50 (editors/emacs-devel) でも動作しております.

4.6 emacs 31 以後

(2024.7.26) いつの間にか editors/emacs-develemacs 31.0.50 に更新されていました.

emacs 31 では,ファイルを save して終える際に,次のような警告が出ます.

Error (wrong-type-argument obarrayp [nil nil nil nil nil]); continue? (y or n) n
apply: Wrong type argument: stringp, (wrong-type-argument obarrayp [nil nil nil nil nil])

ここは本来ならば,「Wnnの頻度情報・辞書情報を退避しました。」と出力されるはずのところです.

この問題は,/usr/local/share/emacs/site-lisp/wnn7egg/ にて以下のようにすれば回避することができます.

--- wnn7egg-lib.el.orig      2002-05-24 00:00:00.000000000 +0900
+++ wnn7egg-lib.el      2024-07-27 00:46:36.828430000 +0900
@@ -360,9 +360,11 @@
 
 (defun wnn7-env-create (proc env-id &optional name)
   (if name
-      (set (setq name (make-symbol name)) (make-vector 5 nil)))
+      (set (setq name (make-symbol name)) (obarray-make 5)))

make-vector は他にも数ヵ所あるのですが,単純に obarray-make に置き換えると動作がおかしくなる部分もありました. (置き換え方が適切でない可能性もあります.) もう少し検討を続けてみようと思います. 現時点では patch は作りません.

4.7 patch

要修正個所がどんどん増えてきました. 解説も負担ですし,Wnn 8 を使うつもりでこれをお読みになる方にとっても負担です. そこで,ports の wnn7egg のための patch を作りました.

先ず次のいずれかを download してください. → files.tgz, files29.tgz

前者は 4.4 節の emacs 28 までの,後者は 4.5 節の emacs 29 までの修正を行なうものです.

次にこれを以下のところで解凍し,ports の wnn7egg を導入してください.

# cd /usr/ports/japanese/wnn7egg
# tar xzvf patch のあるところ/files.tgz   または files29.tgz
# make; make install

~/.emacsd/init.el のは以下のように修正します.

- (if (featurep 'xemacs)
- (setq load-path (append '("/usr/local/lib/wnn7/elisp/xemacs21") load-path))
- (setq load-path (append '("/usr/local/lib/wnn7/elisp/emacs20") load-path)))

+ (setq load-path (append '("/usr/local/share/emacs/site-lisp/wnn7egg") load-path))

emacs の起動に少しだけもたつきを感じましたが,*.el を byte compile したら改善されました.

本来は,この patch において私の貢献に依らない部分は出所や著作権を明示する必要があります. 現時点ではそこが完遂できておりません.
順番が逆になって申し訳ありませんが,それらは今後ここに記すかまたは patch に文書として添付する予定です.

5. 辞書のメンテナンス

Wnn 8 には,辞書をメンテナンスするツールが用意されています. ここでは,より直接的にメンテナンスする方法を提示します.

(1) ユーザー辞書への登録法
  登録したい単語をマウスでドラッグし,次いで次のようにします.

M-x wnn7-toroku-region

質問に答えていけば,その単語はユーザー辞書 ud (/usr/local/lib/wnn8/dic/username/ud) に登録されます.

(2) 辞書のメンテナンス
  自動的な学習機能は役に立つのですが,使い込む過程でミスまで学習してしまい,変な癖がついてしまいます. 定期的に「掃除」した方が良いでしょう. (ユーザー辞書 ud は自動的に学習結果を反映しないので,掃除というより確認が目的です.)

#!/bin/csh -f
cp /usr/local/lib/wnn8/dic/usr/username/bunsetsu bunsetsu.dic
cp /usr/local/lib/wnn8/dic/usr/username/katakana katakana.dic
cp /usr/local/lib/wnn8/dic/usr/username/ud ud.dic
#
/usr/local/bin/wnndtoa bunsetsu.dic > bunsetsu.u
/usr/local/bin/wnndtoa katakana.dic > katakana.u
/usr/local/bin/wnndtoa ud.dic       > ud.u

こうして得られた bunsetsu.u, katakana.u, ud.u をエディターで編集し,ミスの部分をその行ごと消します.

次に,修正したファイルを辞書用のファイルに変換します.

#!/bin/csh -f
/usr/local/bin/wnnatod bunsetsu < bunsetsu.u
/usr/local/bin/wnnatod katakana < katakana.u
/usr/local/bin/wnnatod ud       < ud.u

最後に辞書用のファイルを cp します. この作業は su で行ないます. (cp に option -p を付けてはいけません.)

#!/bin/csh -f
cp bunsetsu /usr/local/lib/wnn8/dic/usr/username/
cp katakana /usr/local/lib/wnn8/dic/usr/username/
cp ud       /usr/local/lib/wnn8/dic/usr/username/

使ってみてトラブルがあったら,拡張子 .dic を付けて保存しておいた元の辞書用のファイルを (拡張子をなくした名前で) cp して元の状態に戻します.

6. マニュアル

2.2 節にて解凍した「Wnn8 アップデートモジュール(フルセット版)」の中に doc/html/ があり,そこに HTML 形式のマニュアルがあります.
少なくとも「フルインストール」を選択すれば,これは /usr/local/share/doc/wnn8/html/ に置かれます.

このマニュアルは,index.html からすべてを巡ることができます.

% firefox index.html

7. tamago-tsunagi からの利用

私は tamago-tsunagi を常用しておりませんので,十分に試用したとは言えません. そのような制限付きの動作報告です.

環境は FreeBSD 12.3 + emacs 28.2 および FreeBSD 13.2 + emacs 29.1 です.

少なくとも最新の tamago-tsunagi-5.0.7.1 は Wnn 8 に対応しております. 64 bit OS の環境でも問題なく使えるようです. ただし,/usr/local/share/emacs/site-lisp/egg/eggrc を Wnn 8 用に配布されている eggrc-wnn7 に従って以下のように修正しました. (この修正なしでも動作しております.)

--- eggrc.orig  2021-02-17 01:44:06.892979000 +0900
+++ eggrc       2021-02-17 13:57:35.976853000 +0900
@@ -201,16 +201,16 @@
   (wnn-add-fiusr-dict '("fiud") nil t nil)

   (wnn-add-dict "system/kihon.dic"          '("kihon.h")          6 nil t)
-  (wnn-add-dict "system/kihon3_4.dic"       '("kihon3_4.h")       6 nil t)
+;;  (wnn-add-dict "system/kihon3_4.dic"       '("kihon3_4.h")       6 nil t)
   (wnn-add-dict "system/symbol.dic"         '("symbol.h")         1 nil t)
-  (wnn-add-dict "system/symbol3_4.dic"      '("symbol3_4.h")      1 nil t)
-  (wnn-add-dict "system/symbol_noat.dic"    '("symbol_noat.h")    1 nil t)
-  (wnn-add-dict "system/symbol3_4_noat.dic" '("symbol3_4_noat.h") 1 nil t)
+;;  (wnn-add-dict "system/symbol3_4.dic"      '("symbol3_4.h")      1 nil t)
+;;  (wnn-add-dict "system/symbol_noat.dic"    '("symbol_noat.h")    1 nil t)
+;;  (wnn-add-dict "system/symbol3_4_noat.dic" '("symbol3_4_noat.h") 1 nil t)
   (wnn-add-dict "system/tel.dic"            '("tel.h")            1 nil t)
   (wnn-add-dict "system/zip.dic"            '("zip.h")            1 nil t)
   (wnn-add-dict "system/tankan.dic"          nil                   1 nil nil)
   (wnn-add-dict "system/tankan2.dic"         nil                   1 nil nil)
-  (wnn-add-dict "system/tankan3_4.dic"       nil                   1 nil nil)
+;;  (wnn-add-dict "system/tankan3_4.dic"       nil                   1 nil nil)
   (wnn-add-dict "system/ikeiji.dic"          nil                   1 nil nil)
   (wnn-add-dict "system/rensou.dic"          nil                   1 nil nil)
   (wnn-add-dict '("ud")                        ""                  15 t  t)

この 5 行は JISX0213 対応の第 3,第 4 水準の基本辞書やシンボル辞書を指定しています. これらを comment out して「使わない」設定にしています. これらの辞書は以下にちゃっんと存在し,かつ大きなものではないので,なぜ使わないのか不明です.

/usr/local/lib/wnn8/dic/system/

emacs から tamago-tsunagi を使うために,~/.emacs.d/init.el の関連部分は以下のように記述します.

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/egg")
(load-file "/usr/local/share/emacs/site-lisp/egg/leim-list.el")

(2023.5.14) emacs 28 においては make-coding-system の問題が未解決なので使えません.

この問題に対応するため,editors/tamagoegg-com.el, egg-x0213.el を参考にして patch1 を作りました. (tamagotamago-tsunagi において,これらはほぼ同一です. 私は単純に書き換え作業をしただけです.) なお,これには上記の eggrc に対する patch も含まれています.

また,4.3 節 で述べた cl 対策のために patch2 を作りました.

(2023.8.30) emacs 29 ではこの patch2 を使わないで下さい. (おそらく 30 でも.)

patch を download し,以下のようにして下さい.

% tar zxf tamago-tsunagi-5.0.7.1.tar.gz
% cd tamago-tsunagi-5.0.7.1

% patch < ../patch1
% patch < ../patch2    ← 試すならば

% ./configure
% gmake
% su
# gmake install

8. tamago からの利用

環境は FreeBSD 12.3 + emacs 28.2 および FreeBSD 13.2 + emacs 29.1 および FreeBSD 13.2 + emacs 30.0.50 です.

私は tamago を常用しておりませんので,十分に試用したとは言えません. そのような制限付きの報告ですが,問題なく Wnn 8 が動作しております.

eggrc は前節の tamago-tsunagi と同様に修正しました. (patch は作っておりません.)

tamago を使うために,~/.emacs.d/init.el の関連部分は以下のように記述します. (emacs 29.1 の場合)

(add-to-list 'load-path "/usr/local/share/emacs/29.1/site-lisp/egg")
(load-file "/usr/local/share/emacs/29.1/site-lisp/egg/leim-list.el")

ついでながら,7 節 にて cl 対策のために作成した patch2 に相当する patch-tamago を作りました.
このファイルを /usr/ports/editors/tamago/files/ に置いて make, make install すれば良いです.

当面は必要ないですが,この先 cl が廃止になったり,Warning がうるさいと感じたらお使い下さい.

(2023.8.30) emacs 29, 30 ではこの patch を使わないで下さい. 以下のようなエラーが出て動作しません.

byte-code: Wrong number of arguments: (1 . 2), 0

cl の代わりに cl-lib を使うように修正すると,its/ の下のものが正常に動作しなくなることが原因です. 適切に修正できていないのか,cl-lib では代替えにならないのか,分かりません.

こうなってくると,emacs 28.2 にて本当にこれで動いていたのかも疑わしいです. 申し訳ありませんが,この patch は使わないで下さい.

(参考) ports から emacs 30.0.50 (editors/emacs-devel) 用の tamago を導入する場合,/etc/make.conf に以下のように指定して下さい.

DEFAULT_VERSIONS+=emacs=devel_full

(2024.7.26) emacs 31.0.50 にて動作することを確認しました.
既に 5/30 の時点で files/patch-its.el が追加され make-vectorobarray-make に置き換えているので,それが効いているのかもしれません.