**** 「あり?(Japanese fat ae with mock SKK)」の説明 **** ari version 1.00, Copyright (C) 1991 Yuji Nimura 「あり?」 1.00 版 Apr. 12 1992 著作者 二村 祐地 JUNET: nimura@isl.melco.co.jp Yuji.Nimura@ecs.isl.melco.co.jp 本ドキュメントは日本語入力機能付きエディタ「あり?」についての詳細な解説です。  【使用許諾の範囲】 本プログラムは、Public Domain Softwareである「AE」をベースとしてい ますが、変更部分および機能追加部分は二村祐地が著作権を有しております。 本プログラムは free softwareです。あなたは、Free Software Foundation が公表した GNU General Public License(一般公有使用許諾) version 1 あるいは それ以降の各バージョンの中からいずれかを選択し、そのバージョンが定める条項に 従って本プログラムを再頒布または変更することができます。 本プログラムは有用とは思いますが、頒布にあたっては、市場性及び特定目 的適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細につい ては GNU一般公有使用許諾書をお読みください。 あなたは、本プログラムと一緒に GNU 一般公有使用許諾の写しを受け取って いるはずです。そうでない場合は、Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA へ手紙を書いてください。 本プログラムのBBS等ネットワークコミュニティへの転載も、GNU 一般公 有使用許諾に従って、自由に行うことができます。ただし本プログラムのバージョン アップについてフォローに努めてください。 なお、付録のae_spoiler.cは AE SPOILER版オリジナルソースであり Public Domain Softwareです。よってae_spoiler.cのみを扱う場合は GNU 一般公有使用許諾 に従う必要はありません。ただし本プログラムの頒布の際には本プログラムとともに 写しを渡してください。  【AE・SKKの著作者の表示】 ☆AE (Anthony's Editor あるいは Ant's Editor)について 「あり?」がベースとしているAE (Anthony's Editor あるいは Ant's Editor)は、 1991年のIOCCC(International Obfuscated C Code Cntest)における BEST UTILITYの 優勝作品で、その著者はAnthony Howe氏です。 AEは、(cursesライブラリを使ってはいるものの)正式版はたった28行、 SPOILER版 ですら 360行の大きさしかない『Simple Text Editor』です(そしてもちろんスクリ ーンエディタです)。「あり?」はその SPOILER版ソースをベースとし、エディタと しての機能追加の他、cursesライブラリに代わる画面制御機能と日本語入力機能を付 加しています。 以下、USENETのNewsgroups: comp.editorsに投稿された、AEについての2つの記事の headerを記載しておきます。1つ目がAEの解説と正式版のソースを含み、2つ目が SPOILER版のソースを含む記事です。 -------------------- 1st article -------------------- Newsgroups: comp.editors Subject: Simple Text Editor - AE source Message-ID: <1991Sep19.131435.22434@mks.com> Date: 19 Sep 91 13:14:35 GMT Sender: ant@mks.com (Anthony Howe) Organization: Mortice Kern Systems, Waterloo, Ontario, CANADA -------------------- 2nd article -------------------- Newsgroups: comp.editors Subject: Simple Text Editor - SPOILER Message-ID: <1991Sep19.131627.22522@mks.com> Date: 19 Sep 91 13:16:27 GMT Sender: ant@mks.com (Anthony Howe) Organization: Mortice Kern Systems, Waterloo, Ontario, CANADA ----------------------------------------------------- ☆SKKについて 「あり?」では、日本語入力インタフェースを SKK風にしているほか、仮名漢字変換 の要となる変換辞書はSKKの一部として配布されている辞書ファイルを使用するなど、 SKKの影響を受けています。 SKKは、佐藤 雅彦 氏(東北大学電気通信研究所)らが開発した『 Nemacs のために 高速で効率的な日本語入力環境を提供するシステムで、Gnu General Public License に従ったfree softwareとして配布』(skk4.30/ReadMeより)されているもので、JUNET の Newsgroups:fj.sourcesに投稿されたキットなどから入手が可能です。 「あり?」の利用にあたっては、最低限 SKKに含まれる辞書ファイル(あるいは同じ フォーマットで作られたファイル)を入手する必要があります。また日本語入力操作 は SKKに含まれる SKK.tutを読まれたうえで行われることを推奨します。  【謝辞とお詫び】 素晴らしいsimpleなエディタを公表された Anthony Howe 氏に感謝いたします。氏の AEがなければ「あり?」は存在しませんでした。また氏には、氏の素晴らしくsimple で美しいエディタAEを fatなものへと変えてしまったことについて、お詫びします。 佐藤 雅彦 氏をはじめとする SKKの開発にたずさわった多くの皆様に感謝いたします。 SKKの辞書ファイルと skkservの検索アルゴリズムによって「あり?」は日本語入力 が可能になりました。 AEの存在を教えてくれた飯塚 剛 氏、また、SKK の使い方を教えてくれ「あり?」の 日本語入力操作を評価してくれた黒田 清隆 氏に感謝いたします。 「あり?」のαテストに参加してくださった日経MIX MINIX 会議の下記の方々に感謝 いたします。(敬称略、順不同) k.h@MIX、nemossan@MIX、kazushi@MIX、kneo@MIX、takamiti@MIX、 voit@MIX、jonney@MIX、utah.tsk@MIX、tshibata@MIX *** 目次 *** 1. 概要 1.1 起動方法 1.2 環境変数 1.3 知られている不都合な点、Known bug 2. 編集機能 2.1 カーソルの移動 2.2 文字の入力 2.3 文字の削除 2.4 内部バッファへの文字の複写 2.5 内部バッファに保存された文字の挿入 2.6 その他の機能 2.7 動作指定について 3. 日本語の扱い 3.1 利用する漢字コードの指定の仕方 3.2 半角カナの扱いについて 4. 日本語入力機能 4.1 基本入力モード 4.2 漢字入力と英字変換 4.3 ローマ字仮名変換 4.4 コード入力 4.5 カナ入力 4.6 語句の登録 付録A ローマ字仮名変換表 付録B 仮名漢字変換プログラム skksrchについて B.1 skksrchの概要 B.2 辞書ファイルの指定の仕方 B.3 語句の検索、登録とローカル辞書ファイルの更新 B.4 インデックス付き辞書ファイルについて 付録C ソースの簡単な説明 付録D コンパイルオプションの説明 付録E ariで使う主要な定数定義の説明 付録F トラブルシューティング 付録G 日本語 minix 1.5 for IBM-PC で「あり?」を使う ********* 1. 概要 「あり?」は、AE(Anthony's Editor あるいは Ant's Editor)をベースとして作られ たエディタで、以下の変更を加えています。 (1) 機能追加と Keyバインドの変更 「あり?」では AE の持つ機能のほか、さらにいくつかの機能を追加してい ます。なお、AEの持ついくつの機能については、key バインドを変更してい ます。 (2) 日本語対応 「あり?」はファイル入出力および表示に、JISコード、EUC あるいは SHIFT-JIS コードを使用することができます。 (3) 日本語入力機能 「あり?」は SKK風インターフェィスの日本語入力機能があります。 「あり?」は、現在、以下のOSで動作が確認されています。 MINIX 1.5 for IBM-PC (日本語コンソール版) MINIX 1.5 for NEC PC98 (MIX版) MINIX 1.5 for NEC PC98 (ASCII版) MINIX 1.5 for Mac (日本語コンソール版) MINIX 1.5 for ATARI-ST (日本語コンソール版) SunOS Release 4.0.3 LUNA DT330: UNIOS-B 4.3BSD UNIX: 1.60 #1 LUNA DT88k: 88000/mach-2.5-OS NEWS NWS 800: 4.2-BSD 1.1 起動方法 「あり?」の起動方法は次のとおりです。 $ ari file 1.2 環境変数 「あり?」の動作に影響がある環境変数は次のとおりです。 LINES … 画面の行数を指定 デフォルト値は25で、最大40まで指定可能 COLUMNS … 画面の幅(文字数)を指定 デフォルト値は80で、最大120まで指定可能 ARI_SETUP … 動作指定   (『2.7 動作指定について』参照) ARI_CODEDEF … ファイル入出力および表示の漢字コードを指定   (『3.1 利用する漢字コードの指定の仕方』参照) ARI_KKF … 利用する仮名漢字変換プログラムを指定   (『付録B 仮名漢字変換プログラムについて』参照) LOCAL_SKK_JISYO … 使用するローカル辞書ファイルを指定 (stand aloneタイプあるいは仮名漢字変換プログラム   としてskksrchを用いる場合) SKK_JISYO … 使用する共通辞書ファイルを指定 (stand aloneタイプあるいは仮名漢字変換プログラム   としてskksrchを用いる場合) この他、利用する仮名漢字変換プログラムに依存した環境変数も考慮する必 要があります。 1.3 知られている不都合な点、制限事項、Known bug ・扱える最大のファイルサイズは16383byteまで。 ・内部バッファに保存できる文字は最大1023文字(漢字は1文字)。 ・エラーはほとんどの場合メッセージをださない。 ・NULL文字を入力すると表示がおかしくなる。 (NULL文字から行末まで表示されない) ・カーソルの形状は常に ASCII文字の幅で固定されており、全角文字や制御  文字の上では、カーソルは文字の左半分に位置する。 ・ファイルの先頭あるいは最後でのカーソル移動や文字の入力位置がおかし  くなることがある。 ・(特に)1行の長さが画面の幅を越えた場合、表示が乱れることがある。 ・端末制御コードは固定したものを使っている。 (termcap は見ていない) ・画面内に表示される文字数が多い場合、カーソルの移動等が遅くなる。 ・画面のスクロールはかなり遅い。 ・利用する SKK辞書ファイルは昇順にソートされている必要がある。 ・送り仮名つきの仮名漢字変換はSKKとは若干動作が異なる。 (『4.2 漢字入力と英字変換』参照) ・登録できる語句および読みの長さは画面の幅に影響される。 2. 編集機能 「あり?」がサポートしている機能は次のとおりです。ここで "[n]"は1以上の数値 を示し、省略時の値は1です。なお「あり?」では(AEと同様)改行も1つの文字と して扱います。 2.1 カーソルの移動 [n]h 左へn文字カーソルを移動 [n]j 下へn文字カーソルを移動 [n]k 上へn文字カーソルを移動 [n]l 右へn文字カーソルを移動 [n]w 右へn単語カーソルを移動 [n]b 左へn単語カーソルを移動 ^F 1ページ進む ^B 1ページ戻る 0 行頭へカーソルを移動 ^ (空白を考慮して)行の先頭へカーソルを移動 $ 行末へカーソルを移動 T ファイルの先頭へカーソルを移動 B ファイルの末尾へカーソルを移動 :[n] n行目へカーソルを移動([n]は省略不可) :$ ファイルの末尾へカーソルを移動 2.2 文字の入力 すべての入力は ESCコード (^[) で終了します。入力中には BS(= ^H) による後退に より訂正が可能です。なお多くのコントロールコードは直接入力が可能ですが、 ESC コードなど特別の意味を持つコントロールコードは、『 ASCIIモード』で ^V に続い て入力します。(^Vは次の入力をエスケープする) i カーソルの直前に入力 O カーソルのある行の上に新たな行を入力 o カーソルのある行の下に新たな行を入力 I 行頭に入力 A 行末に入力 2.3 文字の削除 直近に1つのコマンドで、削除された一連の文字は、その内容が内部バッファに保存 されます。 [n]x カーソルのある文字を(n回)削除 [n]dl カーソルのある文字を(n回)削除 [n]X カーソルの左の文字を(n回)削除 [n]dh カーソルの左の文字を(n回)削除 D カーソルから行末まで削除 [n]dd カーソルのある行を(n回)削除 2.4 内部バッファへの文字の複写 [n]Y カーソルのある行(から下n行)を内部バッファへ複写 [n]yy カーソルのある行(から下n行)を内部バッファへ複写 [n]yl カーソルのある文字(から右n文字)を内部バッファへ複写 [n]yh カーソルの左n文字を内部バッファへ複写 2.5 内部バッファに保存された文字の挿入 P カーソルの直前に挿入 p カーソルの直後に挿入 2.6 その他の機能 ^L 画面の再表示 ^G 編集中のファイル名、カーソルのある行番号などを報告 :r file 指定したファイルの読み込み('r'の後には1つのspaceが必要) :w ファイルへの書き込み :w file 指定したファイルへの書き込み('r'の後には1つのspaceが必要) :wq ファイルへの書き込みと編集の終了 :x ファイルへの書き込みと編集の終了 :q 編集の終了(ファイルの内容が変更されている場合、終了できない) :q! 編集の強制終了 :version バージョンの表示 :notice 著作権、無保証、再頒布条件の表示 :toroku 語句の登録(『4.6 語句の登録』参照) :touroku 語句の登録(『4.6 語句の登録』参照) :set param 動作指定('set'の後には1つのspaceが必要) :set 動作指定状況の表示 :set all 動作指定状況の表示('set'の後には1つのspaceが必要) :setup 動作指定状況の表示 ':set param'、':set'、':set all'および':setup'コマンドの詳細については『2.7 動作指定について』を参照ください。 2.7 動作指定について 「あり?」では、その動作を次のパラメータにより指定することができます。 codedef=ENE@J 漢字コードを指定 (『3.1 利用する漢字コードの指定の仕方』参照) tab=8 TAB量を指定 notabexpandを指定している場合は、TAB量は端末の設定と 一致している必要がある notabexpand TABの展開を端末にまかせる tabexpand TABをspaseに展開して端末に送る nobreakfence 文字入力時にBSで入力開始位置を越えて文字を削除できない breakfence 文字入力時にBSで入力開始位置を越えて文字を削除できる noasciiindicate 文字入力時『ASCIIモード』では画面にモード表示をしない asciiindicate 文字入力時『ASCIIモード』で画面にモード表示『【a】』を 表示する これらのパラメータは、環境変数 ARI_SETUPによって起動時に設定が可能なほか、 ':set param'コマンドによっても変更が可能です。現在の動作指定状況は ':setup'コ マンドにより表示させることができます。なお ':set'コマンドあるいは ':set all' コマンドでも同様に現在の動作指定状況を表示します。 環境変数 ARI_SETUPによる動作指定では、その値としてパラメータのみを設定します。 ここでパラメータは '|'または ','をはさんで複数を同時に指定することも可能です。 「あり?」のデフォルト動作指定は以下の設定と同等です。 $ ARI_SETUP='codedef=ENE@J | tab=8 | notabexpand' $ ARI_SETUP="$ARI_SETUP |nobreakfence|noasciiindicate" $ export ARI_SETUP なお環境変数 ARI_CODEDEFによる漢字コード指定は、環境変数 ARI_SETUPによる指定 よりも優先されます。(『3.1 利用する漢字コードの指定の仕方』参照) ':set param'コマンドによる動作指定では、:setとつづく1つの spaceの後に param としてパラメータを指定します。例えばパラメータ asciiindicateを設定するには次 のように実行します。 :set asciiindicate 3. 日本語の扱い 3.1 利用する漢字コードの指定の仕方 「あり?」では漢字コードとして JISコード、 EUCおよび SHIFT-JISコードを扱うこ とができます。 デフォルトではファイル入出力および表示とも EUCですが、使用するコードは動作指 定パラメータ codedefにより、ファイル入出力と表示を別々に指定できます。 動作指定パラメータ codedefは5つの ASCII文字からなる文字列で、1文字目でファ イル入出力コードを、3文字目で表示コードを指定します。 各文字での指定の仕方は次のとおりです。 JISコード 'J' EUC 'E'(あるいは無効な文字) SHIFT-JISコード 'S' 動作指定パラメータ codedefの2文字目は、現在ローマ字仮名変換の動作指定に用い られています(『4.3 ローマ字仮名変換』参照)。またコード指定のための文字 'N' は将来の拡張のためにリザーブされています。 これらの設定状況は ':setup'コマンド(あるいは ':set' または ':set all'コマン ド)のほか '^G'コマンドでも知ることができます。 さらに4文字目および5文字目では、 JISコードでの漢字コードセット選択および ASCIIコードセット選択のためのエスケープシーケンスで用いる文字を指定します。 4文字目は漢字コードセット選択のさいに用いる文字でデフォルト値は'@' 、また5 文字目は ASCIIコードセット選択のさいに用いる文字でデフォルト値は'J' です。 デフォルト値を用いたコードセット選択のためのエスケープシーケンスは、以下のよ うになります。 漢字コードセット選択 ESC $ @ ASCII コードセット選択 ESC ( J 動作指定パラメータ codedefは、環境変数 ARI_SETUPあるいは ':set param'コマンド によって設定することができます。(『2.7 動作指定について』参照) また環境変数 ARI_CODEDEFによっても設定することが可能で、この場合はパラメータ の値となる文字列のみ指定します。環境変数 ARI_CODEDEFによる設定は、環境変数 ARI_SETUPによる設定のあとで行われます。 パラメータを設定する場合は、次の文字も利用することができます。 デフォルト値継承 '-' 直前値継承 '!' なおパラメータを設定する際に、指定した文字列が5文字以下の長さであれば、足り ない部分は直前値を適用します。 例えば、環境変数 ARI_CODEDEFの値が "--S"であれば、ファイル入出力はデフォルト 値を継承し、表示には SHIFT-JISコードを指定し、漢字コードセット選択および ASCIIコードセット選択には、(指定されていれば)環境変数 ARI_SETUPで設定され た直前値を継承することになります。 3.2 半角カナの扱いについて 「あり?」では、いわゆる半角カナをファイル入出力、表示とも扱うことは可能です。 JISコードおよび EUCの場合では、半角カナは制御文字 SO(^N) と SI(^O) ではさむこ で指定します。なおこのときMSBは0として、すなわち7bit単位系として扱います。 4. 日本語入力機能 「あり?」では SKK風の(しかしかなり限定された)インターフェィスで日本語入力 機能を利用することができます。できるかぎり SKKで使用されている用語に準じて説 明することとします。 4.1 基本入力モード 文字の入力ではつぎの基本的な4つのモードがあります。 『ASCIIモード』 ASCII文字の入力  (画面にモード表示はでない) 『かなモード』 ひらがなおよび漢字の入力  (画面左下にモード表示『【あ】』が表示される) 『カナモード』 カタカナおよび漢字の入力  (画面左下にモード表示『【ア】』が表示される) 『全英モード』 全角英文字の入力  (画面左下にモード表示『【A】』が表示される) 動作指定パラメータに'asciiindicate'が設定されている場合には、『ASCIIモード』 時に画面左下にモード表示『【a】』が表示されます。 (『2.7 動作指定について』参照) モードの切り替えは次のとおりです。  '^J' 『ASCIIモード』 から 『かなモード』(あるいは『カナモード』)  'l' 『かなモード』(あるいは『カナモード』) から 『 ASCIIモード』  'q' 『かなモード』 と 『カナモード』 の切り替え  'L' 『かなモード』(あるいは『カナモード』) から 『全英モード』  '^J' 『全英モード』 から 『かなモード』(あるいは『カナモード』) ASCIIモード ^J ↓ ↑ l   かな/カナモード(『かなモード』『カナモード』は'q'で入れ換え) L ↓ ↑ ^J 全英モード 『かなモード』および『カナモード』では、英小文字の入力によりローマ字仮名変換 を行います。  (英大文字を入力すると漢字入力のための『漢字変換モード』に移行する) なお、文字の入力に際し起動時の初期状態は『ASCIIモード』に設定されていますが、 入力毎に再初期化されることはありません。前回入力終了時のモードを継続します。 4.2 漢字入力と英字変換 漢字の入力は、『かなモード』あるいは『カナモード』で、その読みとなるローマ字 の最初の1文字を英大文字で、残りを英小文字で入力することで行います。たとえば "漢字" のためには "Kanji" と入力します。 なお送り仮名がある場合には、漢字部分の最初の1文字と、送り仮名部分の最初の1 文字を英大文字とします。たとえば "動く" は "UgoKu"、 "使った" は "TsukaTta" と入力します。 『かなモード』あるいは『カナモード』で英大文字を入力すると『漢字変換モード』 に移行します。このとき英大文字を入力した位置には'▽'が表示され『漢字変換モー ド』であることを示します。つづいて入力される英小文字によって『漢字変換モード』 でのローマ字仮名変換が行われます。(BS = '^H' による後退での訂正も有効です) なお、『漢字変換モード』でのローマ字仮名変換は常にひらがなで行います。 必要な読みを入力した後 spaceを入力すると、変換候補があれば『漢字選択モード』 に移行します。 (変換候補がなければ、ひらがなのまま『かなモード』または『カナモード』に戻る) 『漢字選択モード』に移行すると、ひらがなの部分が変換候補の漢字と入れ変ると同 時に、'▽'にかえて'▼'が表示されます。 以下 spaceで次候補を、また 'x'で前候補を選択します。候補があるあいだは新しい 候補が入れ変って表示されます。spaceあるいは 'x'以外の入力により『漢字選択モー ド』は終了し変換は確定します。('^J'を除いて入力はテキストに反映される) また次候補あるいは前候補がなくなっても『漢字選択モード』は終了しますが、この 場合は、候補の部分が元のひらがなに戻り、同時に'▼'の表示も'▽'に戻ります。 (『漢字変換モード』に戻る) なお、SKKと異なり「あり?」では送り仮名がある場合でもspaceが入力されるまで 『漢字選択モード』には移行しません。必ず spaceによる候補選択操作が必要です。 『漢字変換モード』または『漢字選択モード』から『かなモード』あるいは『カナモ ード』へ直接もどるためには、'^J'を入力します。記号、数字などを入力しても『か なモード』あるいは『カナモード』に直接もどりますが、この場合、入力はテキスト に反映されます。 英字変換を行う場合は、英大文字で始まるローマ字の代りに '/'とつづく英字を入力 します。変換の仕方は漢字変換と同様で、英字の部分が変換候補と入れ変って表示さ れます。なお英字変換では記号も変換対象とすることが可能です。 「あり?」ではいまのところ変換候補の一覧表示の機能はサポートしていません。 4.3 ローマ字仮名変換 「あり?」のローマ字仮名変換表は付録Aに示します。 仮名の小文字は『xa』→『ぁ』、『xya』→『ゃ』のように『x』を付けることで入力 します。また以下の変換を行います。 『ん』 … 『n'』、 または直後に(『y』 以外の)子音あるいは数字、記号類が   続くときは 『n』だけで入力が可能 さらに環境変数 ARI_CODEDEFの2文字目を 'n'に指定した場合には 『nn』でも入力が可能となる(デフォルトでは不可) 『っ』 … (『n』以外の)子音を続けても入力可能 『ー』 … 『-』で入力 数字、記号の変換は次のとおりです (示されていない記号は変換されず、そのまま入力される) 数字 → 0〜9 , → 、 . → 。 ? → ? ! → ! [ → 「 ] → 」 { → { } → } < → < > → > - → ー (さらに、『z』に続いて記号を入力した場合、以下の変換を行う) < → ≦ > → ≧ [ → 『 ] → 』 - → 〜 / → ・ . → … , → ‥ 4.4 コード入力 「あり?」では、 JISコードあるいは EUCによる漢字の直接コード入力を行うことが できます。 『かなモード』あるいは『カナモード』で '¥'(back slash)を入力すると、画面左下 に『code: 』とコード入力のためのプロンプトが表示されますので、16進の4桁で コードの値を入力します。たとえば『あ』のためには、 JISコードで「2422」あ るいは EUCで「a4a2(A4A2)」と入力します。なお SHIFT-JISコードは使えません。 4.5 カナ入力 「あり?」では、コンパイル時オプションの指定により、ローマ字仮名変換に加えて カナの直接入力も可能にしています。本機能を利用するには、シンボル H_KANA を有 効にして ariを makeする必要があります。 (『付録D コンパイルオプションの説明』参照) カナ入力は、『かなモード』または『カナモード』、『カナ変換モード』のときに、 いわゆる半角カナ(値 0xa0〜0xdf )入力することで行います。半角カナは全角に変 換され(濁点、半濁点の処理もする)、『カナ変換モード』では仮名漢字変換の対象 となります。なお『カナ変換モード』へは『かなモード』または『カナモード』から '^K'を入力して移行します。 カナ入力を使った漢字変換の例は次のとおりです。 なお、初期状態は『かなモード』を想定しています。 入力 表示 ^K ▽ ^Kアイ ▽あい space を入力すると、 ▼愛 と、『漢字選択モード』になります。なお『カナ変換モード』から『かなモード』 または、『カナモード』に直接もどるには、『漢字変換モード』と同様、'^J'ある いは、記号、数字などを入力します('^J'を除いて入力はテキストに反映される)。 半角カナの記号でも同じです。 4.6 語句の登録 新たな語句の登録は':toroku'コマンドで行います。(':touroku'コマンドも同様) なお本機能を利用するには、シンボル UPDATE_DIC を有効にして ariを makeする必 要があります。 (『付録D コンパイルオプションの説明』参照) 登録しようとする語句の先頭にカーソルを移動したのち、 ':toroku'コマンドを実行 すると、画面左下に『登録単語:』と表示されますので、'h'あるいは'l'でカーソル を移動して登録する語句を指定し、その後 CR( = ^M)を入力します。 (選択した範囲は画面左下に表示される) 例えば登録単語として『野良猫』を指定すると、その後画面最下行には次のように表 示されますので、読みを入力します。 【あ】 単語:「野良猫」 よみ: 読みの入力は通常の文字入力と同様に『ASCIIモード』、『かなモード』および『全英 モード』が使えますが、コード入力や漢字変換はできません。またカタカナも使えま せん。CRを入力すると語句の登録は終了します。登録した語句はすぐに仮名漢字変換 で利用でき、また「あり?」終了時にはローカル辞書ファイルに反映、追加されます。 なお送り仮名のある語句を登録する際には、ローマ字で送り仮名の最初の文字までを 読みに含めます。例えば『動く』を登録する場合は、次のようにします。 【あ】 単語:「動」 よみ:うごk 語句の登録に失敗した場合は画面左下に『登録できません』と表示されます。また登 録単語や読みの長さが0であったりESCが入力された場合は、語句の登録は中断、終了 します。 ---- Appendix ---- 付録A ローマ字仮名変換表 a i u e o *** あ い う え お **k か き く け こ **g が ぎ ぐ げ ご **s さ し す せ そ *sh しゃ し しゅ しぇ しょ **z ざ じ ず ぜ ぞ **j じゃ じ じゅ じぇ じょ **t た ち つ て と *ts ・ ・ つ ・ ・ *ch ちゃ ち ちゅ ちぇ ちょ **d だ ぢ づ で ど **n な に ぬ ね の **h は ひ ふ へ ほ **f ふぁ ふぃ ふ ふぇ ふぉ **b ば び ぶ べ ぼ **p ぱ ぴ ぷ ぺ ぽ **m ま み む め も **y や ・ ゆ ・ よ **r ら り る れ ろ **w わ ゐ ・ ゑ を **v ヴァ ヴィ ヴ ヴェ ヴォ *ky きゃ きぃ きゅ きぇ きょ *gy ぎゃ ぎぃ ぎゅ ぎぇ ぎょ *sy しゃ しぃ しゅ しぇ しょ *jy じゃ じぃ じゅ じぇ じょ *zy じゃ じぃ じゅ じぇ じょ *ty ちゃ ちぃ ちゅ ちぇ ちょ *dy ぢゃ ぢぃ ぢゅ ぢぇ ぢょ *ny にゃ にぃ にゅ にぇ にょ *hy ひゃ ひぃ ひゅ ひぇ ひょ *by びゃ びぃ びゅ びぇ びょ *py ぴゃ ぴぃ ぴゅ ぴぇ ぴょ *my みゃ みぃ みゅ みぇ みょ *ry りゃ りぃ りゅ りぇ りょ **x ぁ ぃ ぅ ぇ ぉ *xk ヵ ・ ・ ヶ ・ xts ・ ・ っ ・ ・ *xt ・ ・ っ ・ ・ *xy ゃ ・ ゅ ・ ょ *xw ゎ ・ ・ ・ ・ 付録B 仮名漢字変換プログラムについて 「あり?」は、日本語エディタ機能および日本語入力インタフェース機能を提供する プログラム 『ari』と実際の仮名漢字変換処理を行うプログラムと一対で動作します。 「あり?」の仮名漢字変換は、 『ari』が環境変数 ARI_KKFで指定される仮名漢字変 換プログラムと、その標準入出力を通して一定のプロトコルにより通信することによ り実現していますので、 『ari』が使うプロトコルを理解できればどのような仮名漢 字変換プログラムでも利用できます。しかし、そのようなプログラムは、現在は付属 の 『skksrch』しかありません。 skksrchを利用する場合での、環境変数の設定の仕方は次のとおりです。 ARI_KKF … "skksrch"とする(場合によってはフルPATHで指定) LOCAL_SKK_JISYO … skksrchの使用するローカル辞書ファイルを指定する SKK_JISYO … skksrchの使用する共通辞書ファイルを指定する なお stand aloneタイプの「あり?」は skksrchと同等の仮名漢字変換処理まで含み、 単独での動作が可能です。 (『付録D コンパイルオプションの説明』参照) B.1 skksrchの概要 skksrch は、SKK 付属の skkservと基本的に同じアルゴリムで SKK辞書ファイルを検 索するプログラムですが、利用方法は大きく違っています。 ・標準入出力をつかって通信を行う ・通信プロトコルに互換性がない ・ローカル辞書ファイルと共通辞書ファイルの2種類の辞書ファイルをもつ  ことができる ・普通の SKK辞書ファイルのほか、インデックス付き辞書ファイルを使うこ  とができる 利用する辞書ファイルは昇順にソートされている必要があります。 また普通の SKK辞書ファイルにかえてインデックス付き辞書ファイルを用いることで、 高速に起動することができます。 (『B.4 インデックス付き辞書ファイルについて』参照) B.2 辞書ファイルの指定の仕方 ローカル辞書ファイルのデフォルトPATHは $HOME/.skk-jisyo です。これは環境変数 LOCAL_SKK_JISYO により指定できます。 ローカル辞書ファイルは、必ず必要です。(空でもよい) 一方共通辞書ファイルは環境変数 SKK_JISYOにより指定します。 (共通辞書ファイルは指定しなくてもよい) 辞書ファイルは起動時に引数を用いて指定することも可能です。例えば共通辞書ファ イルとして SKK-JISYOを、またローカル辞書ファイルとして local-skk-jisyoを指定 する場合は、以下のように起動あるいは環境変数 ARI_KKFに指定します。 (詳細は skksrchを引数 -helpとともに起動した際に表示されるメッセージを御覧く  ださい。) skksrch -global SKK-JISYO local-skk-jisyo なお引数による指定は環境変数による指定より優先されます。 skksrch での語句の検索はローカル辞書ファイルと共通辞書ファイルの両方の辞書に 対して行い、ローカル辞書ファイルにある候補が先に変換候補として優先して現れま す。また新たに登録された語句はローカル辞書ファイルに追加、更新されます。 このため、ローカル辞書ファイルにはよく利用する語句や個人で追加する語句のエン トリのみを作成し、 SKK付属の辞書ファイルなど汎用的な大きな辞書ファイルは共通 辞書ファイルに指定されることを勧めます。 B.3 語句の検索、登録とローカル辞書ファイルの更新 skksrch は基本的に辞書ファイルに登録されている順番で検索を行います。 仮名漢字変換で確定した語句は、次の検索では共通辞書ファイルにある候補より優先 して現れます。新たに登録された語句についても同様です。 新たに登録された語句は、まず skksrch内部の作業領域に保持され、その後ローカル 辞書ファイルに追加、更新されます。ローカル辞書ファイルの更新は skksrchとして は明示的に指示されることが必要ですが、「あり?」ではその終了時に自動的に更新 を行います。更新されたローカル辞書ファイルは普通の SKK辞書ファイルのフォー マットで作成されます(インデックス付き辞書ファイルではありません)。 ローカル辞書ファイルを更新すると、元のローカル辞書ファイルは(可能であれば)従 来のファイル名に '‾' を追加した名前で保存されます。 なお語句の登録および検索順変更の機能を利用するためには、シンボル UPDATE_DICを 有効にして、makeする必要があります。 ただし シンボル SMALL_POOLが有効であった場合は、語句の登録はできますが検索順 変更の機能は無効となります。 B.4 インデックス付き辞書ファイルについて インデックス付き辞書ファイルは、SKK辞書ファイルをもとに見出し位置情報をその ファイルの先頭に付加したものです。 skksrchあるいは stand aloneタイプの「あり?」は、見出し位置情報の付いていない 普通の SKK辞書ファイルもインデックス付き辞書ファイルも同様に利用することがで きます。ただし大きな辞書ファイルでは、インデックス付き辞書ファイルを使うこと で、普通の SKK辞書ファイルを利用する場合に比べプログラムを高速に起動すること ができます。 このためサイズの大きい共通辞書ファイルはインデックス付き辞書ファイルに変換し て利用されることを勧めます。 インデックス付き辞書ファイルの作成には skksrchコマンドを使い、元になる SKK辞 書ファイルをskkjisyo、作成するインデックス付き辞書を idxskkjisyo とすると、 $ skksrch -index skkjisyo > idxskkjisyo あるいは、 $ skksrch -index skkjisyo -to idxskkjisyo と実行してください。 見出し位置情報は ASCIIテキストとして付加されていますので、インデックス付き辞 書ファイルは int型変数の大きさや endianの異なるシステム間でも共有することがで きます。 また SKK辞書ファイル同様エディタ等で容易に編集が可能で、ファイルの先頭に付加 された見出し位置情報を削除するだけで、普通の SKK辞書ファイルと同じフォーマッ トになります。 例えば次のようにして、インデックス付き辞書 idxskkjisyo から SKK辞書ファイル skkjisyoに戻すことができます。 $ sed '/^ Start of Index$/,/^ End of Index$/d' idxskkjisyo > skkjisyo インデックス付き辞書ファイルを編集した場合は見出し位置情報が無効になりますの で、かならず編集後のファイルをもとに再度インデックス付き辞書ファイルを生成し 直してください。なお見出し位置情報を削除する必要はありません。 (インデックス付き辞書ファイルを作成する際や、見出し位置情報とファイルの大き  さに不整合がある場合には、見出し位置情報は無視されます。) 付録C ソースの簡単な説明 「あり?」のソースプログラムは、以下のとおりです。 ari, skksrch 共通: config.h … システム非依存のコンパイルオプション指定 ari: lazy.h … ariの共通 headerファイル ae.c … AE SPOILER版をベースとした編集機能関係 lazy.c … 画面制御機能と漢字コード変換 kanakan.c … 文字入力機能、ローマ字仮名変換、仮名漢字変換インターフェィス mnxio.c … 端末制御および入出力機能(MINIX及びその姉妹向け) skksrch: skksrch.c … SKK辞書ファイルを用いた仮名漢字変換機能 ローマ字仮名変換表、記号の変換表、 'z'に続く記号の変換表はそれぞれ kanakan.c 内の kana_tbl、kigo_tbl、zkigo_tblです。特に kigo_tbl、zkigo_tblは入力される 記号と変換結果の対が並んでいるだけですので、その変更、追加は容易です。 なお lkigo_tblは『全英モード』のときに用いる記号の変換表です。 「あり?」で扱うtextの文字は、 ic_t型(lazy.hで定義)で、16bit 符号付き整数 を想定しています。その内部コードは次のとおりです。 ・コントロールコードを含むASCII文字 … 0x0000 〜 0x007e(正値) ・いわゆる半角カナ … 0x00a0 〜 0x00df(正値) ・漢字などいわゆる全角文字 … 0xa1a1 〜 0xfefe(負値) 漢字のコード値は EUCに準拠した値を用いています。またlazy.cの中では埋め草の 無効な文字を表すために0x2020を用いています。 システム依存の高い端末制御および入出力機能は mnxio.cに集約されています。 (mnxio.cは MINIXおよび bsd、sysVなどその姉妹のシステム向けです。) 端末制御および入出力に必要なエントリと機能は次の5つです。 ・char *scrctl_conf = "info"; configration情報(文字列)へのポインタ ・void init_tty() 端末の初期化 (状態の保存と rawモードへの設定) ・void end_tty() 端末状態の復帰 ・void out_tty(s, n) 端末への文字列出力 char *s; 文字列へのポインタ int n; 文字列の長さ ・int getch() 端末からの 1文字入力 ポインタ scrctl_confが指す文字列は、':setup'コマンド実行時に端末制御に関する configration情報として、"screen control: "につづいて表示されます。 付録D コンパイルオプションの説明 config.hで指定するコンパイルオプションは次のとおりです。 H_KANA … ローマ字仮名変換だけでなく、カナ入力を可能とする UPDATE_DIC … 語句の登録と検索順の変更を可能とする SMALL_POOL … UPDATE_DIC指定時での語句の検索順変更機能を無効にする (内部作業領域の効率的利用のため) Makefileで指定するコンパイルオプションは次のとおりです。 ARI … 「あり?」としてコンパイルする際には必ず指定 TERMIO … 端末制御をsystem V向けにする NO_STDLIB_H … stdlib.hがない場合に指定 NO_STRING_H … string.hがない場合に指定(代りにstrings.hを使用) MERGE … stand aloneタイプのariをmakeする場合に指定 SMALL_REG … MINIX for IBM/PCなど data + stack 領域が 64KBに制限さ れている場合に指定 sysV系のシステムでは、シンボル TERMIOを有効にする必要があります。また BSD系 の古いシステムでは、シンボル NO_STRING_Hを有効にする必要があるかもしれません。 シンボル NO_STDLIB_Hの必要性はシステム毎に異なります。 シンボル UPDATE_DICを有効にした場合、config.hで指定する定数定義 FRAME_POOLの 値が 1023以下であれば、シンボル SMALL_POOLは自動的に有効になります。 なお、コンパイルオプションを変更した場合は必ず次のように makeしてください。 $ make clean ; make また、シンボル MERGEを有効した場合は、次のように makeしてください。 $ make clean ; make m_ari この場合、仮名漢字変換処理を含む stand aloneタイプの 「あり?」がファイル名 m_ariとしてmakeされます。 なお MINIX 1.5 for IBM-PC などプログラムのデータ領域の大きさが 64KBに制限され ているシステム向けに stand aloneタイプの「あり?」を makeする場合は、シンボル SMALL_REGを有効にするか、あるいはシンボル UPDATE_DICを無効にしてください。 シンボル MERGE、UPDATE_DICおよび SMALL_REGを同時に有効にした場合、シンボル SMALL_POOLが自動的に有効になるとともに、定数定義 FRAME_POOLの値は 256以下に制 限されます(もし FRAME_POOLの値が 256以上であれば、256に再設定されます)。 stand aloneタイプの 「あり?」は、環境変数 ARI_KKFが無効になるほかは従来の 「あり?」と同様に動作します。 付録E ariで使う主要な定数定義の説明 ariで使う主要な定数定義は次のとおりです。なお括弧内は標準設定値を示します。 config.h: MODE … ファイルをwriteする際に使うcreatモード(0666) BUF … 扱える最大のファイルバイト数(16383) int型整数最大値の1/2までの値をとることが可能 FRAME_POOL … UPDATE_DIC指定時に利用する内部作業領域の大きさ(16000) lazy.h: SYSBUF … 画面最下行に表示するメッセージバッファの文字数(80) ae.c: REGBUF … 内部バッファの文字数(1023) lazy.c: MAX_LINES … 設定できる画面の最大の行数(40) MAX_COLS … 設定できる画面の最大の文字数(120) DEFAULT_LINES … 画面のデフォルト行数(25) DEFAULT_COLS … 画面のデフォルト文字数(80) kanakan.c: LEN … 仮名漢字変換で用いる作業バッファのバイト数または文字数(100)。 また、画面制御用文字列は次のとおりです(lazy.c内部で定義)。 MOVE(y,x) … 画面の(y,x)へカーソルを移動 ((sprintf(_wbuf, "¥033[%d;%dH", (y)+1, (x)+1), _wbuf)) CLEAR … カーソルを左上に移動し画面全体をクリア ("¥033[H¥033[0J") CLRTOEOL … カーソル位置から行の最後までをクリア ("¥033[K") 付録F トラブルシューティング ・make時に、「stdlib.hがない」とエラーになる → Makefileでコンパイル時オプション NO_STDLIB_Hを有効にしてください。 ・make時に、「sgtty.hがない」とエラーになる → Makefileでコンパイル時オプション TERMIOを有効にしてください。 ・make時に、「termio.hがない」とエラーになる → Makefileでコンパイル時オプション TERMIOを無効にしてください。 ・ariをmake時に、「関数lookup、initkkfがない」とエラーになる → Makefileでコンパイル時オプション MERGEを無効にしてください。 ・m_ariをmake時に、「 main関数の二重定義」とエラーになる → Makefileでコンパイル時オプション MERGEを有効にしてください。 ・ari起動時に "unable to use kanakan. -- no process" とエラーになる → 環境変数 ARI_KKFが定義されておりません。 ARI_KKFを正しい値に定義して ariを起動し直してください。 ・ひらがなや漢字の表示がでない、あるいはおかしい → ファイル入出力または表示の漢字コードが適切ではありません。環境変数 ARI_CODEDEFを正しく設定してください。 (現在の漢字コード設定状況は'^G'コマンドで知ることができます) ・ari起動時に "unable to use kanakan -- process dead." とエラーになる … 仮名漢字変換プログラムの起動に失敗しました。次のいくつかの可能性があ ります。 (a) 環境変数 ARI_KKFの値のあやまり (b) 環境変数 ARI_KKFで指定する仮名漢字変換プログラムがない (c) skksrchが使うローカル辞書ファイル $HOME/.skk-jisyoがない (d) 環境変数 LOCAL_SKK_JISYOで指定するローカル辞書ファイルがない (e) その他、skksrchの起動時オプションあやまり等 ・ariあるいは m_ariの起動に数十秒〜1分以上かかる → 特に大きな辞書ファイルを用いている場合、起動に数十秒〜1分以上かかるこ とがあります。大きな辞書ファイルをインデックス付き辞書ファイルに変更す ることで起動時間を短くすることができます。 (『B.4 インデックス付き辞書ファイルについて』参照) ・SKK辞書ファイルにあるエントリが仮名漢字変換できない … 次のいくつかの可能性があります。 (a) 環境変数 LOCAL_SKK_JISYOまたは SKK_JISYOの指定あやまり → 使用するSKK辞書ファイルを正しく指定してください。 (b) SKK辞書ファイルのエントリ順序のあやまり → エントリは昇順にソートしてください。なお ASCII文字の見出し語は、 ひらがなの見出し語より前にある必要があります。 (c) SKK辞書ファイルの漢字コードあやまり → EUCとしてください。 ・語句の登録に失敗する … 次のいくつかの可能性があります。':setup'コマンドで動作状況を調べてくだ さい。 (a) 語句の登録機能が無効になっている → Makefileでコンパイル時オプション UPDATE_DICを有効にして makeし 直してください。 (b) 仮名漢字変換プログラムが動作していない → いったんプログラムを終了し、仮名漢字変換プログラムを正しく動作 するようにしてから、再起動してください。 (「ari起動時に "unable to ……" とエラーになる」の項参照) (c) 内部作業領域の不足 → いったんプログラムを終了し、再起動してください。 ・ローカル辞書ファイルの更新に失敗する … 次のいくつかの可能性があります。 (a) ローカル辞書ファイルへ書き込みができない → ファイルの許可モードを書き込みができるよう設定してください。 (b) 新たにローカル辞書ファイルを作成できない → ローカル辞書ファイルのあるディレクトリの許可モードを書き込みが できるよう設定してください。 ・ローカル辞書ファイルの更新の際、もとのファイルが保存されない。 … 次のいくつかの可能性があります。 (a) ローカル辞書ファイル名が長く保存用のファイル名が作成できない → MINIX や sysVではファイル名の長さは 14文字までです。 local辞書ファイル名を 13文字以下にしてください。 (b) ローカル辞書ファイル名を変更できない → ローカル辞書ファイルのあるディレクトリの許可モードを書き込みが できるよう設定してください。 付録G 日本語 minix 1.5 for IBM-PC で「あり?」を使う G.1 材料 ・ari、skksrchソース一式 ・SKK辞書ファイル(別途入手してください) G.2 調理方法 (1) ari、skksrchをmakeする。 ari、skksrchのソースが展開されているディレクトリで $ make (ari、skksrchが生成される) (2) ari、skksrchをコマンドPATHの適当なところに置く。($HOME/bin等) (3) ローカル辞書ファイルを作成する(とりあえず空ファイルとしておく)。 $ cp /dev/null $HOME/.skk-jisyo (4) インデックス付き辞書ファイルを作成する。(省略可) (SKK辞書ファイルが ./SKK-JISYO.M にあり、 インデックス付き辞書ファイルを ./idxSKK-JISYO.M とする場合) $ skksrch -index ./SKK-JISYO -to ./idxSKK-JISYO.M G.3 試食方法 (1) コード指定のための環境変数の設定。(EUCを使う場合は不要) (ファイル入出力、表示ともSHIFT-JISコードを使う場合) $ ARI_CODEDEF=SNS $ export ARI_CODEDEF (2) 仮名漢字変換プログラム指定のための環境変数の設定。 $ ARI_KKF=skksrch $ export ARI_KKF (3) 共通辞書ファイルのPATHを環境変数に設定する。 (インデックス付き辞書ファイルが/usr/dic/idxSKK-JISYO.Mにある場合) $ SKK_JISYO=/usr/dic/idxSKK-JISYO.M $ export SKK_JISYO (4) .profile での環境定義例 PATH=:$HOME/bin:/bin:/usr/bin:/usr/lib:/usr/local/bin: umask 022 SHELL=/bin/sh TERM=minix ARI_CODEDEF=SNS ARI_KKF=skksrch SKK_JISYO=/usr/dic/SKK-JISYO.M export PATH HOME PS1 PS2 TERM ARI_CODEDEF ARI_KKF SKK_JISYO 以上で「あり?」を使う準備ができました。ariを起動して下さい。 $ ari file 終わり