Info file: skk.info,    -*-Text-*-
produced by `texinfo-format-buffer'
from file `skk.texi'
using `texinfmt.el' version 2.37 of 24 May 1997.






File: skk.info, Node: ▼モード, Next: 辞書登録モード, Prev: ▽モード, Up: 変換モード

▼モード
........

「▼モード」では実際の変換作業を行なう。▽モードで変換対象とする文字列を
入力した後 SPC をタイプすることで▼モードに入る。`▽'マークから SPC をタ
イプしたときのポイントまでの文字列σが変換の対象となる文字列として確定し、
`▽'マークは`▼'マークで置き換えられ、文字列σが辞書の中で検索される。仮
に、辞書に

     かんじ /漢字/幹事/

というエントリ (1) を含むとして、例を示す。

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼漢字-!-
     ------ Buffer: foo ------

この例では、▽モードにおける`▽'マークからポイントまでの間の文字列`かん
じ'が変換対象の文字列σとして確定し、その文字列σについて辞書内での検索
が行なわれている。実際の変換動作では、候補部分がハイライト表示される (2) 
。

`漢字'が求める語である場合は `C-j' をタイプすれば、この変換が確定し、ハ
イライト表示も`▼'マークも消える。また `C-j' をタイプせずに、続けて新た
な確定入力を行ない、あるいは新たな変換を開始することができる。この場合、
直前の変換は自動的に確定される。これを「暗黙の確定」と呼ぶ。副作用として
確定を伴なうキーは、印字可能な文字全てと RET である。但し、*Note 暗黙の
確定のタイミング:: 参照のこと。

求めるものが`漢字'でなければ、更に続けて SPC をタイプすることで、文字列
σに対する次候補を検索する。

     ------ Buffer: foo ------
     ▼漢字
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼幹事
     ------ Buffer: foo ------

候補が5つ以上あるときは5番目以降の候補は7つずつまとめてエコーエリアに表
示される。例えば、辞書が

     きょ /距/巨/居/裾/嘘/拒/拠/虚/挙/許/渠/据/去/

というエントリを含むときに `K y o' の後に SPC を5回続けて打てば、

     -------------------- Echo Area --------------------
     A:嘘  S:拒  D:拠  F:虚  J:挙  K:許  L:渠  [残り 2]
     -------------------- Echo Area --------------------

がエコーエリア (3) に表示される。ここで仮に`許'を選択したければ、`k'を入
力する。`A', `S', `D', `F', `J', `K', `L' の各文字は、押し易さを考慮して
キーボードのホームポジションから横方向に一直線に配置されているキーが選定
されている。また、候補の選択のために押すキーは、大文字、小文字のいずれで
も良い。候補の選択に用いるキーの変更については、*Note 候補の選択に用いる
キー:: を参照。

SPC を連打してしまい、誤って求める候補を通過してしまったときは `x' によ
り前候補/前候補群に戻ることができる (4) 。

候補を次々と探しても求めるものがなければ、自動的に辞書登録モードになる 
(辞書登録モードは▼モードのサブモードである) 。これについては*Note 辞書
登録モード:: にて後述する。

次に送り仮名のある単語について説明する。`動く'を変換により求めたいときは 
`U g o K u' のように、まず▽モードに入るために `U' を大文字で入力し、次
に送り仮名の開始をSKKに教えるために `K' を大文字で入力する。送り仮名の 
`K' をタイプした時点で SPC をタイプすることなく、▼モードに入り変換が行
なわれる。送り仮名の入力時、ローマ字プレフィックスが挿入された瞬間に、プ
レフィックスの直前に `*' を一瞬挿入し、送り仮名の開始時点を明示する。プ
レフィックスに続くキー入力で、かな文字が完成した時点で `*' は消える。キ
ー入力を分解して追いながらもう少し詳しく言うと、下記のようになる。

     U g o

     ------ Buffer: foo ------
     ▽うご
     ------ Buffer: foo ------

     K

     ------ Buffer: foo ------
     ▽うご*k
     ------ Buffer: foo ------

     u

     ------ Buffer: foo ------
     ▼動く
     ------ Buffer: foo ------

SKKではこのように送り仮名の開始地点をユーザーが明示的に入力するために、
システム側で送り仮名を分解する必要がなく高速でヒット効率が高い変換が可能
である。*Note 送り仮名の自動処理: 送り仮名の自動処理.

但しサ変動詞の変換では、サ変動詞の語幹となる名詞を「送りなし変換」 (5) 
として変換し、その後`する'を■モードで入力した方が現状では効率が良い。
*Note サ変動詞の入力: 辞書登録モード.

--------- Footnotes ---------

(1)  本マニュアルでは、見出し語と候補群を合わせた一行の意味で使用している。詳細は、*Note 辞書の形式:: を参照のこと。

(2) ハイライト表示はEmacsのOverlaysの機能を使用している。Emacs 18では
     Overlaysが実装されていない。

(3) エコーエリアとミニバッファは視覚的には同一の場所にあるが、エコーエリ
     アが単にユーザーへのメッセージを表示するのみであるのに対し、ミニバッ
     ファは独立のバッファとして機能する点が違う。

(4) `x' は小文字で入力する必要がある

(5) 詳細は、*Note 送りなし変換: 辞書の形式 を参照のこと。



File: skk.info, Node: 辞書登録モード, Prev: ▼モード, Up: 変換モード

辞書登録モード
..............

SKKは独立の辞書登録モードは持たない。辞書にない単語についての変換を行な
った場合に、変換の継続動作として辞書登録モードに入る。例えば辞書に

     へんかんちゅう /変換中/

のエントリがない場合に、`変換中'を得ようとして、`H e n k a n t y u u
SPC' とタイプすると、下記のように、カレントバッファは▼モードのまま `へ
んかんちゅう' に対して変換ができない状態で休止し、同時にミニバッファに 
`へんかんちゅう' というプロンプトが表示される。

     ------ Buffer: foo ------
     ▼へんかんちゅう
     ------ Buffer: foo ------

     ------ Minibuffer -------
     へんかんちゅう-!-
     ------ Minibuffer -------

辞書登録モードでは、入力はミニバッファに対して行われる。仮に辞書に

     へんかん /変換/
     ちゅう /中/

のようなエントリがあるとして、ミニバッファで`変換中'の文字列を`変換'と
`中'とに分けて作る。

     H e n k a n SPC T y u u SPC

     ------ Minibuffer -------
     へんかんちゅう 変換▼中
     ------ Minibuffer -------

ここで RET をタイプすれば `変換中' が個人辞書に登録され、辞書登録モード
は終了する (1) 。同時に変換を行なっているカレントバッファには、`変換中' 
が挿入され確定される。*Note 個人辞書: 辞書の形式.

送り仮名のある単語の登録では、ミニバッファで作る候補に送り仮名そのものを
登録しないように注意しなければならない。仮に辞書に

     うごk /動/

というエントリがないとして、例を一つ述べる。

     U g o K u 

     ------ Buffer: foo ------
     うごく
     ------ Buffer: foo ------

     ------ Minibuffer -------
     うご*く-!-
     ------ Minibuffer -------

ミニバッファで辞書登録すべき文字列は、`動'のみであり、送り仮名の`く'は含
めない。`動く'を登録してしまうと、次に `U g o K u' とタイプしたときに出
力される候補が`動くく'になってしまう。

     D o u SPC

     ------ Minibuffer -------
     うご*く 動-!-
     ------ Minibuffer -------

     RET

     ------ Buffer: foo ------
     動く
     ------ Buffer: foo ------

サ変動詞(名詞の後に`する'を付けた形で構成される動詞) については、`する'
を送り仮名とした送りあり変換 (2) を行なわず、`運動'と`する'と分けて入力
した方が効率が良い (3) 。例えば`運動する'は `U n d o u SPC s u r u' とタ
イプすることにより得られる。名詞から作られる形容詞等も同様である。

誤まって辞書登録モードに入ったときは `C-g' をタイプするか、もしくは何も
登録せず RET をタイプすると▽モードに戻る。

ミニバッファを再帰的に使い辞書登録を再帰的に行なうことができる。仮に辞書
に

     さいきてき /再帰的/
     さいき /再帰/

のようなエントリがなく、かつ

     さい /再/
     き /帰/
     てき /的/

のようなエントリがあるとする。ここで `S a i k i t e k i SPC' とタイプす
ると、文字列`さいきてき'に対する候補を見つけられないので、ミニバッファに
`さいきてき'というプロンプトを表示して辞書登録モードに入る。

`さいきてき'に対する辞書エントリを作るため `S a i k i SPC' とタイプする
と、更にこの候補も見つけられないので、ミニバッファに`さいき'というプロン
プトを表示して、再帰的に`さいき'の辞書登録モードに入る。`S a i SPC K i
SPC' とタイプすると、ミニバッファは、

     ------ Minibuffer -------
     さいき 再▼帰
     ------ Minibuffer -------

となる。ここで RET をタイプすると、個人辞書には

     さいき /再帰/

というエントリが登録され、ミニバッファは`さいきてき'の辞書登録モードに戻
り、プロンプトは`さいきてき'となる。今度は`再帰'が変換可能なので `S a i
k i SPC T e k i SPC' とタイプすると、

     ------ Minibuffer -------
     さいきてき 再帰▼的
     ------ Minibuffer -------

となる。ここで RET をタイプすることで、`さいきてき'の辞書登録モードから
抜け、個人辞書に

     さいきてき /再帰的/

というエントリが登録される。カレントバッファのポイントには、`再帰的'が挿
入される。

改行文字を含む文字列を辞書に登録するには、辞書登録モードで改行文字を 
`C-q C-j' により入力する。例えば、

     〒980
     仙台市青葉区片平2-1-1
     東北大学電気通信研究所

を辞書に登録するには、辞書登録モードで、

     `〒980',
     C-q C-j,
     `仙台市青葉区片平2-1-1',
     C-q C-j,
     `東北大学電気通信研究所',
     RET

と入力する。

--------- Footnotes ---------

(1)  ここでも暗黙の確定が行なわれるので`C-j' をタイプする必要はない。但し、*Note ▼モードでのRET:: を参照のこと。

(2) 送り仮名を伴なう変換。詳細は、*Note 送りあり変換: 辞書の形式 を参照
     のこと。

(3) 名詞とそのサ変動詞とを別々に辞書に持ったのでは空間的な効率が悪いので、
基本的に、辞書がサ変動詞を送りありとして意識した作りとしていない。従い、
`する'を送り仮名とした送りあり変換では、辞書に候補がなく辞書登録モ
ードに入ってしまう可能性が大きいので、名詞として分解して入力することを勧
めている。一方、このように名詞に分解して入力することで、サ変動詞になり得
ない名詞が候補として出てくることもあり(例えば`孝行する' という変換
を行ないたい場合に`高校'が出てくるなど)、候補の絞り込みという点では
必ずしも効率が良くないので、将来のバージョンにおいて改善する方向で検討を
進めている。詳細は、*Note 拡張アイディア:: を参照のこと。



File: skk.info, Node: インクリメンタル・サーチ, Prev: モード, Up: 基本的な使用方法

インクリメンタル・サーチ
========================

SKKでは、専用のインクリメンタル・サーチプログラムをEmacs添付のisearch.el
のラッパーとして実装しており、日本語の文字列についてのインクリメンタル・
サーチ(通常の文字列も正規表現を用いたものも両方)をアスキー文字と同様の操
作で行なうことができる。しかも大部分の動作は、オリジナルのインクリメンタ
ル・サーチのもののままである。従ってオリジナルのインクリメンタル・サーチ
のコマンド(`M-y' の `isearch-yank-kill' や `M-p' の 
`isearch-ring-retreat', `M-n' の `isearch-ring-advance' など)やユーザー
変数でのカスタマイズ(`search-highlight' など)もそのまま利用できる。オリ
ジナルのインクリメンタル・サーチについては、*Note Incremental Search:
(emacs)Incremental Search を参照のこと。

インクリメンタル・サーチ中の入力方法は、通常のバッファにおける各入力モー
ド、変換モードでの入力方法と同一である。

`C-s' や `C-r'、あるいは `M-C-s' や `M-C-r' でインクリメンタル・サーチを
起動すると、インクリメンタル・サーチを起動したバッファの入力モードと同一
の入力モードで、キーとなる文字の入力が可能となる。入力モードに合わせて、
インクリメンタル・サーチのプロンプトが表示される。プロンプトの種類は、以
下の5つである。


I-search: [aa]
     アスキーモード

I-search: [か]
     かなモード

I-search: [カ]
     カナモード

I-search: [英]
     全英モード

I-search: [--]
     インクリメンタル・サーチモードで `C-x C-j' などをタイプしてSKKを終
     了した場合は、このプロンプトが表示される。




File: skk.info, Node: 便利な応用機能とユーザーオプション, Next: 辞書ユーティリティプログラム, Prev: 基本的な使用方法, Up: Top

便利な応用機能とユーザーオプション
**********************************

* Menu:

* 予備知識::                    応用機能を使いこなすために。
* 入力モードの一時変更::        使用頻度の高くない入力モードを少しの間だけ利用する。
* ■モードにおける文字入力::    かな/カナ/全英モードにおける文字入力の設定とカスタマイズ。
* ポイントを戻して▽モードへ::  ▽マークを付け忘れたときに。
* 確定変換とそのアンドゥ::      ユーザー側で確定することなしに確定させる変換方法とそのアンドゥ。
* 確定アンドゥ::                候補の選択ミスをアンドゥ。
* 見出し語関連::                変換のキーとなる語の処理について。
* 送り仮名関連::                送り仮名の処理について。
* 自動変換開始::                SPCを押さずに変換開始。
* 特殊変換::                    ちょっと変った便利な変換方法。
* 接頭辞・接尾辞::              接頭辞・接尾辞を指定して候補の絞り込み。
* 暗黙の確定のタイミング::      変換後の次入力ですぐに確定するかしばらく放っておくか。
* リージョン一括変換::          スパッとリージョン一括変換。
* 漢字コード関連::              漢字コードにまつわる機能。
* ▼モードの特殊キー::          キーの動作、あるいはキーバインド変更。
* 辞書関連::                    辞書にまつわる機能。
* デコレーション::              様々な表示の設定と変更。
* VIPとの併用::                 VIエミュレーションパッケージとの併用。
* I-search関連::                インクリメンタル・サーチにまつわる機能。
* skk-init-fileのバイトコンパイル::  イニシャルファイルの自動バイトコンパイル。
* picture-modeとの併用::        picture-modeとの併用の際の問題点。
* サーバー関連::                



File: skk.info, Node: 予備知識, Next: 入力モードの一時変更, Prev: 便利な応用機能とユーザーオプション, Up: 便利な応用機能とユーザーオプション

予備知識
========

以下のセクションで応用機能とユーザーオプションについて述べるが、その前に 
SKKのファイル構成やユーザーオプションの設定についての一般的注意を述べる。
また、辞書の形式や設定方法についても詳述しておく。辞書の形式や設定方法を
理解することで、様々な応用機能がどう動くのかを理解する助けとなる。

* Menu:

* ファイル構成::                
* ユーザーオプションの設定方法::  
* 辞書の形式::                  辞書の形式と構成。
* 辞書に関する設定::            検索対象と検索順序の設定。



File: skk.info, Node: ファイル構成, Next: ユーザーオプションの設定方法, Prev: 予備知識, Up: 予備知識

ファイル構成
------------

SKKバージョン9.6では、応用機能を提供するプログラムのほとんどを `skk.el' 
とは別のファイルに収め、必要に応じ、オートロードするように設計されている。
各応用機能の概略と該当のファイル名について説明する。


`skk-auto.el'
     送り仮名の自動処理を行なうプログラムを集めたファイル。*Note 送り仮
     名の自動処理::.

`skk-comp.el'
     見出し語の補完を行なうプログラムを集めたファイル。*Note 見出し語の
     補完::.

`skk-e18.el'
     Emacs 18専用プログラムを集めたファイル。

`skk-e19.el'
     Emacs 19専用プログラムを集めたファイル。

`skk-gadget.el'
     プログラム実行変換を行なうプログラムを集めたファイル。*Note プログ
     ラム実行変換::.

`skk-kakasi.el'
     KAKASIインターフェイスプログラムを集めたファイル。*Note リージョン
     一括変換::.  *Note KAKASI::.

`skk-kcode.el'
     漢字コードまたはメニューによる文字入力を行なうプログラムを集めたファ
     イル。*Note 漢字コードまたはメニューによる文字入力::.

`skk-num.el'
     数値変換を行なうプログラムを集めたファイル。*Note 数値変換::.

`skk-server.el'
     SKKサーバーインターフェイスプログラムを集めたファイル。*Note サーバ
     ー関連::.

`skk-tree.el'
     有限状態オートマトンを用いた変換を行なうプログラムを集めたファイル。
     *Note 有限状態オートマトンを用いた変換::.

`skk-vip.el'
     VIPインターフェイスプログラムを集めたファイル。*Note VIPとの併用::.


なお、Elibより `avltree.el'、`elib-node.el'、`queue-m.el'、`stack-m.el'、
`string.el' の各ファイルをピックアップしている。その内、`avltree.el' は、
オリジナルのバグと思われる個所を修正してある。また、`string.el' は、スピ
ードアップを図って少し手を入れている。いずれもオリジナルの動作とは何ら違
わないので、SKK配布のものを使用せずに既に持っているElibを使用しても問題
はない。



File: skk.info, Node: ユーザーオプションの設定方法, Next: 辞書の形式, Prev: ファイル構成, Up: 予備知識

ユーザーオプションの設定方法
----------------------------

以前のバージョンのSKKでは、どのようなカスタマイズが行なわれている場合で
もチュートリアル使用時に標準設定に戻す目的で変数の宣言に `defconst' を使
用していた関係からSKKに関する全ての設定は `~/.skk' で行なう必要があった
が、バージョン9より `defvar' を使用した宣言を行なうようにしているので、
他のEmacs Lispパッケージ同様 `~/.emacs' で設定を行なうことができるように
なった。また、従来通り `~/.skk' が使える他、各種フックを利用することもで
きる。上記のファイルやフックを利用した設定がいつ有効になるのか、という点
について下記に述べる。


`.emacs'
     Emacsを起動したときに一度だけ評価される。バッファに関係しないグロー
     バル変数の設定やフックの設定などを行なう場合が多い。OSがMSDOSの場合
     は `_emacs' である。*Note .emacs: (emacs)Init File.

`.skk'
     SKKを起動したときに一度だけロードされる。バッファに関係しないグロー
     バル変数の設定などを行なう場合が多い。OSがMSDOSの場合は `_skk' とい
     うファイル名がディフォルトである。`~/.skk' のファイル名は 
     `skk-init-file' で変更することができる。また、このファイルを自動的
     にバイトコンパイルする機能がインプリメントされている。詳細は、*Note
     skk-init-fileのバイトコンパイル:: を参照のこと。

`skk-mode-hook'
     `C-x C-j' とタイプしてSKKモードを起動するたびにコールされる。バッファ
     ローカルの設定などを行なう場合が多い。

`skk-auto-fill-mode-hook'
     `C-x j' とタイプしてSKKモードをオートフィルモード付きで起動するたび
     にコールされる。バッファローカルの設定などを行なう場合が多い。

`skk-load-hook'
     `skk.el' のロードを完了した時点でコールされる。`.skk' はSKKモードを
     起動しなければロードされないのに対し、このフックは、`skk.el' をロー
     ドしたらSKKモードを起動しなくともコールされる点が違う。

`skk-auto-load-hook'
`skk-comp-load-hook'
`skk-e18-load-hook'
`skk-e19-load-hook'
`skk-gadget-load-hook'
`skk-kakasi-load-hook'
`skk-kcode-load-hook'
`skk-num-load-hook'
`skk-server-load-hook'
`skk-tree-load-hook'
`skk-vip-load-hook'
     `skk-auto.el', `skk-comp.el', `skk-e18.el', `skk-e19.el',
     `skk-gadget.el', `skk-kakasi.el', `skk-kcode.el', `skk-num.el',
     `skk-server.el', `skk-tree.el', `skk-vip.el' の各ファイルがロードを
     完了した直後にコールされるフック。

skk-vip-mode-hook
     VIPを併用している場合で、`skk-mode' を起動したときにコールされるフッ
     ク。*Note VIPとの併用::.


メニューバー (1) が使用できる環境では、SKKモード起動時にメニューバーを使
って、オン/オフトグルに設定できるユーザーオプションの設定が変更できる 
(2) 。ここで変更した設定はEmacs終了時に保存するかどうかを確認され、保存
を選択した場合は、その設定が `.skk' に保存される。`.emacs' より後に 
`.skk' がロードされるので、メニューバーよりユーザーオプションの設定の変
更が行なわれた場合は、`.skk' にその設定が保存される。


--------- Footnotes ---------

(1)  *Note メニューバー: (emacs)Menu Bars.

(2) 例えば `skk-roma-kana-a' など、オン/オフの設定ではなく複雑なリ
ストを指定しなければならないユーザーオプションについては、メニューバーか
らは設定できない。これらの簡便な設定ユーザーインターフェイスについては、
将来のバージョンにて検討する。*Note 拡張アイディア::.



File: skk.info, Node: 辞書の形式, Next: 辞書に関する設定, Prev: ユーザーオプションの設定方法, Up: 予備知識

辞書の形式
----------

辞書の種別は大きく分けて「共有辞書」と「個人辞書」の2つがある。


共有辞書
     付属の `SKK-JISYO.S'(「S辞書」), `SKK-JISYO.M'(「M辞書」),
     `SKK-JISYO.L'(「L辞書」) などがあり、通常は個人辞書よりもサイズが大
     きく、省資源の面からユーザー間で共有され、参照のみされる辞書で、使
     用中にSKKにより内容の変更が行なわれることはない。

個人辞書
     変数 `skk-jisyo' で指定されるファイルであり、SKKを一番最初に使い始
     めたときにホームディレクトリに自動的に作られ、その後の使用により日々
     刻々と更新されてゆく辞書である。


他には `skk-initial-search-jisyo' や `skk-kakutei-jisyo' などがあるが、
これらは個人毎に持つものを使用しても良いし、ユーザー間で共有しているもの
を使用しても良く、共有辞書、個人辞書という区分にはいずれにも属さない。そ
の性格から、辞書内容の更新は行なわれず、参照のみ行なわれる。また使用目的
から通常はサイズが小さい。

個人辞書、`skk-initial-search-jisyo', `skk-kakutei-jisyo' はEmacsのバッ
ファに読み込んで検索を行なう。共有辞書は設定によりEmacsのバッファに読み
込んで使用する方法と、サーバー経由で使用する方法とがある。

個人辞書の一例を挙げる。

     ;; okuri-ari entries.
     たとe /例/[え/例/]/
     もt /持/[つ/持/]/[って/持/]/[た/持/]/[て/持/]/[ち/持/]/[と/持/]/
     たすk /助/[け/助/]/
     うごk /動/[く/動/]/[か/動/]/[け/動/]/[き/動/]/[こ/動/]/
     ふくm /含/[め/含/]/[む/含/]/[ま/含/]/[み/含/]/[も/含/]/
     ...
     ;; okuri-nasi entries.
     てん /点/・/天/
     ひつよう /必要/
     さくじょ /削除/
     へんこう /変更/
     じゅんじょ /順序/
     ぐん /群/郡/
     こうほ /候補/
     いち /位置/一/壱/
     ...

`てん /点/・/天/' を例に取ると、`てん'が見出し語であり、その候補が、`点'、
`・'、`天'である。候補はそれぞれ、`/'によって区切られている。見出し語と
候補群を合わせた `てん /点/・/天/' の一行を「エントリ」と呼ぶ。

辞書はプレーンなテキストファイルで、最低限下記の2つの行を持つ。

     ;; okuri-ari entries.
     ;; okuri-nasi entries.

この2つの行は、それぞれ送り仮名あり、送り仮名なしのエントリの開始地点を
示すマークである。`;; okuri-ari entries.' までの行で `;' を行頭に持つ行
はコメント行として無視される。`;; okuri-ari entries.'  以降にコメント行
を含むことはできないので、注意すること。

`;; okuri-ari entries.' と `;; okuri-nasi entries.' の
間に囲まれた上半分の部分が送り仮名ありのエントリである。これを「送り
ありエントリ」と呼ぶ。`;; okuri-nasi entries.' 以下の下半分部
分が送り仮名なしのエントリである。これを「送りなしエントリ」と呼ぶ。
また送りありエントリを検索する変換を「送りあり変換」、送りなしエント
リを検索する変換を「送りなし変換」と呼ぶ。SKKでは送り仮名の有無が変
換方法の1つの種別となっているので、基本的には、送り仮名がある変換では送
りありエントリのみが検索され、送り仮名がない変換では送りなしエントリのみ
が検索される。

1つの見出し語についてのエントリは1行内に書かれる(2行以上にまたがることは
できない)。改行を含む候補については、`(concat "改\n行")' のように、評価
すると改行を該当個所に挿入するようなLispプログラム(*Note プログラム実行
変換::)に候補を変換して辞書に収めている。行頭から空白までの文字列が見出
し語である。空白以降`/' と `/' とに囲まれた文字列がそれぞれの候補である。
例えば、

     じしょ /辞書/自署/

は、見出し語`じしょ'についてのエントリで、その候補は、`辞書'と`自署'の2
つである。

送りありエントリは、基本的には`もt /持/'のようになっており、送り仮名部分
は、送り仮名をローマ字表現したときの1文字目(あるかな文字をローマ字表現し
たときの1文字目を「ローマ字プレフィックス」と呼ぶ。)で表現されている。こ
の1エントリで `持た'、`持ち'、`持つ'、`持て'、`持と'の5つの候補に対応し
ている。その5つの候補の送り仮名をローマ字プレフィックスで表現すれば、い
ずれも `t' になる。

さて、個人辞書の送りありエントリには `[' と `]' に囲まれたブロックがある
が、これは、そのブロックの先頭にある平仮名を送り仮名に取る候補群である。
上記の例で見ると、見出し語`たとe'の場合は`え'を送り仮名とする1つのブロッ
クから構成されており、見出し語`ふくm'の場合は、`ま'、`み'、`む'、`め'、
`も'を送り仮名とする5ブロックに分けられている。

この送り仮名毎のブロック部分は、`skk-henkan-okuri-strictly' あるい
は 
 `skk-auto-okuri-process' のいずれかの変数が `non-nil' で
ある場合に、検索の際、見出し語としてはマッチしても、更に送り仮名もマッチ
するのかどうかをテストするために使用される。例えば、

     おおk /大/多/[く/多/]/[き/大/]/

というエントリがあれば、同じ見出し語`おおk'であっても送り仮名が`き'であ
れば、候補は`大'のみであって`多'は無視される。*Note
skk-henkan-okuri-strictly: 送り仮名の自動処理.  *Note
skk-auto-okuri-process: 送り仮名の厳密なマッチ.

現在のところ、付属の共有辞書では、`[' と `]' を使用した送り仮名毎のブロッ
クの形式に対応していない。個人辞書のみがこの形式で書き込まれてゆく。
`skk-henkan-okuri-strictly' が `nil' であっても送り仮名のブロック形式で
書き込まれる。但し `skk-process-okuri-early' の値が `non-nil' であれば、
送り仮名を決定する前に変換を開始することになるので、送り仮名を明示的に入
力していても個人辞書には `[' と `]' に囲まれた送り仮名毎のブロックは作ら
れないので注意すること (1) (2) 。*Note skk-process-okuri-early: 送りあり
変換の変換開始のタイミン グ.

共有辞書では、送りありエントリは `;; okuri-ari entries.' から順に下方向
に、見出し語をキーとして降順に配置されている。送りなしエントリは、 `;;
okuri-nasi entries.' から順に下方向に、見出し語をキーとして昇順に配置さ
れている。降順、昇順に配置されているのは、辞書サイズが大きいことに配慮し
てバイナリサーチを行なうためである。なお、ソートする際には、見出し語を
unsigned-charと見なしている。この順序はEmacsが `string<' で文字列を比較
するときの順序であり、UNIXの `sort' コマンドでの標準の順序とは異なるので
注意が必要である。Emacsのコマンド `sort-lines' を用いればファイルをこの
順序でソートすることができる (3) 。

一方、個人辞書は上の例でも見たように、それぞれ`;; okuri-ari entries.',
`;; okuri-nasi entries.' を基点として、一番最後に変換を行なったものがそ
れぞれのミニマムポイント (4) に挿入され辞書が更新される。個人辞書は通常
は共有辞書程はサイズが大きくないので、検索時にはそれぞれの基点からリニア
サーチが行なわれる。個人辞書で見つけられなかった候補については共有辞書か
ら検索され、そこで見つかり確定された場合はその候補が個人辞書に取り込まれ、
次に同じ見出し語の検索を行なった場合に同候補を最初に出力すべく、それぞれ
のミニマムポイントに挿入される。

--------- Footnotes ---------

(1)  変換開始の直前に内部変数に送り仮名を保存するのだが、送り仮名の確定前に変換を開始するので、個人辞書も送り仮名対応ブロックが作られない。ただ、確定時点では送り仮名が分っているので、確定時点で送り仮名を検索し直し、個人辞書に送り仮名対応ブロックを作ることは可能だが、`skk-process-okuri-early' を利用するユーザーにとっては、それは無駄なことなのであろう。

(2) SKKバージョン8では、送り仮名毎のブロックが個人辞書内に既に作られてい
     ても 
 `skk-process-okuri-early' を `non-nil' にして確定
     すると、該当する送りありエントリの送り仮名ブロックの部分が削除され
     ていたが、バージョン9より、既に存在する送り仮名ブロックを保存される
     ように改良した。`skk-process-okuri-early' を常に 
     `non-nil' で使用するユーザーにとってはあまり有り難い話ではない
     のかもしれないが、色々なユーザーオプションを試してみようとするユー
     ザーにとっては、`skk-process-okuri-early' を一時期 
     `non-nil' にしたばっかりに個人辞書の送り仮名情報がことごとく破
     壊されるのは酷であろう。ちなみにここで言う「送り仮名ブロックの保存」
     にかかるコストは大したことはない。

(3) Emacsコマンドの `sort-columns' は内部的にUNIXコマンドの 
     `sort' を使っているので、辞書のソートには使わないこと。

(4) 正確に言えば、送りあり変換では `skk-okuri-ari-min' + 1 の位
     置、送りなし変換では 
 `skk-okuri-nasi-min' + 1 の位置で
     ある。



File: skk.info, Node: 辞書に関する設定, Prev: 辞書の形式, Up: 予備知識

辞書に関する設定
----------------

`skk-search-prog-list' の各要素に辞書検索プログラム名、辞書名、引数をセッ
トにしたリストを埋め込むことにより、辞書ファイルの指定、検索方法、検索さ
れる辞書の順序などを指定することができる。`skk-search-prog-list' の具体
例を示しながら更に詳しく説明する。

     '((skk-search-kakutei-jisyo-file skk-kakutei-jisyo 10000 t)
       (skk-search-jisyo-file skk-initial-search-jisyo 10000 t)
       (skk-search-jisyo-file skk-jisyo 0 t)
       (skk-okuri-search)
       (skk-search-jisyo-file skk-large-jisyo 10000)
       (skk-search-server skk-aux-large-jisyo 10000) )

関数、`skk-search-kakutei-jisyo-file',
`skk-search-jisyo-file', `skk-okuri-search', 
`skk-search-server' は辞書検索プログラムである。


`skk-search-kakutei-jisyo-file'
     「確定変換」を行なう検索プログラム。第1引数は検索対象辞書。第2引数
     はリージョンの大きさを指定する。一つの見出し語に対する変換動作に対
     し、検索対象のリージョンの大きさが第2引数に指定されたサイズより小さ
     くなるまではバイナリサーチが行なわれ、最後にリニアサーチが1回行なわ
     れる。第2引数に0を指定すると常にリニアサーチのみが行なわれる。第3引
     数は辞書をバッファに読み込むときにミニバッファに読み込んでいる旨の
     メッセージを出力するかどうかを指定する。検索対象の辞書ファイルは
     Emacsのバッファに読み込む。検索対象のファイルから候補を見つけると、
     内部変数 `skk-kakutei-flag' を立てて、いきなり確定する(ユーザーが確
     定する必要はない)。

`skk-search-jisyo-file'
     通常の検索を行なうプログラム。個人辞書の検索や、共有辞書でサーバー
     を使わない検索を行なう場合はこのプログラムを使用する。第1引数、第2
     引数、第3引数はそれぞれ `skk-search-kakutei-jisyo-file' のそれと同
     じ。辞書ファイルはEmacsのバッファに読み込む。

`skk-okuri-search'
     自動送り処理を行なうプログラム。引数はない。個人辞書の送りありエン
     トリを検索対象としているので、個人辞書のバッファを流用し、専用の辞
     書バッファは作らない。`skk-auto-okuri-process' の値が `nil' であれ
     ば、`skk-search-prog-list' に `(skk-okuri-search)' が含まれていても
     単に無視され、スキップされるので、`skk-okuri-search' を動かしたいと
     きは必ず `skk-auto-okuri-process' の値を `non-nil' に設定する。

`skk-search-server'
     サーバー経由で検索するプログラム。第1引数、第2引数、第3引数はそれぞ
     れ `skk-search-kakutei-jisyo-file' のそれと同じ。サーバーが使用不能
     になると辞書ファイルをEmacsのバッファに読み込んで検索を行なう。第2
     引数及び第3引数は、辞書ファイルをEmacsのバッファに読み込んだときの
     み利用される。


変数、`skk-kakutei-jisyo', `skk-initial-search-jisyo', `skk-jisyo',
`skk-large-jisyo', `skk-aux-large-jisyo' は辞書ファイルである。


`skk-kakutei-jisyo'
     確定変換用 (1) の辞書。候補は1つのみ許される(複数の候補を書いても良
     いが無視される)。見出し語の配置は、サイズが大きければ共有辞書と同じ
     配置 (2) にしてバイナリサーチを行ない、サイズが小さければ適当な配置
     でリニアサーチを行なうのが良い。この辞書は、標準の配布パッケージに
     は含まれていないので、使用するのであればユーザー側で用意する必要が
     ある。

`skk-initial-search-jisyo'
     `skk-jisyo' の前に検索を行なう辞書。`skk-jisyo' の前に検索が行なわ
     れるので `skk-jisyo' にカバーを掛け、最初に出てくる候補を操作するこ
     とができるので、例えば、複数の専門用語毎の辞書を用意しておいて 
     `skk-initial-search-jisyo' の値を切り替えることにより、専門分野毎の
     専門用語を切り替えて入力することができて便利かもしれない。見出し語
     の配置は、サイズが大きければ共有辞書と同じ配置にしてバイナリサーチ
     を行ない、サイズが小さければ適当な配置 (3) でリニアサーチを行なうの
     が良い。この辞書は、標準の配布パッケージには含まれていないので、使
     用するのであればユーザー側で用意する必要がある。

`skk-jisyo'
     個人辞書。SKKを一番最初に起動したときにファイルがなければ自動的に作
     られる。個人辞書より先に検索するのは、確定辞書と
     `skk-initial-search-jisyo' のみの設定とすべき。個人辞書の見出し語は、
     常に一番最近に変換された語がミニマムポイントに挿入され、その配置は
     ランダムなものになるので、バイナリサーチを行なってはならない。

`skk-large-jisyo'
     共有辞書。ユーザーの用途と資源に合わせて、S辞書、M辞書、L辞書の中か
     ら選ぶ。`skk-search-jisyo-file' と対にすることを想定した辞書ファイ
     ル。

`skk-aux-large-jisyo'
     共有辞書。ユーザーの用途と資源に合わせて、S辞書、M辞書、L辞書の中か
     ら選ぶ。`skk-search-server' と対にして使用することを想定した辞書ファ
     イル。


また、`skk-search-prog-list' には含まれないが(勿論検索されない)、個人辞
書のバックアップ辞書として `skk-backup-jisyo' がある。

上記の例では、
  1. `skk-kakutei-jisyo', `skk-initial-search-jisyo', `skk-jisyo' の順に
     検索を行ない、

  2. 次に個人辞書を使って送り仮名の自動処理を行ない、

  3. その後、`skk-large-jisyo' の検索を行ない、

  4. 最後に `skk-aux-large-jisyo' にサーバー経由でアクセスしている。

もし確定辞書で候補が見つかったらそのまま自動的に確定される。1回 SPC を押
す動作に対し、プログラム側では新たな候補を見つけるまで上記の動作を進める。
例えば、

  1. 確定辞書では候補は見つけられなかったが `skk-initial-search-jisyo' 
     に候補があれば、そこで一旦止まりユーザーにその候補を表示する。

  2. 更に SPC が押されると、次は個人辞書を検索する。そこで候補が見つかり、
     しかもその候補が `skk-initial-search-jisyo' で見つけた候補とは異る
     ものであったときは、そこでまた一旦止まりその候補をユーザーに表示す
     る。以降、共有辞書についても同様の繰り返しを行なう。

`skk-search-prog-list' の設定方法としては、例えば `skk-large-jisyo' にS
辞書かM辞書を指定し、S辞書、M辞書はEmacsのバッファに読み込んで検索し 
`skk-aux-large-jisyo' に L辞書を指定して、L辞書にはサーバー経由でアクセ
スする、という選択肢もある。

また、サーバー経由のアクセスも決して遅くはないので (4) 、

     (skk-search-jisyo-file skk-large-jisyo 10000)

を削除するという選択肢もある。ちなみに辞書ファイルの値が `nil' であれば、
そのファイルを引数とした検索プログラムが`skk-search-prog-list' に指定さ
れていても、その検索は行なわれない。

`skk-auto.el' をロードすると、

     (skk-okuri-search)

というリストが `skk-search-prog-list' に自動的に追加される
(`skk-auto-okuri-process' を `non-nil' に設定すると `skk-auto.el' がオー
トロードされる。)。追加される位置は、`skk-jisyo' を検索するリストの次で
ある。あるいは

     (skk-okuri-search)

というリストを `skk-search-prog-list' の任意の位置に明示的に指定すると、
`skk-okuri-search' を使って最初に検索したときに `skk-auto.el' がオートロ
ードされる。

`skk-server.el' をロードすると、

     (skk-search-server skk-aux-large-jisyo 10000)

というリストが `skk-search-prog-list' に自動的に追加されるあるいは 
`skk-server-host' もしくは `skk-servers-list' を設定するとSKKモードを起
動したときに `skk-server.el' がオートロードされる。これらの場合、追加さ
れる位置は、`skk-search-prog-list' の末尾である。あるいは

     (skk-search-server skk-aux-large-jisyo 10000)

というリストを `skk-search-prog-list' の任意の位置に明示的に指定すると 
`skk-search-server' を使って最初に検索を行なったときに `skk-server.el' 
がオートロードされる。

--------- Footnotes ---------

(1)  *Note 確定変換: 確定変換とそのアンドゥ.

(2) *Note 共有辞書の配置: 辞書の形式.

(3) 使用頻度の高い候補から降順に配置することができればリニアサーチ
     を行なう場合最も効率が良いが、作業は楽ではないだろう。例えば、 
     `skk-initial-search-jisyo' を使って一定時間文章を書いた後 
     `skk-jisyo' に挿入されたエントリの内、
     `skk-initial-search-jisyo' にあるものを `skk-jisyo' 
     に挿入されている順の配置で抜き出して 
     `skk-initial-search-jisyo' の見出し語の配置を変えてゆけば
     不可能ではないが、結構な労力になろう。

(4) Perlベースの `pskkserv' を使用すれば、DBM化された辞書にアクセス
     する時間はかなり高速な部類に入る。*Note pskkserv::.



File: skk.info, Node: 入力モードの一時変更, Next: ■モードにおける文字入力, Prev: 予備知識, Up: 便利な応用機能とユーザーオプション

入力モードの一時変更
====================

日常の入力では、一般的に、かなモードを使用することが圧倒的に多いと考えら
れるが、ひらがなの中にカタカナ、全角アルファベットをちりばめて入力したい、
という要求も多いと考えられる。カタカナの入力にはカナモードを、全角アルファ
ベットの入力には全英モードを用いることは前述の通り (1) であるが、一時的
にカナ文字、全英文字を入力して、また、かなモードに戻ることができる。


また、アスキーファイルを見出し語として使用するために、かなモードから一時
的にアスキー文字を入力する機能が提供されている。▽モードの変種である 
"SKK abbrev mode" がそれである。この機能を使用することにより、`is' =>
`インクリメンタル・サーチ'のような変換を行なうことができる。

* Menu:

* ひらがな/カタカナの一時的入力::  
* 全英文字の一時的入力::        

--------- Footnotes ---------

(1)  *Note カナモード、全英モード: 入力モード.



File: skk.info, Node: ひらがな/カタカナの一時的入力, Next: 全英文字の一時的入力, Prev: 入力モードの一時変更, Up: 入力モードの一時変更

ひらがな/カタカナの一時的入力
-----------------------------

かなモードもしくはカナモードで、`/' キー以外で一旦▽モードにして文字列を
挿入し、その文字列の末尾で `q' をタイプすることで (1) `▽'マークから `q' 
をタイプしたポイントまでの文字列が変換され確定される。変換は、`▽'とポイ
ント間の文字列の種類 (2) をキーとして下記の規則に基づき行なわれる。


   * カタカナはひらがなへ

   * ひらがなはカタカナへ

   * 全英文字はアスキー文字へ

   * アスキー文字は全英文字へ

一例を挙げる。

     K a t a k a n a

     ------ Buffer: foo ------
     ▽かたかな-!-
     ------ Buffer: foo ------

     q

     ------ Buffer: foo ------
     カタカナ-!-
     ------ Buffer: foo ------

このトグル変換を上手く利用することにより、かなモードのまま一時的にカタカ
ナを入力したり、またその逆が可能となるので、一々 `q' キーにより入力モー
ドを2度切り換える必要がなく、ひらがな/カタカナ混じり文を書くときには非常
に便利であろう。

全英文字とアスキー文字のトグルでの変換を行なうことができるので、少し混乱
があるかもしれないが、全英モードやアスキーモードでは `Q' やその他の大文
字により▽モードに入ることができないので、上記のトグル変換は行なうことが
できないので注意すること。かなモード/カナモードにおいて、既に入力された
全英文字、アスキー文字に対して上記の変換を行なうことができるのみである。

なお、上記の変換は、いずれもリージョンに対するコマンドにて行なうこともで
きる。*Note リージョン一括変換::.

--------- Footnotes ---------

(1)  `/' キーでSKK abbrev modeに入ってしまうと `q' キー入力が `q' 文字の入力として扱われてしまう。

(2) 正確に言うと`▽'の次の位置にある文字列をもって文字種の判別を行
なっているので、途中で文字種類の違う文字が混在していても無視される。



File: skk.info, Node: 全英文字の一時的入力, Prev: ひらがな/カタカナの一時的入力, Up: 入力モードの一時変更

全英文字の一時的入力
--------------------

`/'をタイプした後、全角アルファベットとして入力したい文字列を挿入し、そ
の文字列の末尾で `C-q' (1) をタイプすることで、`▽'マークから `C-q' をタ
イプしたポイントまでの文字列が全角アルファベットに変換され確定される。

     / f i l e

     ------ Buffer: foo ------
     ▽file-!-
     ------ Buffer: foo ------

     q

     ------ Buffer: foo ------
     ｆｉｌｅ-!-
     ------ Buffer: foo ------

なお、この変換を行なうために、

     file /ｆｉｌｅ/

のような辞書エントリを持つ必要がない。辞書を参照せず、アスキー文字を1文
字づつ全英文字に変換しているためである。

--------- Footnotes ---------

(1)  SKK abbrev modeに入っている。`C-q' は `skk-abbrev-map' にマッピングされたキーバインドである。*Note アスキー文字を見出し語とした変換::.



