Next: , Previous: , Up: 国際化文字セットのサポート   [Contents][Index]


22.3 インプットメソッド

インプットメソッド(input method)とは対話的入力に特化した文字変換の一種です。Emacsでは、各言語はそれ自身のインプットメソッドをもっています。同じ文字を使う複数の言語で、1つのインプットメソッドを共有できます。複数のインプットメソッドをサポートする言語もあります。

一番簡単な種類のインプットメソッドは、ASCII文字を他のアルファベットにマッピングすることにより機能します。これによりASCIIのかわりに他のアルファベットを使うことが可能になります。GreekとRussianのインプットメソッドはこの方式で機能します。

より強力なテクニックがコンポジション(composition: 複合)です。これは文字のシーケンスを1つの文字に変換します。Europeanのインプットメソッドの多くが、アクセント文字を後(または前)に続けた文字シーケンスから、1つの非ASCII文字を生成するためにコンポジションを使います。たとえば、インプットメソッドのいくつかは、o ^のシーケンスを1つのアクセントつき文字に変換します。これらのインプットメソッドは、それら自身では特別なコマンドをもちません。これらすべてが行うのは、文字シーケンスを複合して、プリント文字にすることです。

音節記号(syllabic scripts)のためのインプットメソッドは通常、マッピングと、それに続けてコンポジションを使います。ThaiとKoreanのためのインプットメソッドは、この方式で機能します。最初に複数の文字が、特定の音や口調のためのシンボルにマッピングされます。次にこれらシンボルのシーケンスから音節全体を作り、それを1つの音節記号にマッピングします。

ChineseとJapaneseには、さらに複雑な方式が必要です。Chineseのインプットメソッドでは、最初にChineseの単語の音声スペルを入力するか(特にインプットメソッドchinese-py)、文字の一部をシーケンスとして入力します(インプットメソッドchinese-4cornerchinese-swなど)。通常1つの入力シーケンスは、多くのChinese文字に対応します。C-fC-bC-nC-p(または矢印キー)、またはこの状況では特別な意味をもつ数字を指定することにより、意図するものを選択します。

文字の候補は、概念的には複数の行にアレンジされ、各行は10個の候補をもちます。通常Emacsは1度に1行をエコーエリアに表示します。行頭に(i/j)が表示され、これはトータルj行中、i番目の行かを示します。C-nまたはC-pをタイプすると、次または前の行を表示します。

C-fまたはC-bをタイプすると、カレント行の候補の間を前方または後方に移動します。これを行うとき、Emacsはカレント候補を特別な色でハイライトします。C-SPCとタイプすると、カレント候補を選択して、それを入力に使用します。各行の候補には番号も付けられています。この番号は各候補の前に表示されます。番号をタイプすると、カレント行の番号に関連付けられた候補を選択し、それを入力に使用します。

これらChineseのインプットメソッドでは、TABはすべての文字候補をバッファーに表示します。候補の1つをmouse-2でクリックすることにより選択します。C-fC-bC-nC-p、および数字キーは通常どおり機能しますが、それらはエコーエリアではなく、文字候補を表示したバッファーをハイライトします。

かわりにpīnyīn変換メソッドに応じた文字を入力するには、入力メソッドchinese-sishengを使用します。これは合成ベースのメソッドであり、pi1が‘’になります。

Japaneseのインプットメソッドでは、最初に音声スペルを使って単語全体を入力します。つぎに単語がバッファーに入った後で、より大きな辞書を使ってEmacsがそれを1つ以上の文字に変換します。1つの音声スペルは、いくつかのJapaneseの単語に対応します。これらの1つを選択するには、C-nまたはC-pを使って候補を巡回します。

インプットメソッドをオフにして、入力した文字シーケンスが複合されないようにするのが便利なときがあります。たとえばインプットメソッドlatin-1-postfixでは、シーケンスo ^は、アクセントつきの‘o’に複合されます。これらの文字を個別に入力したいときはどうすればよいでしょう?

1つは、アクセントを2度タイプする方法です。これは文字とアクセントを個別に入力するための特別な機能です。たとえばo ^ ^により、2つの文字‘o^’が得られます。他の方法としてはoの後に別の文字 — 複合されない何か別の文字 — を入力してすぐにそれを削除する方法です。たとえばo o DEL ^とタイプすることにより、‘o’と‘^’を個別に得ることができます。もう1つは、より一般的ですがタイプが容易とは言えない方法で、2つの文字が欠号されるのを防ぐために、文字の間でC-\\ C-\\を使用する方法です。これは、コマンドC-\\(toggle-input-method)を2回使用しています。 インプットメソッドの選択を参照してください。

C-\ C-\は、インクリメンタル検索の中で使うのが特に便利です。なぜならこれは複合される文字が入力されるのを待つのを止めて、それまでに入力した文字で検索を開始するからです。

現在のインプットメソッドを使って、ポイント位置の後ろの文字を入力する方法を探すには、C-u C-x =をタイプします。カーソル位置の情報を参照してください。

変数input-method-highlight-flagおよびinput-method-verbose-flagは、インプットメソッドで何が起きているかを告げる方法を制御します。input-method-highlight-flagが非nilの場合、部分的な入力シーケンスがバッファーでハイライトされます(この機能を無効にしているインプットメソッドもあります)。input-method-verbose-flagが非nilの場合、次にタイプできる文字の一覧をエコーエリア(ただしミニバッファーにいるときは除く)に表示します。

フック変数quail-activate-hookに関数で変更を行うことにより、入力メソッドが機能する方法を変更できます。フックを参照してください。たとえば、関数quail-translation-keymapによりリターンされるキーマップ内のキーバインディングを、define-keyを使用して、定義することによりその入力メソッドのいくつかのキーを再定義できます。initファイル内でのキーのリバインドを参照してください。

何らかの理由でバッファーのテキストが読み取り専用の際には、入力メソッドは抑制されます。これはread-only-modeimage-modeのようなバッファーテキストやその一部が読み取り専用なモードにおいて、たとえば入力メソッドがアクティブでも単一文字のキーバインディングを機能させるためです。

キーボードにない文字をタイプする他の方法は、C-x 8 RET (insert-char)を使って、Unicode名またはコードポイント(code-point)にもとづいて1つの文字を挿入する方法です。テキストの挿入を参照してください。