Go to the first, previous, next, last section, table of contents.


文字、キー、コマンド

本章では、Emacsが入力コマンドやファイルの内容に対して用いる 文字集合について説明します。 また、キー(keys)とコマンド (commands)の概念についても説明します。 キーやコマンドは、キーボード入力やマウス入力を Emacsがどのように解釈するのかを理解するうえでの基礎となります。

ユーザー入力の種類

GNU Emacsは、キーボード入力に対しては拡張ASCII文字集合を使います。 また、ファンクションキーやマウスボタン操作のような文字以外の 入力イベントも受け付けます。

ASCIIは、128の文字コードから成ります。 これらのコードの中には、`a'`='のような 図形記号に割り当てられているものもあります。 それ以外は、Control-aのようなコントロール文字です (通常、C-aと略記)。 C-aの名前は、CTRLキーを押し下げたままaを 押すことからきています。

ASCIIコントロール文字の中には、特別な名前が付いたものもあります。 多くの端末では、コントロール文字を打つための特別なキーを備えています。 たとえば、RETTABDELESCがそうです。 空白文字は、以下では普通SPCと表記します。 厳密にいえば、表示した図形が空白である図形文字です。 C-jに対する別名である『linefeed』(ラインフィード) (8)という ラベルが付いたキーを備えたキーボードもあります。

Emacsでは、数千の印字文字(see section 国際化文字集合の使い方)、 追加のコントロール文字、任意の文字と組み合わせ可能な修飾子を導入して、 ASCII文字集合を拡張しています。

ASCII端末では、利用可能なコントロール文字は32個しかありません。 これらは、英字と`@[]\^_'のコントロール変種です。 さらに、コントロール文字では、シフトキーは意味を持ちません。 つまり、C-aC-Aは同じ文字であり、Emacsは区別できません。

しかし、Emacsの文字集合自体には、 すべての印字文字にコントロール変種を用意する余地があり、 C-aC-Aを区別できます。 Xウィンドウシステムでは、これらすべての文字を入力できます。 たとえば、C--(コントロールマイナス)とC-5は、 Xウィンドウシステム上では意味を持つEmacsコマンドです。

Emacsの文字集合に対するもう1つの拡張は、修飾ビットの追加です。 通常は1ビットの修飾ビットだけを使い、 このビットをメタ(Meta)と呼びます。 すべての文字にはメタ変種があります。 たとえば、Meta-a(通常はM-aと略記)や M-AM-aとは異なる文字だが、Emacsでは通常、同じ意味)、 M-RETM-C-aです。 伝統的な理由で、通常、M-C-aよりむしろC-M-aと書きます。 論理的には、2つの修飾キーCTRLMETAの順序は関係ありません。

端末の中にはMETAキーを備えたものもあり、 このキーを押し下げることでメタ文字を打てます。 たとえば、Meta-aは、METAを押し下げたまま aを押して入力します。 METAキーはSHIFTキーと同じように働きます。 しかし、このようなキーのラベルがつねにMETAであるとは限りません。 というのは、この機能は、別の主目的を持つキーとするための 特別なオプションであることがままあるからです。

METAキーがなくても、ESCで始まる2文字列を使って メタ文字を入力できます。 つまり、M-aを入力するには、 ESC aと打ちます。 C-M-aを入力するには、ESC C-aと打ちます。 この方法に慣れているのであれば、 METAがある端末でも、ESCを使ってかまいません。 Xウィンドウシステムには、他にもいくつかの修飾キーがあり、 すべての入力文字に適用できます。 これらは、SUPERHYPERALTと呼ばれます。 文字にこれらの修飾子が付いていることを示す意味で、 `s-'`H-'`A-'と書きます。 つまり、s-H-C-xは、Super-Hyper-Control-xを省略したものです。 すべてのX端末に、実際にこれらの修飾子用のキーがあるわけではありません。 実際、ALTとラベルされているにも関わらず、 実はMETAとして機能するキーを持つ端末が多くあります。 Emacsの標準キーバインディングには、 これらの修飾子が付いた文字はありません。 しかし、Emacsをカスタマイズして、それらに独自の意味を割り当てることができます。

キーボード入力には、 ファンクションキーや矢印キーのような文字以外のキーも含まれます。 マウスボタンも文字の範囲には入りません。 これらのイベントも、修飾キーCTRLMETASUPERHYPERALTを使って、 キーボード文字と同じように修飾できます。

文字入力と非文字入力の両者を合わせて、 入力イベント(input events)と呼びます。 より詳しくは、 See section `入力イベント' in Emacs Lisp リファレンスマニュアル。 Lispのプログラミング抜きに、 文字イベントや非文字イベントの意味を再定義したい場合には、 section カスタマイズを参照してください。

ASCII端末では、ASCII文字だけしかコンピュータに送れません。 これらの端末では、文字の並びを使って各ファンクションキーを表現します。 ただし、キーボード入力ルーチンがこれらの特別な文字の並びを認識して、 Emacsの他の部分に渡すまえにファンクションキーイベントに変換してしまうので、 これらの文字の並びがEmacsユーザーの目にふれることはありません。

キー

キー列(key sequence)(キーと略記)は、 一塊で『1つのコマンド』としての意味を持つ入力イベントの列です。 Emacsのコマンド列の中には、1文字のみ、つまり、 1イベントのみであるものもあります。 たとえば、C-fはポイントを1文字先へ進めます。 しかし、なかには、起動に2つ以上のイベントを必要とするコマンドもあります。

あるイベント列が1つのコマンドを起動するのに十分である場合、 それらを完結キー(complete key)と呼びます。 完結キーの例としては、C-aXRETNEXT(ファンクションキーの1つ)、DOWN(矢印キー)、C-x C-fC-x 4 C-fがあります。 完結するほど十分に長くないイベント列を、 プレフィックスキー(prefix key)と呼びます。 上の例では、C-xC-x 4が、プレフィックスキーです。 すべてのキー入力列は、完結キーかプレフィックスキーのどちらかです。

Emacs標準のコマンド割り当てでは、ほとんどの1文字は完結キーです。 残りの少数はプレフィックスキーです。 プレフィックスキーは、後続の入力イベントと結び付いて、 それ自体が完結キーやプレフィックスキーとなる、 さらに長いキーの列を作ります。 たとえば、C-xはプレフィックスキーなので、 C-xに続く入力イベントと結び付いて2文字のキー列を作ります。 C-x C-fC-x bを含めて、 これらのキー列のほとんどは完結キーになります。 C-x 4C-x rのように、 いくつかのキー列はそれ自体がプレフィックスキーとなり、 3文字のキー列を作ります。 キー列の長さに制限はありませんが、 実用上は4文字を超える長さのキー列を使うことはめったにありません。

これに対して、完結キーには入力イベントを付け加えることができません。 たとえば、2文字の列C-f C-kはキーではありません。 というのは、C-fがそれ自体で完結キーだからです。 C-f C-kにコマンドとしての独立した意味付けをすることは不可能です。 C-f C-kは、2つのキー列であって、1つのキー列ではありません。

Emacsのプレフィックスキーは、C-cC-hC-xC-x RETC-x @C-x aC-x nC-x rC-x vC-x 4C-x 5C-x 6ESCM-gM-jです。 しかし、これらは固定されているわけではなく、 Emacsのキー割り当ての標準設定となっているだけです。 Emacsをカスタマイズすれば、新しいプレフィックスキーを設定したり、 これらを解除したりできます。 See section キーバインディングのカスタマイズ

プレフィックスキーを設定したり解除したりすると、 可能なキー列の集合を変えることになります。 たとえば、C-fをプレフィックスキーとして再定義すると、 C-f C-kは自動的に (これをさらにプレフィックスとして定義しない限り完結した)キーになります。 逆に、C-x 4をプレフィックスでなくすると、C-x 4 f (またはC-x 4 anything)は、もはやキーではなくなります。

プレフィックスキーのあとにヘルプ文字(C-hF1)を打つと、 そのプレフィックスで始まるコマンド一覧を表示できます。 歴史的な背景から、C-hが機能しないプレフィックス文字も存在します。 これらの文字では、C-hが別の意味に割り当てられていて、 容易には変更できないのです。 しかし、F1はすべてのプレフィックスに対して使えるはずです。

キーとコマンド

本書は、特定のキーの機能を詳しく説明したページばかりです。 しかし、Emacsは直接キーに意味を与えてはいません。 そのかわりに、Emacsは名前を付けたコマンド(commands)に意味を持たせ、 キーとコマンドをバインディング(binding、結び付ける) することによって、キーに意味を与えています。

すべてのコマンドには、プログラマが選んだ名前が付いています。 その名前は、たいていダッシュで区切った数語の英単語です。 たとえば、next-lineforward-wordがそうです。 コマンドは、Lispプログラムである関数定義 (function definition、defun)を持ちます。 これが、コマンドが行うべきことを行えるようにしています。 Emacs Lispでは、コマンドは実際には特別な種類の関数です。 つまり、引数の読み取り方や対話的な呼び出し方が規定されたLisp関数です。 コマンドと関数に関してより詳しくは、 section `関数とは何か' in Emacs Lisp リファレンスマニュアルを 参照してください。(本書での定義は少々簡易化してある。)

キーとコマンドのバインディングは、 キーマップ(keymaps)という表に記録されています。 See section キーマップ

C-nは垂直方向に1行下がる』という表現では、 Emacsのカスタマイズ方法を理解するうえでは非常に重要であっても、 普段の使い方では意味のない「区別」をあえて無視しています。 下がるようにプログラムされているのはnext-lineというコマンドです。 C-nがそのコマンドにバインドされているので、 そのような効果を発揮するのです。 C-nをコマンドforward-wordにバインドし直すと、 C-nは、かわりに1単語ずつ先へ進むようになります。 キーの再バインディングは、カスタマイズの一般的な方法です。

本書では、今後、話を単純にするために、 普段はこの違いを無視することにします。 カスタマイズに必要な情報を示す場合、 コマンドを実行するキーを記したあとに、 実際にその動作を行うコマンドの名前を括弧に括って示します。 たとえば、『コマンドC-nnext-line)は、 ポイントを下向きに移動する』という表現では、 下向きに移動するコマンドはnext-lineであり、 標準ではキーC-nにバインドされていることを意味します。

これまでカスタマイズに関して述べてきましたので、 変数についてふれておく時期でしょう。 コマンドの説明では、 『これを変更するには、変数mumble-fooを設定する』と 記述することがあります。 変数とは、値を記憶しておくために使う名前のことです。 本書に記載された変数の大部分は、カスタマイズのために使われます。 いくつかのコマンドやEmacsの他の部分では、 変数を調べて設定された値に従ってそのふるまいを変えていきます。 カスタマイズに興味が出てくるまでは、 変数に関する記述は無視してかまいません。 カスタマイズしてみたいと思ったら、 変数に関する基礎を読んでください。 そうすれば、個々の変数に関する情報を理解できるでしょう。 See section 変数

テキスト用の文字集合

Emacsバッファ内のテキストは、1バイト8ビットのバイトの列です。 各バイトで、1つのASCII文字を表現できます。 ASCIIコントロール文字(8進数000〜037、0177)と ASCII印字文字(8進数040〜0176)の両方を使えます。 しかし、非ASCIIコントロール文字はバッファには現れません。 メタのようなキーボード入力で用いられるその他の修飾フラグも バッファ内では許されません。

いくつかのASCIIコントロール文字は、 テキスト中では特別な目的のために用いられていて、特別な名前が付いています。 たとえば、改行文字(8進数012)は、バッファ内の1行の終りに使われます。 また、タブ文字(8進数011)は、つぎのタブストップ位置(通常8桁ごと)まで テキストを字下げするために使われます。 See section テキストの表示方法

非ASCII印字文字もバッファ内に存在できます。 マルチバイト文字を使用可にしてあれば、 Emacsが扱える任意の非ASCII印字文字を使えます。 それらの文字の文字コードは256(8進で0400)から始まり、 各文字は2バイト、あるいはそれ以上のバイト列として表現されます。 See section 国際化文字集合の使い方

マルチバイト文字を使用不可にしている場合、 非ASCII文字のうちの1種類のアルファベットだけを使えますが、 それらはすべて1バイトに収まるものです。 文字コードは0200から0377を使います。 See section 1バイトヨーロッパ文字の使い方


Go to the first, previous, next, last section, table of contents.