Ubuntu 8.04 (amd64) で Wnn8 + scim-wnn + wnn7egg を使う

昨晩,[id:munepi:20081018:1224339999](ATOK X3 for Linux (with iiimecf) vs. Wnn8 for Linux (with wnn7egg) on GNU Emacs 22)で ATOK X3 の文句を言いまくったので,今晩は Wnn8 + scim-wnn + wnn7egg (with libwnn7) の使い方を書きます.

Ubuntu に限らず,今時の xorg 7 + utf8 なディストリで Wnn8 を使うためのメモだと思います.VineSeed でも近々 scim-wnnscim-honoka などを rebuild して,使えるようにする予定です.

wnn8-le, wnn8-utils の deb を再構成

wnn8-le, wnn8-utils の xlibs 依存を DEBIAN/control から抜きます.

展開
mkdir -p wnn8-utils_1.00-1_i386/DEBIAN
dpkg-deb --extract wnn8-utils_1.00-1_i386.deb wnn8-utils_1.00-1_i386
dpkg-deb --control wnn8-utils_1.00-1_i386.deb wnn8-utils_1.00-1_i386/DEBIAN/

再構成
dpkg-deb --build wnn8-utils_1.00-1_i386

wnn8-le も同様な作業を行います.

Wnn8 のインストールスクリプトの修正

inst.utf8 をちょこっと修正します.

--- inst.utf8	2007-10-16 01:10:51.000000000 +0900
+++ inst_ubuntu8.04.utf8	2008-10-19 21:33:55.000000000 +0900
@@ -1,4 +1,6 @@
 #!/bin/sh
+### inst_ubuntu8.04.utf8 for Ubuntu 8.04 (amd64)
+
 ###
 ###    Wnn8 for Linux    Install/Uninstall Script Ver1.00
 ###    (c) Copyright OMRON SOFTWARE Co., Ltd. 2005
@@ -28,10 +30,10 @@ SOLARIS=          # solaris かどうか
 
 # Linux バンドル時はディストリビューション名を定義
 #  {redhat|vine|turbo|debian|ia64}
-BUNDLE_DIST=""
+BUNDLE_DIST="debian"
 
 #バンドルディストリビューションの表示名
-BUNDLE_DIST_NAME=""
+BUNDLE_DIST_NAME="debian"
 
 #--------------------------------------------------
 #  インストールするパッケージファイル名
@@ -131,7 +133,7 @@ J_WNN7SUSEP_NAME="Wnn7 SUSE9.2 bundle pa
 ### パッケージインストールコマンド
 PKGINST_L="rpm -i"
 PKGINST_F="pkg_add"
-PKGINST_D="dpkg -i"
+PKGINST_D="dpkg -i --force-architecture"
 PKGINSTCMD=
 
 ### パッケージ削除コマンド

後は,inst_ubuntu8.04.utf8 を走らせて,Wnn8 の本体をインストールします.

jserver の init script でうだうだ吐くのが気になる場合は,Fedora 8 x86_64 で Wnn8 Linux を使う [id:munepi:20080711:1215785570] にも書いたパッチを当てるとおとなしくなります.

--- /etc/init.d/wnn8.orig	2005-01-24 00:00:00.000000000 +0900
+++ /etc/init.d/wnn8	2008-04-10 17:50:56.000000000 +0900
@@ -14,8 +14,11 @@
 case "$1" in
   start)
 	echo -n "Starting Wnn8 jserver: "
-        daemon /usr/sbin/jserver
-        echo
+#	/usr/sbin/jserver -pno 22273 -message_locale C >/dev/null 2>1 &
+#        daemon /usr/sbin/jserver
+        daemon /usr/sbin/jserver > /dev/null
+#        echo
+	action "" /bin/true
         touch /var/lock/subsys/wnn8
         ;;
   stop)

libwnn7 のインストール

UbuntuDebian でも)では libwnn7 パッケージがないので,自前でビルドします.

libwnn7-20011017-1vl5.src.rpm*1VineSeed から取ってきて rpm2cpio で展開すると,必要なパッチも出てきますので,後は以下の Makefile で呪文を唱えるだけです.

# libwnn7 for Ubuntu 8.04 (amd64)
# based on libwnn7-20011017-1vl5.src.rpm

INCLUDEDIR=/usr/include/wnn7
LIBDIR=/usr/lib

all: build

prep: clean
	tar jxf Wnn7SDK.tar.bz2

	patch -p0 < Wnn7-SDK-64bit.patch
	patch -p0 < Wnn7-SDK-do-not-return-random-data-in-functions.patch
	patch -p0 < Wnn7-SDK-gcc4.patch
	patch -p0 < Wnn7-SDK-malloc.patch
	patch -p0 < Wnn7-SDK-static.patch
	patch -p0 < Wnn7-SDK-vine.patch

build: prep
	cd src && make World -f Makefile.ini

	ls src/Wnn/include/*.h src/Wnn/jlib/*a src/Wnn/jlib/*.so* | \
	sed -e 's|src/Wnn/include|${INCLUDEDIR}|g' \
		-e 's|src/Wnn/jlib|${LIBDIR}|g' > manifest

install: 
	install -m 755 -d ${INCLUDEDIR}
	install -m 644 src/Wnn/include/*.h ${INCLUDEDIR}
	install -m 644 src/Wnn/jlib/*.a ${LIBDIR}
	cp -a src/Wnn/jlib/*.so* ${LIBDIR}

	/sbin/ldconfig

uninstall:
	@if [ ! -f manifest ]; then exit 1

	cat manifest | xargs rm -f
	rm -rf ${INCLUDEDIR}

	/sbin/ldconfig

clean: 
	rm -rf src

### end of file

scim-wnn v1.0.0 のインストール

libwnn7 と同様に,UbuntuDebian でも)では scim-wnn パッケージがないので,自前でビルドします.

scim-wnn-1.0.0-1vl5.src.rpm*2VineSeed から取ってきて rpm2cpio で展開して,後は以下の Makefile で呪文を唱えるだけです.

# scim-wnn for Ubuntu 8.04 (amd64)
# based on scim-wnn-1.0.0-1vl5.src.rpm

PKG=scim-wnn-1.0.0

PREFIX=/usr
LIBDIR=${PREFIX}/lib

all: build

require: 
	sudo apt-get build-dep scim scim-anthy

prep: clean
	tar zxf ${PKG}.tar.gz
	patch -p0 < ${PKG}_for-wnn8.patch

build: prep
	cd ${PKG} && \
		bash configure --prefix=${PREFIX} && \
		make

install: 
	cd ${PKG} && make install
# remove unpackaged files
	rm -f ${LIBDIR}/scim-1.0/*/Helper/*.{a,la}
	rm -f ${LIBDIR}/scim-1.0/*/IMEngine/*.{a,la}
	rm -f ${LIBDIR}/scim-1.0/*/SetupUI/*.{a,la}

	/sbin/ldconfig

uninstall:
	make uninstall
	/sbin/ldconfig

clean: 
	rm -rf ${PKG}

### end of file

wnn7egg のインストール

こちらも VineSeed の wnn7egg-1.02-1vl5.src.rpm*3を取ってくると,必要な物は揃います.

以下のスクリプトは wnn7egg を byte-compile します.このスクリプトは,Debian の wnn7egg_1.02-7.diff.gz を元にして,VineSeed の wnn7egg-1.02-1vl5.src.rpm に取り込んだものを改変しました.

#!/bin/sh 
# This script is to bytecompile wnn7egg v1.02-1.
# This particular script hasn't been tested, so be careful.

### modified wnn7egg-install.sh contained in wnn7egg-1.02-1vlmp2.src.rpm
FLAVOR="emacs"
PACKAGE="wnn7egg"

#ELDIR=/usr/local/share/emacs/site-lisp/${PACKAGE}
ELDIR=${HOME}/lib/emacs/${PACKAGE}

EL_ONLY="eggrc-wnn7 wnn7egg-edep.el its-v309"
FILES="wnn7egg-cnv.el wnn7egg-leim.el wnn7egg-jsymbol.el wnn7egg-lib.el \
wnn7egg.el wnn7egg-com.el wnn7egg-rpc.el busyu.el"
FLAGS="--no-site-file -q -batch -l path.el -l ./wnn7egg-lib.el \
-f batch-byte-compile"

echo -n "install/${PACKAGE}: Byte-compiling for ${FLAVOR} ..."

# Byte compile
cd ${ELDIR}
echo '(setq load-path (cons "." load-path) byte-compile-warnings nil)'> path.el
${FLAVOR} ${FLAGS} ${FILES} > CompilationLog 2>&1
#rm -f ${FILES} path.el
rm -f path.el
echo " done."

exit 0;

### end of file

eggrc-wnn7 の辞書を Wnn8 用にして,母音過不足補正機能を nil にします.

cp -a eggrc-wnn7_for-wnn8 eggrc-wnn7
patch -p0 < eggrc-wnn7-boinkabusoku-nil.patch

wnn7egg の設定は基本的に以下でおkです.

wnn7egg-vl.spec の Description: にも書いておきました.

(setq emacs-ime "wnn8")

(if (or (equal emacs-ime "wnn8")
        (equal emacs-ime "Wnn8"))
    (progn
      (setq load-path (append '("~/lib/emacs/wnn7egg") load-path))
      (global-set-key "\C-\\" 'toggle-input-method)
      ;; Shift-Space または 半角/全角 でも起動
      ;(global-set-key [?\S-\ ] 'toggle-input-method)
      (global-set-key [zenkaku-hankaku] 'toggle-input-method)
      ;; canna like toggle keybind
      ;;(global-set-key "\C-o" 'toggle-input-method)
      (load "wnn7egg-leim")
      (set-input-method "japanese-egg-wnn7")
      (set-language-info "Japanese" 'input-method "japanese-egg-wnn7")

      ;; "nn" で「ん」を入力
      (setq enable-double-n-syntax t)
      ;; 候補選択モード
      ;(egg-use-input-predict)
      (setq egg-predict-realtime nil)
      ;; インライン候補選択モード
      (setq egg-predict-mode "inline")
      ;; ウインドウ候補選択モード
      (setq egg-predict-mode "window")

      ;; 候補リスト表示
      ;(define-key wnn7-henkan-mode-map " " 'wnn7-henkan-select-kouho-dai)

;;       ;; 1234567890%#%"'/\| を「半角」で入力
;;       (let ((its:*defrule-verbose* nil))
;;         (its-define-mode "roma-kana")
;;         (dolist (symbol '("1" "2" "3" "4" "5" 
;;                           "6" "7" "8" "9" "0"
;;                           "#" "%" "\"" "'" "/" "\\" "|"))
;;                 (its-defrule symbol symbol)))

      ;; デフォルトの句読点「、。」を「,.」に変更する
      (setq use-touten-for-comma nil)
      (setq use-kuten-for-period nil)

      ;; 逆変換を可能にする;; 自動的に読み込まれるので不要
      ;(load "eggrc-wnn7")

      ;; 部首・画数変換を可能にする wnn7egg には busyu.el はない
      (load "busyu")
    )
)

*1:一応,メンテナしています.

*2:一応,メンテナしています.

*3:一応,メンテナしています.