GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html ・ emacs-doc.conao3.com

24.3 入力方法

入力メソッドとは、対話的な入力に特化して設計された文字変換の一種です。本節ではEmacsに付属する入力メソッドについて説明します。基盤となるOSが提供するネイティブな入力メソッドについては、ユニバイト編集モードを参照してください。

Emacsでは通常、言語ごとに独自の入力メソッドが用意されています。同じ文字を使用する複数の言語で、一つの入力メソッドを共有することもあります。また、いくつかの入力メソッドに対応している言語もあります。

最もシンプルな入力方式は、ASCII文字を別の文字体系にマッピングする仕組みで、これによりASCIIの代わりに別の文字体系を利用できます。ギリシャ語やロシア語の入力方式はこの仕組みで動作しています。

より強力な手法がコンポジションであり、これは文字の並びを1つの文字に変換するものである。多くの欧州の入力方式では、文字の後にアクセント文字が続く(あるいはその逆の)並びから、単一の非ASCII文字を生成するためにコンポジションを用いる。例えば、一部の方式ではo ^という並びを単一のアクセント付き文字に変換する。これらの入力方式には独自の特別なコマンドはなく、単に印字文字の並びをコンポジションするのみである。

音節文字の入力方式では、通常、マッピングに続いて合成を行う。タイ語や韓国語の入力方式はこの仕組みになっている。まず、文字が特定の音や声調記号に対応する記号にマッピングされ、次に、音節全体を構成するこれらの記号列が、一つの音節記号にマッピングされる。

中国語と日本語では、より複雑な手法が必要となります。中国語の入力方式では、まず中国語の単語の発音表記(入力方式 chinese-py など)、あるいは文字の一部の連なり(入力方式 chinese-4corner や chinese-sw など)を入力します。通常、一つの入力シーケンスが多くの候補となる中国語文字に対応します。C-f、C-b、C-n、C-p などのキー(または矢印キー)や、この場合は特別な意味を持つ数字を用いて、意図する文字を選択します。

候補となる文字は概念的に数行に配置されており、各行には最大10個の選択肢が含まれています。通常、Emacsはエコーエリアに一度に1行のみを表示します。冒頭には(i/j)が表示され、これが全j行のうちi行目であることを示します。次の行または前の行を表示するには、C-nまたはC-pと入力してください。

C-f と C-b を入力すると、現在の行にある選択肢を前後に移動できます。このとき、Emacs は現在の選択肢を特別な色でハイライトします。C-SPC を入力すると、現在の選択肢が選択され、入力として使用されます。行内の選択肢には番号も振られており、選択肢の前にその番号が表示されます。番号を入力すると、現在の行の対応する選択肢が選択され、入力として使用されます。

これらの中国語入力方式では、TAB を押すと考えられるすべての文字が一度に表示されるバッファが現れ、その中のいずれかを mouse-2 でクリックすると、その候補が選択されます。C-f、C-b、C-n、C-p のキーおよび数字キーは通常通り動作しますが、ハイライトはエコーエリアではなく、候補文字が表示されるバッファ内で行われます。

代わりにpīnyīn翻字方式に従って文字を入力するには、chinese-sisheng入力方式を使用してください。これは合成ベースの方式で、例えばpi1は‘pī’となります。

日本語入力方式では、まず音訓表記を用いて単語全体を入力します。その後、単語がバッファに入ると、Emacsは大規模な辞書を用いてそれを1文字以上の文字に変換します。1つの音訓表記は複数の異なる日本語単語に対応しており、その中から1つを選択するには、C-n と C-p を使って候補を順に切り替えます。

入力した文字が後続の文字と結合しないよう、入力メソッドの処理を遮断することが有用な場合があります。例えば、入力メソッド latin-1-postfix では、o ^ という並びが結合して、アクセント付きの ‘o’ となります。これらを別々の文字として入力したい場合はどうすればよいでしょうか。

一つの方法は、アクセント記号を2回入力することです。これは、独立した文字とアクセント記号を入力するための特別な機能です。例えば、o ^ ^ と入力すると、‘o^’ という2つの文字が得られます。もう一つの方法は、o の後に別の文字(結合しない文字)を入力し、すぐにそれを削除することです。例えば、o o DEL ^ と入力することで、‘o’ と ‘^’ を個別に入力できます。さらに汎用的ですが、入力はそれほど簡単ではない別の方法として、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 に追加する関数内で変更を加えることで、入力メソッドの動作を変更できます。フック を参照してください。例えば、keymap-set を使用して関数 quail-translation-keymap が返すキーマップにキーバインドを定義することで、入力メソッドの一部のキーを再定義できます。初期化ファイルでのキーの再バインド を参照してください。

バッファ内のテキストが何らかの理由で読み取り専用になっている場合、入力メソッドは無効化されます。これは、read-only-mode や image-mode のようにバッファのテキストまたはその一部を読み取り専用にするモードにおいて、入力メソッドが有効な状態であっても、1文字キーバインドが動作するようにするためです。

キーボードにない文字を入力するもう一つの方法は、C-x 8 RET (insert-char) を使用して、Unicode名またはコードポイントに基づいて単一の文字を挿入することです。テキストの挿入を参照してください。

絵文字を挿入するための専用コマンドが用意されており、これらはC-x 8 eキーマップで確認できます。C-x 8 e e (emoji-insert) を使うと、さまざまな絵文字カテゴリを移動して一つを選択できます。C-x 8 e l (emoji-list) を押すと新しいバッファがポップアップし、すべての絵文字が一覧表示されます。絵文字文字をクリック(またはRETを使用)すると、現在のバッファに挿入されます。最後に、C-x 8 e s (emoji-search) を使うと、名前に基づいて絵文字を検索できます。

describe-char は、ポイント位置にある文字やグリフ(絵文字を含む)に関する多くの情報を表示します。名前の概要を素早く把握したい場合に便利で、C-x 8 e d (emoji-describe) コマンドを使ってそれを行うことができます。これは主に、見た目が非常に似ているさまざまな絵文字のバリエーションを区別するのに役立ちますが、絵文字以外の文字の名前も表示します。