『かんな/emacs』へようこそ。

この info ファイルはスペースキーとnだけで全て通して読むことができるようになっています。スペースキーを押し、ページスクロールした時に、もうそれ以上スクロールできず、ベルがなる様な場合にはnを押して下さい。次のセクションに進むことができます。

もちろんtexinfoの機能を使って目的の部分だけをツリー上のメニューからたどって読むこともできます。

是非スペースキーとnを使って一度全体を通して読んでみて下さい。

『かんな／ｅｍａｃｓ』とは？
**************

『かんな/emacs』とは日本語入力システム『かんな』を組み込んだNemacsまたは Muleのことであり、日本語を入力するための機能を追加したNemacsまたはMuleです。かな漢字変換はかな漢字変換サーバであるcannaserverと接続して行います。この意味では「『かんな/emacs』はcannaserverのクライアントである」と言えます。

『かんな』と言う名前は「かな漢字変換」の「かな」(仮名)の古い読み方である『かんな』によっています。『かんな』を英語で表記する場合はCannaとつづります。

『かんな/emacs』の特徴
==============

『かんな/emacs』は次のような特徴を持っています。

 1. 『たまご』のようなユーザインタフェース

     『たまご』のようなユーザインタフェースがいいなら『たまご』を使えば良いと思われるでしょう。『かんな』のユーザインタフェースは『たまご』のものと良く似ているのですが、『かんな』が『たまご』と比べて大きく異なる点は、「『かんな』はemacs以外の環境でも使える」という事です。『かんな』はほとんど同じユーザインタフェースをTTY上のフロントエンド(canuum)、Ｘウィンドウ上のフロントエンド(kinput2)、等の形で提供しています。

     すなわち、UNIXのほとんどすべての環境で『かんな』のユーザインタフェースが使えるのです。

     『かんな/emacs』は『かんな』ユーザインタフェースを提供するプログラムの１つとして準備されています。『かんな』を用いて日本語入力を行うプログラムは共通のカスタマイズファイルによってカスタマイズが行えるのはもとより、ほぼ共通のかな漢字変換操作を提供します。

 2. 逐次自動変換方式

     Nemacs または Mule で逐次自動変換をサポートしたのはおそらく『かんな』が初めてでしょう。将来的には一太郎に見られるフル再変換処理を Nemacs または Mule との組み合わせでやりたいところです。

 3. カスタマイズ機能

     機能のキーに対する割り当てや、ローマ字かな変換規則などがカスタマイズできます。

     また、このとき用いるカスタマイズファイルは『かんな』の他のアプリケーションで日本語入力を伴うものと共有されます。

 4. サーバクライアント方式。

     どのマシンで使うときも常に同一マシン上の同一の辞書を使えます。

 5. 日本語入力のための付加機能

     入力した文字の字種変換によりローマ字やカタカナに変換する機能、入力した英単語のCASE(大文字、小文字)を変更する機能、記号入力機能、部首入力機能、１６進コード入力機能、かな漢字変換中に特定の文節の読みを修正し変換し直す機能、接続するサーバを変更する機能、単語登録削除機能、辞書マウントアンマウント機能等をユーザインタフェースの一端として提供します。

 6. 再変換機能

     間違って確定キーを押してしまっても一歩前になら戻れます。

『かんな/emacs』を構成する物件
==================

『かんな/emacs』を構成する物件は次の通りです。

 1. emacs (『かんな/emacs』本体)

     『かんな』ライブラリを組み込んだemacsです。いくつかの『かんな』ライブラリ関数がemacs-lispから呼び出せるようにしてあります。『かんな/emacs』は日本語入力システム『かんな』がインストールされている環境で動作します。

     ベースとなっているemacsのバージョンは18.55(Nemacs)または18.59(Mule)で、 nemacsのバージョンは3.3.2、Muleのバージョンは1.0になっています。

 2. /usr/local/{emacs,mule}/etc/DOC-18.5[59].××

     上記emacsに対応するドキュメントファイルです。

 3. /usr/local/{emacs,mule}/lisp/canna.{el,elc}

     emacsのキー入力を横取りして日本語入力にしてしまうプログラムです。lispで書かれたソース(canna.el)とコンパイルされたオブジェクト (canna.elc)があります。

上記４つのファイルをemacsの18.55または18.59、nemacsの3.3.2またはmuleの 1.0が走っている環境に持ってくれば『かんな/emacs』が使えることになります。

『かんな／ｅｍａｃｓ』で日本語入力するための準備
************************

『かんな/emacs』で日本語を入力するためには、.emacsファイルにある程度の記述を加えなければなりません。基本的には次の記述を加えることになります。

     (if (and (boundp 'CANNA) CANNA) ; 『かんな/emacs』であることを確認して
        ;; 『かんな/emacs』 の場合だけ以下を実行します。
        (progn
         (require 'canna)
         (canna) ))

上記の設定をすると、『かんな/emacs』を利用するためのlispプログラムをロードし、『かんな』の初期化を行います。

これ以外にも.emacsに記述しておくと便利な機能がありますが、それらについては追って説明いたします。

『かんな/emacs』がインストールされている状態で、.emacsに上記の記述が存在すれば、『かんな/emacs』で日本語が入力できるようになります。

日本語入力のしかた
*********

ここでは『かんな』での日本語入力のしかたについて簡単に説明をします。詳しくは『かんな』マニュアルをご参照ください。

日本語モードへの切り替え
============

キーを入力するとアルファベットが入力されるアルファベットモードから、キーを入力するとローマ字かな変換が行われ日本語入力ができる日本語入力モードへ切り替えるためには、C-oかXFERを押します。

読みを入力してない状態でもう一度C-oかXFERを入力することでアルファベットモードへ戻ります。

.cannaファイルで、

     (global-unbind-key-function 'japanese-mode)
     (global-set-key "\C-e" 'japanese-mode)

のように指定するとemacsでも自動的にC-eがモード切り替えのキーになります。ただし、XFERは相変わらずモード切り替えキーとして有効です。

     (global-unbind-key-function 'japanese-mode)
     (global-set-key "\Nfer" 'japanese-mode)

のようにしても、『かんな/emacs』ではXFERがモード切り替えキーとして機能するままであり、しかもNFERがモード切り替えキーになることはありません。C-eを指定したときとNFERを指定したときの違いは、 C-eが１バイトキーなのに対し、NFERがエスケープシーケンスで構成されることです。エスケープシーケンスで構成されるキーに対する機能の割り当ては「ファンクションキーへの機能の割り当て」の項を参照して下さい。

このように、若干の例外はあるのですが、日本語の入力のしかたは『かんな』を使った他のアプリケーションなどの場合と同じです。

※注

『かんな/emacs』では、他のアプリケーションでの日本語入力と違い、ある制限があります。それは、エスケープシーケンスを発生するキーに対して簡単には機能を割り当てられないことです。→「ファンクションキーへの機能の割り当て」

ローマ字かな変換入力
==========

C-oあるいはXFERを入力し日本語入力モードになるとローマ字かな変換が行われます。ローマ字はヘボン式、訓令式のどちらでも受け付けます。『ん』、や『ぁ』『っ』のような拗音については次のように入力します。

     ん(撥音)        n あるいは mn
     んい(ん＋母音)	nni (または、mni または n'i)
     拗音            x を先行させる
     長音            - (ハイフン)を入力する

例えば次のようになります。

     へんかん        henkan
     あんない        annnai / amnnai / an'nai
     たんい          tanni / tamni / tan'i
     てぃー          texi- / thi-

漢字への変換
======

読みを入力した後でspaceを入力することによりかな漢字変換が行われ候補が表示されます。変換した漢字を確定するにはreturnを押します。

                     きょうは
     SPACE           今日は

候補が表示されている状態でBSを入力することにより読みの状態に戻すことができます。

                     今日は
     BS              きょうは

候補選択(次候補、前候補)
=============

かな漢字変換により表示された候補が希望する語でなかった場合には、 ↓(またはC-n)を入力することによって次候補を表示することができます。希望の漢字が出てくるまで何度でも↓を入力できます。

                     今日は
     ↓              京は
     ↓              興は

↓を叩きすぎて希望する語が行きすぎてしまた時には↑ (またはC-p)を入力します。

                     今日は
     ↓              京は
     ↓              興は
     ↑              京は

候補一覧表示
======

同音異義語がたくさんある場合は、候補の一覧を表示させることもできます。漢字に変換した状態で、space(またはXFER、C-w)を入力すると候補一覧が表示されます。

                     今日は
     SPACE           1今日は  2京は  3興は  4強は  5凶は

候補一覧を出した状態では、spaceあるいは→にて次候補(右候補) を選択します。←は前候補(左候補)を選択します。↓・↑はそれぞれ前候補列・次候補列の表示を行います。また、各候補に振られている一桁の数字を入力することにより、その候補までカーソルを移動することができます。

カーソルが希望する候補の所まできたところでreturnを打つことでその候補を選択できます。

どの候補も選択せずに候補一覧モードを抜ける時にはBSまたはC-g を入力します。

文節
==

比較的長い読みを入力しspaceを押すと、表示されている候補が複数の文節に区切られていることがあります。

                     |きょうははやくかえりたい|
     SPACE           |今日は| 早く 帰りたい

次候補・前候補選択や、候補一覧表示などは文字が反転表示されている文節(カレント文節)に対してのみ行われます。別の文節をカレント文節にするためには、 C-fまたは→や、C-bまたは←を用いてカレント文節を移動します。

                     |今日は| 早く 帰りたい
     →              今日は |早く| 帰りたい
     →              今日は 早く |帰りたい|
     ←              今日は |早く| 帰りたい

また、カレント文節の長さが適当でない時があります。このような場合には C-i・C-oを用いて文節の長さを調整して下さい。C-i・ C-oはそれぞれ、文節縮め・文節伸ばしを意味します。

                     |ここではきものを|
     SPACE           |ここでは| 着物を
     C-i             |ここで| 履き物を
     C-o             |ここでは| 着物を

部分確定
====

C-kを入力することにより、カーソルのあった文節より左側の部分を確定させることができます。カーソル部分より後の文節は読みに戻されます。

                     |ながさきはきょうもあめです|
     SPACE           |長崎は| 今日も 雨です
     →              長崎は |今日も| 雨です
     C-k             長崎は|きょうもあめです|

この部分確定機能は、読みを間違えて入力してしまった場合、正しい部分を確定させるという場合に便利です。

字種変換
====

読みを入力している状態や単候補表示状態では、読みの文字列を全角カタカナ・半角カタカナ・全角アルファベット・半角アルファベットなどの文字列に変換することが可能です。字種変換にはC-nまたは↓と、C-pまたは↑を用います。 C-nまたは↓を入力することで『ひらがな〜全角カタカナ〜半角カタカナ〜全角アルファベット〜半角アルファベット』と字種変換が行われ、もう一度C-nまたは↓を入力すると元の読みの状態に戻ります。 C-pまたは↑を入力すると逆周りの字種変換が行われます。

                     ふぉとぐらふ
     ↓              フォトグラフ
     ↓              フォトグラフ(半角)
     ↓              ｆｏｔｏｇｕｒａｆｕ
     ↓              fotogurafu

※注 Nemacs では半角カタカナはスキップされます。

また、字種変換している状態でC-iや、C-oを入力すると字種変換の対象となる領域が伸縮します。

                     ふぉとぐらふを
     ↓              フォトグラフヲ
     C-i             フォトグラフを

入力している読みに、かなに変換されないアルファベットが入っている場合は、カタカナに変換されず、『ひらがな〜全角アルファベット〜半角アルファベット〜ひらがな』の順で字種変換が行われます。

                     こmぷてr
     ↓              ｃｏｍｐｕｔｅｒ
     ↓              computer

記号入力
====

INSを入力することにより記号一覧表示を得ることができます。読みで「きごう」と入力して漢字変換することによっても、一般的な記号が候補として出てきます。選択の方法は数字による選択ができないことを除いて候補一覧表示の時と同じです。

     INS             [2121] 、 。 ， ． ・ ： ； ？ ！

記号を選択しないで記号一覧表示を消すためにはC-gを入力して下さい。 insキーの変わりにM-x canna-kigo-modeによっても同じことが行えます。

16 進コード入力
=========

16 進コード入力の方法には 2 つありますが、ここでは 16 進コードを読みとして入力する方法について説明します。

4 桁の 16 進数を読みとして入力した後にC-yを押すと 4 桁の 16 進数に対応する文字が表示されます。

     2276            ２２７６
     C-y             ♪

部首入力
====

読めない漢字でも部首さえわかればなんとかできるのが部首入力です。ある部首を持つ漢字の一覧を表示させることができます。部首入力の方法には 2 つの方法がありますが、ここでは部首名を読みとして入力し、その入力に対応した部首一覧を表示させる方法について説明します。部首名を読みとして入力した後にC-wを押すと部首一覧が表示されます。目的の漢字を選択する手順は候補一覧の場合と同じです。

     kigamae         きがまえ
     C-w             １气  ２氛  ３氤  ４氣

単語登録
====

日本語入力機能には、変換をより早く的確に行えるようにするために、単語登録機能があります。単語登録は、読みが入力されていない状態の時に行う方法と、リージョンを設定し、M-x canna-touroku-regionで登録する方法があります。

単語登録はユーザ辞書が指定されているときのみ有効です。ユーザ辞書の指定方法については、後述のカスタマイズの項を参照して下さい。

マウントしているユーザ辞書がなくマウントに失敗したユーザ辞書(userdic)がある場合、単語登録を行うときにその辞書を作成するか否かを聞いてきます。「y」と答えると辞書を作成した後に以下の単語登録を行います。

HELP キーでの単語登録
-------------

ユーティリティキーhelpを押し、「４単語登録」を選択し、次に「１単語登録」を選択します。

(このとき、カスタマイズファイルにユーザ辞書を指定しないと単語登録はできません。)

登録する単語を入力します。動詞、形容詞、形容動詞は、終止形で入力し、他はすべて語幹で入力します。returnを押すと、読みの入力要求がされます。次に読みを入力します。returnを押すと、品詞の候補が表示されます。ここで、登録する単語の品詞を入力します。選択した品詞によってはさらに細かい品詞分けをするかどうかが表示されることもありますので、正しいかどうかを考えて答えて下さい。

「第１開発部」を「いちかい」で登録する例は次のようになります。

     HELP            [拡張]|１記号入力| ２コード入力 ３部首入力 ４単語登録 ５環境設定
     ４              [拡張]１記号入力 ２コード入力 ３部首入力 |４単語登録| ５環境設定
     RETURN          [拡張]|１単語登録| ２単語削除 ３辞書マウント／アンマウント
     RETURN          [登録]単語?[]
     第１開発部       [登録]単語?[第１開発部]
     RETURN          [登録]単語?[第１開発部] 読み?[]
     いちかい         [登録]単語?[第１開発部] 読み?[いちかい]
     RETURN          [品詞]|１人名| ２地名 ３団体・会社 ４名詞 ５サ変名詞 ６単漢字
     ４              [品詞]さらに細かい品詞分けのために質問をしてもよいですか？(y/n)
     y               [品詞]「第１開発部な」は正しいですか。(y/n)
     n               [辞書]|１user| ２d1jinmei
     RETURN          [あ] 『第１開発部』を登録しました

M-x canna-touroku-region を用いる場合
-------------------------------

helpキーの代わりにM-x canna-extend-modeでも同じことが行えます

その他
===

その他の機能としては以下のものがあります。

 1. 逐次自動変換による入力

 2. 確定入力モードによる入力(ひらがな、カタカナ(全角/半角)、英数(全角/半角))

 3. 記号入力モード(記号全般、ロシア文字、ギリシャ文字、罫線)

 4. コード入力モード

 5. 部首入力モード

カスタマイズ
******

かな漢字変換に関して変換に利用する辞書を始めとしてキー操作やローマ字かな変換テーブルにいたるまでカスタマイズすることができます。

ここでは、カスタマイズをいかに行うかについて説明します。

カスタマイズのための初期設定
==============

カスタマイズを行うにはまず$(CANNALIBDIR)/sample/default.canna を自分のホームディレクトリに持ってきて.cannaという名前でセーブします。

     %  cp  $(CANNALIBDIR)/sample/default.canna  .canna
     %  chmod  u+w  .canna

すでに.cannaを持っている人は上記の操作は不要です。

※注

$(CANNALIBDIR) は『かんな』の種々のファイルが置かれているディレクトリです。『かんな』をインストールした際のコンフィギュレーションによって、その位置は異なります。例えば、/usr/lib/canna であったり、 /usr/local/canna/lib であったりします。そのマシンでの正確な位置についてはマシンのシステム管理者にお問い合わせください。

個人別学習ファイルの作成
============

基本辞書irohaは各ユーザに共有されており、各ユーザの使用状況によって候補順が並べかえられます。

他の人の利用により候補順が変わるのがいやな場合、次のようにして個人別学習ファイルを作ります。

     % mkdic  -fq  iroha

ユーザ辞書の利用
========

新規に単語を登録するためにはユーザ辞書を設定しなくてはなりません。

ユーザ辞書は mkdic コマンドで作成できます。kuma というユーザ辞書を作成するときは次のようにします。

     % mkdic kuma

次に、カスタマイズファイル.cannaに以下の行を加えます。

     (use-dictionary :user  "kuma")

最初は中身が空のファイルを指定しておき、順次辞書登録により単語を追加していくのがよいでしょう。

ローマ字かな変換のカスタマイズ
===============

ローマ字かな変換に関して、例えば「こんにちは」と入力するのに「konnichiha」と入力するのになれている場合と「konnnichiha」と入力する(「n」の回数が違います)のになれている場合があります。

このようにローマ字かな変換だけをとってみても好みはいろいろあります。

ローマ字変換に関してはカスタマイズファイルにより、好みのテーブルを指定することができます。また、標準的に用意しているテーブルに好みのものがない場合は、自分でローマ字かな変換テーブルを作成することもできます。

ここでは、標準的に提供されているローマ字かな変換テーブルについて説明します。

標準的に提供されるローマ字かな変換テーブルとしては以下のものがあります。

これらのテーブルは $(CANNALIBDIR)/dic の下にファイルの形で存在します。

default.kp
     デフォルトのローマ字かな変換テーブル

just.kp
     一太郎と同一のローマ字かな変換規則を持つテーブル

kana.kp
     アルファベットキーボードで疑似的にかな入力を行うためのテーブル。このテーブルを用いることにより、日本語モードとアルファベットモードの切り替えだけで、かな入力とアルファベット入力の切り替えも行えます

newjis.kp
     アルファベットキーボードで疑似的に新JISキーボードのカナ配列をシミュレートするためのテーブル

kaisoku.kp
     快速ローマ字配列をシミュレートするためのテーブル

tut.kp
     TUT入力用のテーブル

デフォルトではdefault.kpが選ばれますが、その他のローマ字かな変換テーブルを利用する場合はカスタマイズファイルにて次のような行を加えます。kana.kp を利用する場合は、

     (setq romkana-table "kana.kp")

指定した名前はファイル名とみなされサーチされます。サーチは次の順番で行われます。

 1. カレントディレクトリ

     指定されたファイルをカレントディレクトリでサーチします。

 2. ホームディレクトリ

     指定されたファイルをホームディレクトリでサーチします。

 3. 辞書ディレクトリ

     指定されたファイルを $(CANNALIBDIR)/dic でサーチします。

いずれのディレクトリにもローマ字かな変換テーブルが存在しない場合はローマ字かな変換入力が行えませんのでご注意下さい。

機能のキーへの割り当て
===========

デフォルトではどのキーにも割り当てられていない機能(16進コード入力、部首変換など)が存在します。これらの機能を特定のキーに割り当てたり既に割り当てられている機能についても別のキーに割り当てたりすることができます。

以下に例を示します。

     (global-set-key "\F2" 'hex-mode)
     (global-set-key "\F3" 'bushu-mode)

     (set-key 'yomi-mode "\F2" 'convert-as-hex)

上記を.cannaに追加すると、F2,F3キーがそれぞれ、

F2
     16 進入力

F3
     部首選択入力

として機能するようになります。ただし、Emacs から利用する場合には上記だけでは不足であり、さらにいくつかの記述を .emacsに入れる必要があります。本件につきましては「5.2 ファンクションキーへの機能の割り当て」をご覧いただくようお願いします。

こんな風にカスタマイズしてみたい
================

以下では、次のようにカスタマイズしてみたいときにどのようにカスタマイズファイルに記述すれば良いかの例を示します。

 1. 変換はxferですることにし、スペースは全角空白文字の入力として使いたい。

 2. 候補を数字で選んだら候補一覧を抜けたい。

 3. 候補を選択したら次の文節に移動したい。

 4. 一太郎のような操作性で入力したい。

 5. 「 と ［ を両方使いたい。

変換はXFERですることにし、スペースは全角空白文字の入力として使いたい
------------------------------------

このようにするにはまず、スペースキーに対して通常の入力機能(self-insert) を割り当てます。self-insert の self とはキー自身を指します。すなわち、スペースキーに対してself-insertを割り当てると空白を挿入すると言う機能がスペースキーに割り当てられます。

スペースキーに self-insert 機能を割り当てるには以下のようにします。

     (global-set-key "\Space", 'self-insert)

"\Space"はスペースキーを示します。"\Space"の代わりに"   "のように記述しても同じ意味になります。

このように設定するとスペースキーが変換操作に使えなくなり、代わりに全角空白が挿入されます。

候補を数字で選んだら候補一覧を抜けたい
-------------------

『かんな』では候補一覧を表示している状態で候補に振られている数字を押した場合、カーソルがその候補に移動するだけで実際の選択は行われません。

実際に選択を行うには確定キー(デフォルトではリターンキー)を押さなければなりません。

これが面倒で数字を選んだ時点でその候補を選択して、候補一覧表示を終わってしまいたい場合は次のようにカスタマイズファイルに記述します。

     (setq select-direct t)

これにより、数字を選択しただけで、候補が選択され候補一覧が終了します。

候補を選択したら次の文節に移動したい
------------------

長い文章を入れて変換キーを押し、前の文章から候補選択をするようなやり方をしている人も多くいるでしょう。

そのような人の場合、候補一覧で選択した時にカレント文節が同じ部分にとどまってしまうといちいち文節移動をしなければならなくなるので不便を感じてはいないでしょうか。

「一覧を選択したのだからその文節での仕事は終わっているはずだ。一覧選択を終わったら次の文節に移動して欲しい。」というふうにお思いのかたも多いでしょう。そのような場合は、次のようにカスタマイズします。

     (setq stay-after-validate nil)

一太郎のような操作法で入力したい
----------------

「一太郎に慣れているので一太郎とできるだけ同じ操作で日本語入力がしたい」と言うかたもいらっしゃるでしょう。

一太郎とだいたい同じキー操作を提供するカスタマイズファイルが $(CANNALIBDIR)/sample/just.cannaとして提供されていますので、以下のコマンドによりそのファイルをカスタマイズファイルとして使うようにして下さい。

     % cd
     % cp $(CANNALIBDIR)/sample/just.canna .canna

「 と ［ を両方使いたい
-------------

ワープロによっては「.」(ピリオド)を打った時に「。」が入力されるか「.」が入力されるかを選択できたり、「[」(角かっこ)を入力した時に「「」(かぎかっこ)が入力されるか「［」(全角のかっこ)が入力されるかが選択できるものがあります。

『かんな』でもローマ字かな変換テーブルを書き換えれば「.」や「[」に対応する記号を変更することができますが、ローマ字かな変換テーブルの書き換えは若干面倒な作業でもあります。

このような場合以下のカスタマイズを行うことによってそれぞれの記号を両方定義しておき、必要に応じて簡単に切り替えることが可能になります。

     (defsymbol ?. "。" ".")
     (defsymbol ?[ "「" "[")

このようにしておくと「.」を入力した時に変換キーを押すことによって「。」か「.」を選択することができるようになります。

その他特殊なことについて
************

未入力状態について
=========

ここでは、アルファベット入力状態や、日本語入力状態でも入力中の文字列が存在しない状態を「未入力状態」と呼びます。

『かんな/emacs』における未入力状態のとりあつかいは、通常の『かんな』アプリケーションプログラムにおける未入力状態と若干異なります。これは『かんな/emacs』におけるキーの取り扱いとして以下の方針を採用しているためです。

『かんな/emacs』では『かんな』起動時にカスタマイズファイルにおける日本語入力モードとアルファベット入力モードの切り替えのカスタマイズを読み込んで、Emacs におけるモード切り替え機能をそのキーに設定します。そのキーにはcanna-toggle-japanese-modeと言う関数が set されます。 canna-toggle-japanese-modeは、Emacs におけるキーバインディングを大幅に変更します。canna-toggle-japanese-modeは空白文字を含むグラフィカルキャラクタに対応するキーを Emacs のデフォルトである self-insertと、日本語入力モードにおける canna-self-insertとの間で切り替えます。ここで、注意しなければならないのは、コントロールキャラクタに関しては常に Emacs のバインディングのままであることです。

したがって、『かんな/emacs』における未入力時のバインディングは .cannaからは変更できません。『かんな/emacs』における未入力時のバインディングのカスタマイズに関しては.emacsで行う必要があります。

ファンクションキーへの機能の割り当て
==================

「『かんな/emacs』で日本語入力するための準備」で説明した設定が .emacsで行われていれば、F1〜F3などのキーに以下の機能が設定されます。

F1
     記号入力

F2
     １６進コード入力

F3
     部首入力

HELP
     ユーティリティ機能呼び出し

INS
     記号入力

この割り当ては.cannaでの記述と無関係に行われます。

.cannaにてファンクションキーに、ある機能を割り当てても『かんな /emacs』では無視されてしまいます。というのは、emacsでのファンクションキーの使い方がちょっと変わっているためです。

それではファンクションキーにこれらのモードへの移行のための機能を割り当てるにはどのようにするのでしょうか？

emacsではファンクションキーを押すと例えばESC [ 1 1 ~のようなキーを発生します(F1キーの場合)。デフォルトではESC [ (すなわち、 M-[)がbackward-paragraphにバインドされていますので、前の段落に移動して、``11~''が挿入されてしまうことになります。

「『かんな/emacs』で日本語入力するための準備」で示した処理を行っている場合にはM-[とbackward-paragraphのバインドを壊して、ESC [ 1 1 ~のような長いキーシーケンスに対して機能を割り当てることができるようにしてあります。すなわち、ESC [ 1 1 ~に対して次のような処理で canna-kigou-modeを割り当てています。

     (global-set-key "\e[11~" 'canna-kigou-mode)

『かんな/emacs』ではこの方法でF1、F2、F3などにキーを割り当てていたのです。F1〜F3などのキーに対してこの設定を行いたくない場合には、emacsで『かんな』を起動する前に CANNA-DO-KEYBIND-FOR-FUNCTIONKEYSという名前の変数にnilを代入しておいて下さい。例えば、.emacsの記述は次のようになることになります。

     (if (and (boundp 'CANNA) CANNA) ; 『かんな/emacs』であることを確認して
        ;; 『かんな/emacs』 の場合だけ以下を実行します。
        (progn
         (require 'canna)
         (setq canna-do-keybind-for-functionkeys nil)
         (canna) ))

アンドゥ
====

基本操作
----

『かんな/emacs』ではアンドゥ機能をサポートしています。直前に確定した部分をもう一度読みに戻すことができます。もう一度読みに戻すには次のようにします。

     M-x canna-undo

キーへのバインディング
-----------

実はこのcanna-undo、普通のundoを含んでいます。すなわち、直前に確定した日本語の入力がない場合には普通のundoが行われます。したがって、今までundoがバインドされていたキーにcanna-undoをバインドすると便利に使えます。例えばundoをC-_に割り当てていた人は .emacsファイルにて次のように記述するとundoの代わりにcanna-undoを割り当てることができます。

     (global-set-key "\C-_" 'canna-undo)

undo と canna-undo
-----------------

さて、``直前に確定した日本語''とはどのくらい前までの入力のことを指すのでしょうか？

canna-undoはC-oなどによって日本語入力モードを抜けてしまった時にアンドゥの情報を捨ててしまいます。したがって、日本語を入力して確定した場合、日本語入力モードを抜けさえしなければ``直前に確定した日本語''とみなされるわけです。

undoのキーにcanna-undoを割り当てると便利なようで不便なことがあります。例えば、日本語入力モードを抜けないで、C-kなどの操作で行消去を行うことがありますが、このときウッカリC-_などを打ってしまうもんであれば、行の復活の代わりにさっき確定した文字が読みに戻ってしまいます。

本来であれば、C-_を打つまえにC-oを打つなどして日本語入力モードから抜ければ良かったのですが、ここは一発元に戻す方法があります。

本当は本来のアンドゥが行いたかった場合にcanna-undoが作動してしまった場合にはC-g C-_ C-_と打って下さい。最初のC-gで読みを放棄します。実は読みを放棄した場合にもcanna-undoのための情報が失われるのです。この状態ではさっき入力した日本語までなくなってしまいますが、その次のC-_でそれが復活し、次のC-_が本来の目的であったアンドゥとして機能します。

アンドゥバッファに入れる・入れない
-----------------

アンドゥをC-_などに割り当てて使っていると結構便利だったりするのですが、マルやテンを分けて入力した場合はあまりアンドゥが効果がない場合があります。例えば、次のように入力する場合です。

     このようににゅうりょくするばあいです<space>。<return>

このように入力して、

     子のように入力する場合です。

のように変換されてしまってからC-_と打っても、

     子のように入力する場合です|。|

となるだけで、寂しい思いをしてしまいます。

「マルとかテンを分けて打つ癖がある僕も悪いけれどもマルやテンだったらアンドゥバッファに入れなくてもいいんじゃないの？」と思うかたもいるでしょう。ご安心下さい。そういう場合にもちゃんと対応できるのです。

そのからくりは、canna-save-undo-text-predicateという変数です。

canna-undoは入力が確定した時にその確定した入力をアンドゥバッファにとって置くかどうかをcanna-save-undo-text-predicateにお伺いして判断します。canna-save-undo-text-predicateにはその判断を行うための関数を代入しておきます。canna-save-undo-text-predicateという変数に値が束縛されていなかったり、値がnilだった場合には無条件にバッファにセーブしておきます。canna-save-undo-text-predicateは読みと読みを入力した時のローマ字テキストの２つの文字列をcarとcdr に持つ２進木に対して適用されます。例えば、確定した文字列を表す読みが２バイトより長い文字列でなければセーブしないということを指定するには次のように記述することになります。

     (setq canna-save-undo-text-predicate
        '(lambda (s)
           (> (length (car s)) 2) ))

これで、さっきの例でC-_を打つと、マルは飛ばされて次のようになります。

     |このようににゅうりょくするばあいです|。

アンドゥ＋α
------

「再変換機能というからには、読みに戻るのでは駄目で確定する直前に戻るのが本当じゃないの？」という気がしないでもありません。確定する直前に戻るのはひじょ〜〜に大変ですが、それらしくはなんとかすることができます。

それは、アンドゥしたテキストを変換した状態にすることです。アンドゥの後に何かを行いたい場合は、CANNA-UNDO-HOOKという変数に関数を代入します。アンドゥの後に変換を行いたい場合には次のようにします。

     (setq canna-undo-hook
           '(lambda () (message "再変換します....")
             (canna-do-function canna-func-henkan)) )

このようにしておくことにより、canna-undoでは「読みに戻します」というメッセージが出ていたものが「再変換します」というメッセージになり、先に確定した文字列が再変換されます。

CANNA-FUNC-HENKANは「変換」を表す機能の番号です。 canna-do-functionでは『かんな』の色々な機能を直接実行することができます。どのような機能が存在するかは「付録」を参照して下さい。

リージョンの再変換
=========

Emacs上の任意のテキストを再変換する機能を付加しました。リージョンを引いてM-x canna-henkan-regionとしても良いのですが、かな漢字変換用のマークを設定して、ポイント(カーソル)位置を移動し、スペースバーを打つとマークとポイントの間がかな漢字変換されます。スペースバーはマークの直後は再変換用のキーとして使われますが、日本語モードを抜けたり文字を挿入したりした後には通常の空白を入れるキーに戻ります。かな漢字変換用のマークを打つにはキーボードよりC-@を入れることにより行えます。

スペースバーはいつでも空白の挿入として使いたいと言う場合には (canna)を実行するまえに canna-use-space-key-as-henkan-regionにnilを代入しておいてください。このことによりC-@へのかな漢字変換用マークを行うバインドも行われなくなります。

未確定文字列のスタイル
===========

未確定文字列に関する『かんな』のデフォルトのスタイルはアンダーラインを引くというものです。これに対して『かんな/emacs』では２本の縦棒で囲むというスタイルをとっていますが、やはりアンダーラインの方が良いと言うリクエストにお答えすることができます。それには、canna-set-fence-mode-format という関数を使います。例えば次のようになります。

     (canna-set-fence-mode-format nil nil t)

canna-set-fence-mode-formatの各引数では次のことを指定します。

第1引数は入力中の文字列の両脇を縦棒(|)で囲むかどうかを指定します。

第2引数は変換を行っている時に文節と文節の間を空白で区切るかどうかを指定します。nilを指定すると文節と文節の間にすき間を入れません。

第3引数はアンダーラインや反転を使うかどうかを指定します。アンダーラインや反転を使う場合にはattribute.elが必要です。

ちなみに筆者はnil t nilで使っていますが、最初のうちは attribute.elがあるならnil nil t、ないならt t nilで使うのが良いでしょう。

かな漢字変換サーバの指定
============

『かんな』では通常かな漢字変換サーバは環境変数のCANNAHOSTで指定しますが、『かんな/emacs』ではそれに加えてCANNA-SERVERという変数にサーバ名を代入しておくことで指定することができます。

『かんな/emacs』での設定の方が環境変数による設定より優先します。

     (setq canna-server "wink")

カスタマイズファイルの指定
=============

『かんな』では通常カスタマイズファイルは環境変数のCANNAFILEで指定しますが、『かんな/emacs』ではそれに加えてCANNA-FILEという変数にファイル名を代入しておくことで指定することができます。

『かんな/emacs』での設定の方が環境変数による設定より優先します。

     (setq canna-file (expand-file-name "~/.canna-emacs"))

boiled-egg みたいな使いかた
===================

『かんな』を使って boiled-egg みたいな使いかたをすることができます。 boiled-egg みたいな使いかたをするにはRK-TRANS-KEYと言う変数に boiled-egg 的使いかたをする時の起動キーを定義します。例えば以下のようになります。

     (setq rK-trans-key "\C-t")

何も指定をしないとC-jがデフォルトとして用いられます。

さて、boiled-egg 的な使いかたをする場合には、boiled-egg 的な使いかたをしたいバッファにて、

     M-x canna-boil

を実行します。そうすると、RK-TRANS-KEYで指定したキーが起動キーとして定義され、以下のような操作で、日本語入力が行えます。

     boiled-egg mitainitukaemasu<C-j>

上記の入力の結果は以下のようになります。

     boiled-egg |みたいに 使えます|

これは『かんな』で変換キーを押した時と同じような状態です。あとは『かんな』の通常の変換操作で入力できます。

『かんな/emacs』で使える関数
=================

『かんな/emacs』で利用できる関数としては次のものがあります。

canna-bushu-mode
     部首変換モード

canna-henkan-region
     指定されたリージョンの文字を漢字に変換します

canna-hex-mode
     １６進コード入力モード

canna-kigou-mode
     記号入力モード

canna-extend-mode
     ユーティリティモード

canna-reset
     日本語入力システムの再起動

canna-toggle-japanese-mode
     アルファベットモードと日本語モードの切り替え

canna-touroku
     単語登録

canna-touroku-region
     リージョンで指定された単語を登録

canna-undo
     直前に確定した日本語入力を読みに戻す

canna-version
     『かんな/emacs』のバージョンの表示

canna-do-function
     『かんな』の機能を実行します。該当する機能がcanna-do-function呼びだし時の状態で無効である場合はその機能は実行されません。どのような機能があるかは付録を参照して下さい。

canna-set-fence-mode-format
     『かんな』で入力を行っている部分の見え方を指定します。

canna-rk-trans
     左にあるローマ字列をローマ字かな変換し、『かんな』の読み入力状態に移行します。

canna-rk-trans-region
     リージョンで指定された部分にあるローマ字をローマ字かな変換し、『かんな』の読み入力状態に移行します。

canna-boil
     boiled-egg 的な使いかたをする準備をします。この関数はこの関数を実行したバッファだけに効力を持ちます。

まとめ
===

ここで説明した機能を使って.emacsの記述を行うとおおよそ次のようになります。.emacsの修正をするときの参考にして下さい。

     (if (and (boundp 'CANNA) CANNA) ; 『かんな/emacs』であることを確認して
         ;;『かんな/emacs』の場合だけ以下を実行します。
         (progn
          (require 'canna)           ;ライブラリのロード(ロードされてないなら)
          (setq canna-do-keybind-for-functionkeys t)
          (setq canna-server "wink") ;かな漢字変換サーバの指定
          (setq canna-file (expand-file-name "~/.canna-emacs"))

          (canna) ;『かんな』の初期化

          (canna-set-fence-mode-format nil t nil) ; 入力中の見え方
          (global-set-key "\e[209z" 'canna-japanese-mode) ;NFER
          (global-set-key "\C-_" 'canna-undo) ;アンドゥの設定
          (setq canna-save-undo-text-predicate ;アンドゥバッファへ入れる条件
                '(lambda (s) (> (length (car s)) 2)) )
          (setq canna-undo-hook ;アンドゥ＋α
                '(lambda () (message "再変換します....")
                            (canna-do-function canna-func-henkan)) )
         ))

変更点
***

『かんな/emacs』に関しては今まで特別にバージョンをつけてはいませんでしたが、『かんな』Version 1.2 対応のものを 1.2、Version 2.2 対応のものを 2.2 とさせていただきます。今回提供するバージョンも『かんな』Version 2.2 をベースにしていますが、以前の『かんな/emacs』から機能変更がありますので、 Version 2.3 とさせていただきます。

Version 2.2 から 2.3 への変更点
========================

以下に『かんな/emacs』Version 2.2 から 2.3 への変更点を示します。

 1. 最初のモード表示の変更

     最初のモード表示を「かんな」にしました。(今まではハイフン６つでした)。

 2. ミニバッファ利用時のモード表示

     ミニバッファで入力を行っている場合もモード表示をするようにしました。

 3. ミニバッファ入力中のバグの修正

     ミニバッファで入力を行っている時に、候補一覧などを表示させると、今までミニバッファにあった文字列を消してしまうと言うバグがありました。これを直しました。

 4. boiled-egg 対応

     boiled-egg のような入力もできるようにしました。また、mlh もオプション (mlh 側の若干の対応)で対応可としました。

Version 1.2 から 2.2 への変更点
========================

以下に『かんな』Version 1.2 で提供されていた『かんな/emacs』から Version 2.2 ベースの『かんな/emacs』への変更点を示します。

 1. 名前の変更

     各関数、変数などの名前としてirohaとあったものがcannaになりました。また、lisp ファイル名がiroha.elからcanna.elになりました。

 2. 各種定数の定義

     『かんな』における各種定数が以前はlispファイル(iroha.el)で定義されていましたが、これを Emacs のソースファイル(canna.c)で定義するようにしました。

 3. Emacs とのインタフェースの変更

     lisp ファイル(canna.el)と Emacs (canna.c)との間のインタフェースを変更し、consセルの消費を削減しました。

付録
**

以下の変数の値をcanna-do-funcに与えると該当する機能が実行されます。

canna-func-self-insert
     入力された文字をそのまま入力とする

canna-func-functional-insert
     入力された文字を適当にローマ字かな変換などで修飾し入力とする

canna-func-quoted-insert
     次の一文字をそのまま入力とする

canna-func-japanese-mode
     日本語入力モードに移行する

canna-func-alpha-mode
     アルファベット入力モードに移行する

canna-func-henkan-nyuryoku-mode
     全角ひらがな変換入力モードに移行する

canna-func-forward
     右へ移動

canna-func-backward
     左へ移動

canna-func-next
     下または次へ移動

canna-func-previous
     上または前へ移動

canna-func-beginning-of-line
     左端へ移動

canna-func-end-of-line
     右端へ移動

canna-func-delete-next
     次の一文字の削除

canna-func-delete_previous
     左の一文字の削除

canna-func-kill-to-end-of-line
     カーソルから行末まで削除

canna-func-henkan
     変換

canna-func-kakutei
     確定

canna-func-extend
     伸ばし

canna-func-shrink
     縮め

canna-func-quit
     中止

canna-func-convert-as-hex
     読みを１６進コードとみなして変換

canna-func-convert-as-bushu
     読みを部首名とみなして部首一覧表示

canna-func-kouho-ichiran
     候補一覧表示

canna-func-bubun-muhenkan
     無変換

canna-func-zenkaku
     全角に変換

canna-func-hankaku
     半角に変換

canna-func-to-upper
     大文字に変換

canna-func-capitalize
     先頭文字を大文字に変換

canna-func-to-lower
     小文字に変換

canna-func-hiragana
     ひらがなに変換

canna-func-katakana
     カタカナに変換

canna-func-romaji
     ローマ字に変換

canna-func-extend-mode
     ユーティリティモードのメニューの表示

canna-func-touroku
     単語登録モードへの移行

canna-func-hex-mode
     16進コード入力モードへの移行

canna-func-bushu-mode
     部首入力モードへの移行

canna-func-kigo-mode
     記号入力モードへの移行

以下の機能は『かんな/emacs』の『かんな』の部分が Version 2.1 以上のときのみ有効です。

canna-func-adjust-bunsetsu
     一太郎の文節伸ばし縮めモードのような文節伸ばし縮めモードへの移行

canna-func-base-hiragana
     入力文字のベースをひらがなに変更

canna-func-base-katakana
     入力文字のベースをカタカナに変更

canna-func-base-eisu
     入力文字のベースを英数に変更

canna-func-base-zenkaku
     入力文字のベースを全角に変更

canna-func-base-hankaku
     入力文字のベースを半角に変更

canna-func-base-kana
     入力文字のベースをカナ(ひらがなかカタカナ)に変更

canna-func-base-kakutei
     入力ベースを確定入力モードに変更

canna-func-base-henkan
     入力ベースを変換入力モードに変更

canna-func-base-hiragana-katakana-toggle
     入力ベースをひらがなとカタカナの間でトグル

canna-func-base-zenkaku-hankaku-toggle
     入力ベースを全角と半角の間でトグル

canna-func-base-kana-eisu-toggle
     入力ベースをカナと英数の間でトグル

canna-func-base-kakutei-henkan-toggle
     入力ベースを確定入力と変換入力の間でトグル

canna-func-base-rotate-forward
     入力ベースの順次切り替え

canna-func-base-rotate-backward
     入力ベースの順次切り替え(逆回転)

以下の機能は『かんな/emacs』の『かんな』の部分が Version 2.2 以上のときのみ有効です。

canna-func-mark
     マーク

canna-func-temporal-mode
     現在の入力モードを一時保管