この記事は昔, 以下のリンクに置かれていたものです.
http://www1.ttcn.ne.jp/~uranov/U/tips/meadow.html
http://www1.ttcn.ne.jp/~uranov/U/meadow/meadow.html
http://www1.ttcn.ne.jp/uranov/U/meadow/meadow_115.html
Meadow(メドウ)の達人(導師)を目指す意味合いで '魔導士への道' と命名しました. 'まどうし' と書いていますが無理矢理 'めどうし' と読んでください.
UNIX で使い慣れた Emacs(Mule). この環境を Windows でも使いたくて, Meadow (Windows 版 Emacs?)を使っています. しかし UNIX と全く同じ使い勝手とまでは行かず, 細かいところで 思いどおりの操作ができずストレスが溜ります. そこで少しづつではありますが不満解消のために Meadow の環境を強化しています. そんな履歴をここに残します.
何はさておき, Meadow のインストールです. インストール自体はしごく簡単で, 問題は設定ファイル .emacs の記述です. 従来 UNIX で使っていた記述は, 表示や文字のエンコーディング関係が うまく使えませんでした. 結局インターネットを頼りに新たな .emacs を書きました. これらの作業にあたっては, こせきさん*1, かわちょさん*2 のページを参考にしました.
Emacs 環境の再現を目指した大きな要因として, メールの読み書きがあります. 私にとって UNIX と電子メール(E-mail)とは切っても切れない関係であり, UNIX 文化の素晴らしさを味わったのも E-mail があったからこそと言っても 過言では有りません. Rmail, MH(mh-e), Mew とインターフェイスの取り換えはありましたが, 一貫して Emacs 上でメイルの読み書きを行って来ました. Mew を使いはじめたのは いつの頃からだろう... 随分昔だなあ... それはさておき Mew のインストールです.
ちょっと気になって昔のメールを覗いてみたところ,
X-Mailer: Mew beta version 0.90 on Emacs 19.28.1, Mule 2.2
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Date: Tue, 06 Jun 1995 17:09:51 +0900
なんてのが見つかりました. 1995 年かあ. 古いなあ...
Mew のインストールも以前(バージョン 1.94.2 以前)は別途 IM のインストールが 必要だったりして少々手間だったんですが, バージョン 2.0 になってから格段に 簡単になりました. 環境変数 HOME, TZ(タイムゾーン) をしておけば, 後は アーカイブ を展開し, mew.exe を実行するだけです. おまけ機能として Meadow の設定ファイル(.emacs)に Mew 環境の追加まで やってくれます.
Mew を使いはじめて何が良くなったかって? それは何と言っても MIME のサポートによりファイルの送受信が非常に簡単に できるようになったことです. 特にバイナリファイル!! それまではファイルの送信時は tar + gzip + uuencode をし, さらに必要に応じて行分割(split)して送信, 受信はこの逆の手続きを践んでいましたが, Mew を使えばこんな手間は要りません. うーん便利.
Email 歴の若い人には tar + gzip + uuencode + split なんて分からないかも... (送った相手から「コレどうしたらいいんですか」と言う返事が来たこともあります) 逆に向こうからは, 何十メガバイトもあるファイルが添付されて来たり... 話は変わりますが, Mew の機能で「大きなファイルを送るとき自動的に分割して送信」 って言うのは無いんでしょうか. ありそうに思えるんですが... 知っていたら是非お教えください.
Meadow を使っていて最も不満に感じるのは日本語入力です. UNIX 環境では
を使っていました. これらの環境が IME を使った環境に置き換わると... あまりの使い勝手の悪さに涙が出るほどで, とても我慢できません.
特に酷いのは日本語と英語の入り交じった文章を書く場合です. UNIX の文化(?)であるところの
と言う思想が染み着いてしまった結果, MS-IME の使い手に多く見られる 英文字も数字も全てダブルバイト文字で書いた文章が許せません. そんな私には, シングル/ダブル文字の入り交じった文章入力をサポートする boiled-egg や boiled-canna が欠かせません. これらの多大なる恩恵にあずかることに慣れてしまった現在, ファンクションキーや特殊キーを駆使した入力モードの切替えは 苦痛以外の何者でもありません. Windows 版の Wnn Wnn98 等市販のソフトを使うのが, 脱 MS-IME への近道なのはわかりますが, 何とか Free な環境での 脱 MS-IME 実現を目指します.
UNIX のかな漢字変換と言えば Wnn, Canna が 2 大勢力でしょうか. それに加えて SKK も有りますがこちらは変換方式に慣れていないので今回はパス. 「Wnn, Canna と boiled」環境の Windows での利用について インターネットで調べたところ, Canna + YC*10 の組合せが何とか使えそうです. と言っても簡単には実現できそうになさそうですが, 後はやってみるしかありません. そんな訳でまず Canna のインストールです.
以下の手順で Canna を Windows 環境へ導入することができました.
まずは下準備としてコンパイル環境を構築. 具体的には C コンパイラ gcc 環境のための Cygwin *11のインストールと, imake 環境の導入のため XFree86*12 の install を実行.
私の場合 Cygwin 環境は既に導入してあったので, XFree86 環境を導入しただけです. XFree86 導入は単に imake 環境を入手するだけの目的です. 後でわかったことですが, imake 環境だけをインストールすればもっとコンパクトにできそうです.
以下のソースを用意します. 全て作業ディレクトリにでも置いておきましょう.
以下の手順で行いました.
1. ソースの展開とパッチ当て $ tar xzvf Canna35b2.tar.gz $ cd Canna35b2 $ zcat ../Canna35b2-unoff1.patch.gz | patch -p1 $ zcat ../Canna35b2-unoff2.patch.gz | patch -p1 $ bzcat ../Canna35b2-cygwin.patch.bz2 | patch -p1 2. Canna.conf の編集 cannaOwner = uranov cannaGroup = uranov (NT 系の場合は Administrators 等に) CHOWN = echo CHGRP = echo CHMOD = echo 3. コンパイル(cannaconf.h, sglobal.h の作成がポイントです) $ xmkmf; make Makefile ここですぐに make canna を実行するのでなく $ make Makefiles; make clean $ make cannaconf.h; cd lib/canna; make sglobal.h; cd ../.. $ make includes; make depend; make を実行. 4. インストール $ make install; make install.man
インストールが終われば早速, かんなサーバの立ち上げです. 私は次のようなバッチファイルを用意し, これに対するショートカットを スタートアップに登録し, Windows の立ち上げ時に自動実行するようにしています.
[canna.bat] @echo off C:\cygwin\usr\local\canna\bin\cannaserver.exe
次にかんなの弱点とも言われている辞書を入れ換えます. かんな辞書のページ*13 へ行き辞書を入手し,書かれている通りに make, install を行えば OK です. make 作業のためには事前に /usr/local/canna/bin にパスを通しておくと 良いでしょう. 後は dics.dir と .canna への辞書追加, 頻度辞書の作成です.
これで問題なく使えていますが, 一つだけ問題があります. それはサーバの停止です. UNIX の様にシステムの終了時に, 自動的にアプリケーションの終了処理を行うよう 設定できれば良いのですが, Windows の場合うまく行きません. そのくせかんなサーバを終了せずに Windows を落とそうとすると警告が出ます. このため私は Windows 終了時に毎回, タスクバーの 'CANNASERVER' アプリケーションを '閉じる' 様にしています. 何ともスマートでなくて...
せめてもの慰みにかんな用のアイコンを用意してタスクバーを飾っています. こんな感じ. アイコンファイルです.
かんなサーバ側の設定が終わってしまえば, 残すはクライアントとなる Meadow 側の 設定です. まずは YC をインストールします. インストールは簡単, knak さんのページ*10からダウンロードして, 展開したファイルを yc.el とリネームして lisp のパスが通ったところへ置きます. ついでに byte-compile しておきましょう. 最後に .emacs に YC 関係の設定を記述すれば OK. この部分を読み込ませるか Meadow を再立ち上げすれば boiled 環境が使えるようになります.
;; YC (Yet another Canna client) の設定 (load "yc") ; これでフェンスモードは使用可能 (global-yc-mode 1) ; 全バッファで ANK-漢字変換を有効にする (global-set-key "\M-\ " 'yc-mode) (setq yc-canna-lib-path "/usr/local/canna/lib/") ; かんなの初期設定パス (setq yc-canna-dic-path "/usr/local/canna/lib/dic") ; かんなの辞書パス (setq yc-select-count 2) (setq yc-rK-trans-key "\C-j") (setq yc-stop-chars "(){}<>") (setq yc-server-host "localhost") ; かんなサーバホスト名 (setq yc-use-color t) (setq yc-use-fence (not (eq window-system 'x)))
ro-majide[C-j]donndonnnyuuryokushite[C-j]tekitounatokorode[C-j] Control+j wo
[C-j] nyuuryokusureba[C-j] OK. konnnabunnsyougakanntannnikakemasu[C-j].
ローマ字でどんどん入力して適当な所で Control+j を入力すれば OK.
こんな文章が簡単に書けます.
Meadow 環境の目玉ともいえる日本語のインクリメンタル検索 Migemo の インストールです. Migemo を最初に知ったのは UNIX MAGAZINE 2002.2 号の 記事です. 私も日頃から「Emacs 上で簡単に日本語検索出来たらいいのに」と 思っており, 「日本語の文章をバックグラウンドで全てローマ字に展開し, そこで通常のインクリメンタル検索を行い, その結果を元の日本語画面に 反映させれば...」等と考えていました. この Migemo の記事を見たらもう やってみるしかありません. Windows の環境構築にかかりっきりで随分御無沙汰 になっていた UNIX(FreeBSD) を久々に立ち上げインストール. 使ってみたところ, 感激です. これはもう Windows でも使えるようにするしかありません.
高林さんのページ*14にある通り, APEL, Ruby, Ruby/Romkan, Ruby/Bsearch を用意し, コンパイル準備 OK. ここで Windows 環境に合わせちょっぴり(Makefile.in と configure に) 手を加えました.
$ diff Makefile.in.org Makefile.in 155c155,156 < EMACS=$(EMACS) $(SHELL) $(srcdir)/elisp-comp $<; \ --- > echo "(setq load-path (cons nil load-path))" > script; \ > $(EMACS) -q -batch -l script -f batch-byte-compile *.el; \ $ diff configure.org configure 888c888 < emacsdir="\$(datadir)/emacs" --- > emacsdir="/uranov/cygdrive/d/win32app/Meadow/1.14/bin/Meadow" $ ./configure --with-emacs=meadow \ --with-lispdir=/cygdrive/d/win32app/Meadow/site-lisp \ --with-rubydir=/usr/local/lib/ruby/site_ruby
ここまで来たら動作確認. Cygwin の shell (bash) を立ち上げて...
$ migemo /usr/local/share/migemo/migemo-dict uranov uranov|□□□□□□□□□□□□□□□v|□□□v ← 文字化け [Ctrl-c] $ migemo /usr/local/share/migemo/migemo-dict > aaa uranov [Ctrl-c] $ nkf -s aaa uranov|uranov|うらのv|ウラノv
最後に .emacs に記述を追加. ここでは あらいさんの日記*15 に教わりました. 最後の行でデフォルトのサーチは Migemo を OFF にしています. やはり Migemo が ON だと検索が遅くなります. 特に初回の検索が遅いです. 日本語の検索をしたいときは M-x migemo-toggle-isearch-enable としてます.
と, 書いていたように 動作スピードなどに若干の不満を感じながらも使っていた Migemo ですが, たまたまこせきさん*1のページの リンク集から訪れた ぶ〜ちゃんさん*18, Akihisa さん*19 のページを読んでいて Migemo の記事を発見. その内容を参考に修正を加えました. まずは Meadow から migemo がうまく起動できない問題は, migemo の実行スクリプト の先頭行を修正.
#! /usr/bin/env ruby ↓ #! /usr/local/bin/ruby
さらに文字 't' を先頭とした検索が出来ない問題の対策として ruby を最新 リリース版(1.6.8)に入れ換えました. これで .emacs の記述もぐんとシンプルに.
;; Migemo: 日本語インクリメンタル検索 (setq migemo-directory "d:/cygwin/usr/local/share/migemo") (load "migemo") ;(migemo-init) (setq migemo-isearch-enable-p nil)
この他高速化のための, migemo の出力キャッシュ, C/Migemo(C 言語版 migemo)
の記事も試してみました. C/Migemo の方は, Akihisa さんが置いてくれた
バイナリ(Microsoft Visual Studio 6 でコンパイル)はバッチリ動作したのですが,
自分の環境(Cygwin)でコンパイルしたものは何故かうまく動作しません.
どちらの C/Migemo もコマンドラインでの動作結果は同じなのですが...
この問題は時間を見つけて詳しく調べる事にして, さしあたりは ruby 版を
使っています.
Cygwin gcc 版の出力と Visual Studio 6 版のものとの違いをチェックしたところ 違いは唯一改行コード. 前者は LF(0x0a, \n), 後者は CR+LF(0x0d0a, \r\n) と なっていました. クイックハックして出力データに CR が加わるようにし, 両者の出力が完全に一致するようにしましたが, それでもまだうまく動作しません. コードを追って行くと, 文字列の受け取りも fgets() を使っているので同様の問題が ありそうです. ということは Meadow での受渡しを unix タイプにすれば... あっさり動きました. 結局作業内容は以下の通り.
まず下準備として, 漢字コード変換プログラム QKC*20 の UNIX 版(qkcc100)をコンパイル & インストール. そして 香り屋さん*21から C/Migemo のソースを 入手(1.2α 1.1.009 を使いました), emacs モード拡張のパッチを当て, コンパイル(make cyg-all), インストール(make cyg-install). この辺りは前述の Akihisa さん*19 のページをどうぞ.
1 行のみの修正です. 私は修正を加えたものを新たに cmigemo.el としました. バイトコンパイルもしておくと良いでしょう.
--- migemo.el 2002-06-25 02:34:46.000000000 +0900 +++ cmigemo.el 2003-02-16 01:01:46.000000000 +0900 @@ -103,7 +103,7 @@ ; (message (format "migemo %s" options)) (setq migemo-buffer (get-buffer-create " *migemo*")) (setq migemo-process (migemo-start-process - "migemo" migemo-buffer "migemo" options)) + "migemo" migemo-buffer "cmigemo" options)) (process-kill-without-query migemo-process) t))))
こんな感じです. 末尾の 2 行, Meadow 立ち上げ時の初期化と ON/OFF は お好みで.
;; CMigemo: 日本語インクリメンタル検索 (setq migemo-directory "d:/cygwin/usr/local/share/cmigemo/euc-jp") (setq migemo-options (list "-q" "-t" "emacs")) ;(setq migemo-coding-system 'euc-japan-dos) ← MSVC 版を利用する場合 (setq migemo-coding-system 'euc-japan-unix) (load-library "cmigemo") (migemo-init) (setq migemo-isearch-enable-p nil)
これで私にとっての日本語環境の 2 大懸案事項「日本語のインクリメンタル検索」, 「日本語項目のソート」のうち, 片方は解消されました. 次は「日本語項目のソート」. 誰かー...
ここで私のフォント設定について書いておきます. 現在私はそれほど大きくない画面 (家: 1024x768, 会社: 800x600)を用いていることもあり, 14dot の BDF フォントを 用いています. Meadow でデフォルトに設定されているフォントも結構好き (特に 8bit の英数字!)なのですが, 太字(bold)や斜体(italic)の設定が 無かったりして少々不満もあります. このため UNIX で使い慣れた物を 使うようになった次第です.
BDF フォントもいくつかの種類があり, 何にどのフォントを割り当てようか 悩むところです. 例えば漢字フォントの設定で, 標準を橘フォント(k14)の明朝体, bold をゴシックライク k14(k14goth)や東雲 14(shnmk14)等のゴシック体, などと あれこれ当てはめてみたのですが, 結局以下の設定に落ち着きました.
CHARSET | default | bold | italic | bold-italic | |
---|---|---|---|---|---|
iso8859-1 | ASCII | 7x14 | 7x14B | 7x14i* | 7x14bi* |
jisx0201 | 8bit カナ | 7x14rk | 7x14rkb* | 7x14rki* | 7x14rkbi* |
jisx0208 | 16bit かな漢字 | k14 | k14b* | k14i* | k14bi* |
上の表の * 印のフォントはゴシックライク k14の配布パッケージ k14goth-1.6.10.tar.bz2 中のツール mkbold, mkitalic を使って デフォルトのフォントから変換して作成したものです.
フォントの組込みは前出のかわちょさんのページの 「BDF フォントを利用したフォントセット作成」にある設定方法を そのまま利用させてもらいました. この設定ファイルを bdf14-fontset.el として .emacs で読み込ませています.
[.emacs] ;; フォントセットの読み込み (load "~/.emacs.d/bdf14-fontset") (and (boundp 'list-faces-sample-text) (setq list-faces-sample-text "abcde ABCDE 01234 あいうえお アイウエオ 亜衣雨絵御")) ;; 初期フレームの設定 (setq default-frame-alist (append (list '(font . "bdf14-fontset")) default-frame-alist))
list-faces-sample-text の部分は M-x list-faces-display とした時に 英数字だけでなく日本語の表示も確認できるようにするための記述です. 「アイウエオ」の部分は 8bit カナ(俗称 半角カナ)文字にしています. (HTML での表示に不安が残るので 16bit カナに置き換えています) フォントセットを固定するまでは結構重宝していました. (今は不要になっていますが, 残しておいても問題ないでしょう...)
当初, 上述のように全ての環境で 14dot フォントを使っていたのですが, ノート PC の様な小さめのスクリーンでは, もっと小さなフォントを使いたくなり, 12dot フォントを使うようになりました. こちらの方は要町フォントを使っています.
CHARSET | default | bold | italic | bold-italic | |
---|---|---|---|---|---|
iso8859-1 | ASCII | knm12a* | knm12b | knm12i | knm12bi |
jisx0201 | 8bit カナ | knm12r* | knm12rb | knm12ri | knm12rbi |
jisx0208 | 16bit かな漢字 | knm12k* | knm12kb* | knm12ki | knm12kbi |
knm12a は kaname-latin1.bdf を元に, 個人的に英文字デザインを少々変更して 作成したものです. 同様に knm12r は knmhn12x に, knm12k は knmzn12x に 修正を加えたものです.
要町フォントを使っていて少々残念なのは, 文字が 12 x 12 のエリアいっぱいに デザインされている為に, 文字間隔が詰まってしまい, 少々読みづらい点です. 加えてひらがなのデザインが私の好みと若干違っており, いっそのこと自分好みの フォントをデザインしようと, コツコツと 16bit かな漢字の修正を進めています. 要町フォントをテンプレートにしていますが, 文字間のスペースを空けて読み易く するためにほとんどの文字を修正しています. 現在修正が終わっているのは, ひらがな部分のだけなのですが, それだけでも 文面から受ける印象はだいぶ違っています. (修正のときに使った自作ツールを こっそりと置いておきます)
要町フォント修正版が完成すれば, 現在よりも文字間隔が空き, 文字が読みやすく なると自分で期待しているんですが, それまでの繋ぎとして, 以下の設定で 行間を 1dot 広げています. (出典は Meadow の Mailing List だったと思います... 記憶があやふやでごめんなさい)
;; line space (let* ((fontset "bdf12-fontset") (info (fontset-info fontset)) (font (nth 1 (assq 'ascii (aref info 2)))) (alis (w32-get-font-info font)) (old-height (aref info 1))) (setcdr (assq 'height alis) 13) ;; add 1 space (w32-change-font-attribute font alis) (set-fontset-font fontset 'ascii font))
この他私が Meadow 環境で利用している Elisp は
また, あちこちから小技を仕入れて使っています.
;;============ ;; Time Stamp ;;============ ;; html-helper-mode 風に (setq time-stamp-format "%3a %3b %02d %02H:%02M:%02S %Z %:y") (setq time-stamp-start "last modified:[ \t]") (setq time-stamp-end "$") (if (not (memq 'time-stamp write-file-hooks)) (setq write-file-hooks (cons 'time-stamp write-file-hooks)))