[Prev] [Up] [Next]

boiled-canna の部屋

このページは、自作の boiled-canna を紹介しているページです。 boiled-canna を利用する事により発生する如何なる不都合についても私は責任を持てませんので、boiled-canna の利用はご自分の責任で行ってください。

概要

boiled-canna は CANNA 版 boiled-egg です(分かる人はこれで分かる(^^;)。
boiled-canna は、emacs 上で動作する日本語入力インタフェースの一種です。CANNA のフロントエンドとして動作し、emacs のバッファに挿入されているアルファベットを、あたかも CANNA がかな漢字変換可能な状態でそのローマ字を入力して変換をかけたかのような状態にしてくれるインタフェースです。


動作リスト

最新版の boiled-canna が動いた、動く emacs のリストです

ただし、xemacs-20.4 では、動くには動きますが、boiled-canna のフル機能が使えません(特に、再変換まわりがNG)。

開発の背景

今は、昔、Nemacs の日本語入力環境として、標準では EGG、オプションで SKK の時代がありました。その後に CANNA も追加されるのですが、、、、この時代に、日本語入力するとなると EGG を C-\ で有効にし、ローマ字を入力して SPC で変換、RET で確定と言うのが、通常の流れでした。これはまさに、MS-DOS や MS-Windows でおなじみの FEP と同じ操作をする必要があったと言うことです(別に当時は面倒だとも思ってませんでしたが)。当然、アルファベットを中心に入力する時は、再度 C-\ を入力して EGG を無効にする必要がありました。

と、ここに EGG を使いやすくする拡張として boiled-egg と言うものが出現しました。boiled-egg の画期的だったのは、FEP の ON/OFF を行うと言う概念が無くなった事です。どういう事かと言うと、アルファベット(ローマ字)を通常通りに打ち込んで行って、漢字変換したくなった時に C-j と打つとそれまで入力していたアルファベット(ローマ字)が、あたかも FEP ON の状態で入力したかのように漢字変換する事が出来たと言う事です。この動作で何が嬉しいかと言うと、プログラムのようなアルファベット中心(コード部分)の入力と日本語中心(コメント部分)の入力が頻繁に切り替わるような場合に、一切、FEP の状態を気にしなくとも良くなり、思考が中断される事無くコーディングに勤しめるようになった。と言う事で、長らく、boiled-egg を使っていたのですが、その当時の、EGG と言うか jserver はたまにお亡くなりになる事があってメンテナンスがうっとうしかった記憶があります。

その後、時代は流れ、CANNA も Nemacs で使えるようになり、Nemacs も Mule となり、Mule-2.x も出始めていた頃、いわゆる DOS/V マシン(PC-AT互換機) が巷に出回り、早速、購入(ちなみに、当時日本標準機の PC-9801 は持っていませんでした)。これで『自宅でも UNIX 出来る』と喜んだのは良いのですが、BSDには AT&T と BSD との著作権問題という暗い影が差し込んでおり、それならイッチョ Linux でも入れてみっかと言う事でLinuxをインストールしたのですが、また、jserver と格闘するのが嫌だったのと設定がうっとうしい(/etc/host.confをいじる必要があった)のが嫌で cannaserver に流れてしまいました。

しかし、ここで問題発生、boiled-egg が使えない、、、と言う事でほんのちょっとの間、canna-boil(CANNA 対応の mule を作ると使えた boiled-egg もどきのインタフェース)を使っていたのですが、canna-boil にも癖があり、どうも馴染めない(一番許せなかったのは変換対象としてアルファベットしか拾わなかった事で、次に許せなかったのが fence-mode でローマ字を入力し始めると候補を確定してくれるのは良いのだが文節区切りの空白をそのまま残してくれる事だった)。canna-boil がここまでやってくれてるんだから、『もうちょっと処理を追加してあげればもっと boiled-egg らしく動作するようになるのに』と言う事で、開発したのが boiled-canna です。


特徴

boiled-canna は emacs 上で動作する日本語変換インタフェースの一種です。 boiled-canna は以下のような特徴を持っています。


使い方

boiled-canna を使うには .emacs に以下を追加して下さい。

(load "boiled-canna")
(boiled-canna-mode 1)
これで、全バッファで boiled-canna が使えます。モードライン(通常反転している行)のモード欄(通常'('と')'で囲まれた部分)に "BC" と表示されていれば boiled-canna 有効な状態です。

boiled-canna の基本は C-j です。

これでカーソル以前にあったローマ字を漢字変換します。と言ったところで、C-j しても確定されるわけではなくて、変換が間違っていれば、変換候補を切替える事のできるフェンスモードというモードになるだけです。フェンスモードでの操作は CANNA そのものです。例外は C-j で次候補になる事です。

kanakanjihenkan_
↓ C-j
|名 漢字 変換|
↓ C-m
仮名漢字変換_
変換範囲はカーソル位置から行頭方向に向かって同種の文字(実は、アルファベット(ローマ字)に限らず、ひらがな、カタカナ(半角、全角)、数字、記号も変換範囲とする事が出来ます。さすがに漢字は除きますが)が続く部分が、変換対象となります。この時、空白文字(空白、タブ、改行)を飛び越して変換範囲とする事はありません。アルファベットとかな漢字混じり文を書く時は、アルファベットと変換するローマ字の間に空白を置いてあげるとスムーズに変換できるようになります。
canna kanjihenkan_
↓ C-j
canna |字 変換|
↓ C-m
canna 漢字変換_
また、変換しようとしている文字列の前に同種の文字列がつながっている場合にはその部分まで変換範囲になってしまいますが、region を指定してあげる事で変換する範囲をregionに特定してあげる事が出来ます。
cannakanjihenkan
↓ C-@ C-e
cannakanjihenkan_
↓ C-j
canna|字 変換|
↓ C-m
canna漢字変換
更に、変換確定直後に限り、C-j で再変換します。
kanjihenkan_
↓ C-j
|じ 変換|
↓ C-m
感じ変換_
↓ C-j
|じ 変換|
↓ C-j 数回入力
|字 変換|
↓ C-m
漢字変換_
変換を中止したい場合には、 C-g で変換を中止します。
kanjihankan_
↓ C-j
|字 反感|
↓ C-g
kanjihankan
変換中に非空白文字を入力すると変換を確定し入力した文字を確定した文字列の後ろに挿入します。
kanji_
↓ C-j
|字|
↓ henkan
漢字henkan_
boiled-canna を無効にするには M-x boiled-canna-mode して下さい。モードラインのモード欄から BC が消えて boiled-canna が無効になった事を示します。再度 boiled-canna を有効にするには M-x boiled-canna-mode でモード欄に BC が表示され、boiled-canna が有効になった事を示します。ようは、boiled-canna は M-x boiled-canna-mode でトグルします。

おまけ

これから説明する操作は、全然 boiled-canna の話ではないのですが、CANNA に詳しくない人もいるでしょうから CANNA の標準的な操作を説明します。

fence-mode の基本操作は

です。小技として を入力すると C-n / C-p で字種変換出来ます。

いろんな設定

boiled-canna の動作は以下の変数を設定する事により変更できます。

boiled-canna-rK-trans-key
今まで C-j と言って来た変換開始キーは、この変数で定義されており、この変数を変更する事により変換開始キーを変更する事が出来ます。
boiled-canna:stop-char
boiled-canna が変換範囲外と認識する文字を設定します。実は、空白文字で変換範囲を識別する他にこの変数に設定した文字でも変換範囲を識別します。default は "(){}" ですが、html 文書を書くにつけ、"(){}<>" にしたくなりますね。
boiled-canna-toggle-buffer
boiled-canna をトグルする範囲を指定します。default は nil で全バッファですが、非nil の値を設定する事により、バッファ単位にトグルさせる事が出来ます。
boiled-canna-preload-hook
boiled-canna の設定を変更するタイミングを与えるためのフックです。上で説明した 3つ の変数を設定する時は、このフックを使って下さい。
boiled-canna-mode-hook
boiled-canna-mode になった後に何らかの処理をさせるためのフックですが、今のところ何に使えば良いのやら良く分からないフックです。
以下に .emacs への設定サンプルを示します。
(add-hook 'boiled-canna-preload-hook
	  (function
           (lambda ()
              (setq boiled-canna-toggle-buffer nil   ; 全バッファでトグル
                    boiled-canna-rK-trans-key "\C-j" ; C-j で変換開始
		    boiled-canna:stop-char "(){}<>") ))) ; "(){}<>"範囲外
(load "boiled-canna")                       ; boiled-canna のロード
(boiled-canna)                              ; boiled-canna 有効
(global-set-key "\M-\ " 'boiled-canna-mode) ; boiled-canna をトグルさせるキー

Updated: 1999/07/18 knak@ceres.dti.ne.jp