Skip to main content.

Weekly "Keyboard World"

週刊「鍵盤世界」

8. the key named "Ctrl"

かつて、Peter Norton はこんなことを言いました。

Return キーに一切触れずに UNIX を使うことが出来る」 と言って、友達と賭けをしましょう。Ctrl + M を使えばいいのです。「それはインチキじゃないか」と言われたら、Ctrl + J を使ってボロ儲けです

― 1997.10.12 掲載

キーボードの上にあるキーの中には、タイプライタの時代には存在せず、 計算機の入力機器としてキーボードが使われるようになってからキーボードの上に登場したキーが幾つもあります。文字がタイプ出来ればよかったタイプライタとは異なり、計算機のキーボードは「計算機を操作する」という任務を背負っていますから、特殊なキーが増えるのは仕方がありません。

今回は前回からの続きで、計算機の入力機器としてキーボードが誕生してからもっとも使われてきた特殊キーであろう Ctrl キーを取り上げます…とか何とか言いながら、 実は私は UNIX 環境における Ctrl キーの歴史しか知りませんので、 ここでは UNIX な環境での話に止めておきますUNIX ですしね)。メインフレームやオフコンでの Ctrl キー歴史は、詳しい方に譲りましょう。

さて、話は大昔…UNIX が産声を上げたころに遡ります。 この時期、世の中にはテレタイプ(teletype)というものが存在していました 私も実物を見たことはないんですが、このテレタイプという代物、 どーやら電気の力によって、遠くの地へとメッセージを送るための装置だったようです。

テレタイプはキーボードに似た形状をしていて、別の装置と回線で繋がっています。 テレタイプのキーを叩くと、テレタイプに繋がった回線を経由して、 同じ回線に繋がった遠くのプリンタに対して文字を打つことが出来たということです。 「テレタイプ」の「テレ」は「テレパシー」の「テレ」と同様、「遠く」という意味です。 つまり、「遠くに文字が届くタイプライタ」といった感じの単語なのでしょうね。

これまた私は見たことがないのですが、何でも初期の UNIX では、このテレタイプに似た端末を使ってユーザと計算機が対話していたようです。 テレタイプにしても、この端末にしても、キーボードとしての作りは非常に簡単なものでして、 今のキーボードのように巨大なものではありませんでした。 最終的にはタイプされた文字は全て紙にプリントアウトされますから、 キーボードにはファンクションキーも Backspaceキーもついていなかったようです。 しかし、こんなキーボードにも、Ctrl キーだけは必ず備わっていました。

テレタイプで文字を送るには、ただ単に文字を送ればいいというわけではありません。 「ここから通信を始めるよ」とか「これで通信は全て完了だよ」 ということを相手のプリンタに伝えることが出来なければならないのです。 勿論、文字を全部送り終ったときに、相手が気がつくようにベルを鳴らすなんていう気が利いたことが出来たらモアベターですね。 このような機能は全て特別な信号として定義され、相手のプリンタはその信号を受信すると、それに見合った動作をしていました。 この特別な信号のことを、「制御文字(control character)」と言います。

そう、もうお分かりかと思うのですが、テレタイプ上の Ctrl キーは、テレタイプから制御文字を送信するために取り付けられていたんですね。 「制御文字を送信するために使われるキー」であるところから、 このキーには「Control」という名前が付けられたのではないか、と想像します。

ところで、我々は「文字」と言われると、「A」や「)」 などの印字・表示可能な文字を想像しがちですが、 計算機の世界や通信の世界での「文字(character)」という概念は、これらに限定されません。 JIS によりますと、「文字」とは、 データを表現、構成又は制御するために用いられる要素の集合の構成単位 となっています。つまり、通信制御や書式指定のために使われる特殊な文字も、 「文字」として扱われるのです。JIS X 0201 では「制御文字」を 一つのビット組み合わせで表現する制御機能 として定義しています。

先程挙げた「「A」や「)」などのように、 「紙や画面の上に印字または表示可能な文字」のことを、 計算機の世界では「図形文字(graphic character)」と呼びます。 また、その定義は 制御機能以外で、通常、手書き・印字・表示の可視的表現をもち、一つ以上のビット組み合わせからなる符号化表現を持つ文字 となっています。

制御文字及び図形文字を定めた規格としては、「ASCII(American Standard Code for Information Interchange)」 (ISO/IEC 646)が有名です。 ASCII の表を一度でも見たことがあるヒトなら気が付くと思いますが、 ASCII の表の左のほうには、普通の文字とは異なる文字が割り振られていますよね。あれらが ASCII で制定されている「制御文字」です。

ところで、制御文字や図形文字の話を続けると長くなってしまいますし、 多くの読者にも退屈なことでしょうから、ここではその詳細については述べません。 興味がある方は、その手の文献を調べてみて下さい。

さて、制御文字と Ctrl キーの関係を、テレタイプと UNIX な環境における例としてみてみましょう。

例えば、Ctrl キーと H を一緒に押すと、 テレタイプは通信先のプリンタに「後退(BS)」という文字を送信しました。 この文字を受け取ったプリンタは、紙の上で印字位置を一つ前に戻します。 すると、次の送られる文字は一つ前の文字…つまり、「後退」 文字が送信される直前に送られた文字の上にもう一文字を印字することになります。 図で示せば、こんな感じになりますね。

「後退」文字による文字の「削除」
Macintosg■ 「h」をタイプするつもりで、「g」をタイプした。プリンタ側は当然、「Macintosg」と印字する。
Macintos■ Ctrl + H を押して「後退」をプリンタに送信すると、印字バーが「g」の位置に戻る。
Macintosh■ そこで「h」を送信すると、「h」は「g」の位置に重なって印字される。

既にある文字の上にもう一文字が重なってタイプされるわけですから、 印字された紙は読みにくい文字になってしまいますが…とにかく、 ちゃんとタイプミスが訂正(?)されて印字されるわけです。昔は、このようにして計算機を使っていました。

さて、Ctrl キーとアルファベットの「A」から「Z」を組み合わせると、 実に 26 種類の制御文字が表現できます。全部は紹介し切れませんが、主なものだけでも挙げてみましょう。

Ctrl + 一文字」は、「Ctrl キーを押しながら文字をタイプする」という意味です。UNIX には「Ctrl」を「^」と表記する独自の習慣があり、 「Ctrl + D」などは通常「^D」と書かれますが、ここではわかりやすく 「Ctrl + D」のように記述します。

また、以下の説明では話を厳密にするために「データ位置」という 単語を使っていますが、単純に理解するのでしたら、データ位置とは 画面上のカーソルのことだと考えていただいて構いません。

Ctrl + D

UNIX 使いならお馴染み、「ファイルの終り」を意味する制御文字ですね。 ASCII では「EOT(end of transmission: 伝送終了)」として定義されています。Ctrl + D は、プリンタなどの「データ処理装置」に「これで通信は完了した」ということを伝えるための文字として使われています。

Ctrl + G

「BEL(bell: ベル)」として定義されています。そのものずばり、 ベルを鳴らすときに使います。UNIX では、Ctrl + G を画面に印字しようとすると、ビープ音がなります。もし、 手元で試すことが出来るのであれば、echo コマンドで BEL 文字を印字してみてみましょう。

まず、シェルで「echo」とタイプした後、「Ctrl + V」を入力し、 続いて「Ctrl + G」をタイプします。画面に

echo ^G

と表示されれば大成功です。Retrun キーを叩くと、ビープ音がなるはずですよ。

Ctrl + H

先程書いたように、データ位置を移動方向と反対の方向に一文字動かします。 つまり、Backspace キーと同様の動作をします。

通常、Backspace キーをタイプすると直前の文字が一文字消えますが、実装する側としては消さなくても構いません。 制御文字に関する規格である JIS X 0211「符号化文字集合用制御機能」によれば、BS の機能は 現在のデータ位置を、自動的な移動方向と逆の方向に 1 文字分動かす となっています。つまり、ただ単にカーソルを 1 文字分だけ後ろに移動させればいいだけで、 「1 文字後ろの文字を消す」という機能は規定されていないのです。

所謂「全角文字」についての規格である JIS X 0208「7 ビット及び 8 ビットの 2 バイト情報交換用符号化漢字集合」で「丸付き数字」は規定されていないのか、 不思議に思われたことがある方もおられるのではないでしょうか。 JIS X 0208 で丸付き数字が規定されていれば、丸付き数字が「機種依存文字」 として、各プラットフォーム毎に規定されるといった現実は避けられたはずなのですが。

これはただ単に「『◯』という文字と数字を組み合わせれば、丸付き数字はおのずと表示出来る」という思想があったからなのです。 つまり、何らかの数字を印字(又は表示)したのち、文字位置を BS を使って先に印字(又は表示)した数字の上に戻し、「◯」という文字を印字(又は表示)すれば、「丸付き文字」が完成する、というわけなのです。 勿論、この方法はスマートとは言いがたいですから、大抵のプラットフォームで丸付き文字が規定されることになったのですけどね。

Ctrl + I

「HT(character tabulation: 文字タブ)」です。 Tab キーと同じですね。UNIX のシェルの中には Tab をタイプすることで補完機能を発動させることが出来るものがありますが、 Ctrl + I をタイプしても同じことが出来ます。

Ctrl + J

「CR(carriage return: 改行)」です。 データ位置をその行の先頭に移動させます。 Macintosh の改行コードがこの「CR」というのは有名ですが、 単純な CR の意味は「改行」ではなく、「行の先頭にカーソルが行くだけ」です。

Ctrl + L

「FF(form feed: 書式送り)」です。 プリンタの用紙を一枚送る場合などに使われます。 NetNews などでは、よく「ネタばらし」の直前に「Ctrl + L」 を入れる習慣がありますが、あれは「FF をサポートしている端末なら、この文字が来たらページ送りをしてくれる」 ということを期待しているからなのです。

Ctrl + M

「LF(line feed: 復帰)」です。データ位置はそのままで、次の行に移動します。 UNIX の改行が「LF」だというのも有名ですが、単純な LF ですと、カーソルの位置がただ単に一行下に行くだけになってしまいます。 従って厳密に行うには、MS-DOS が採用している「CR で行の先頭にカーソルを移動し、 LF で次の行にカーソルを移動させる」という芸当が必要になります。

ちなみにUNIXでは、Ctrl + MCtrl + J、 どちらも Retrun キーの代わりに使うことが出来ます。

Ctrl + QCtrl + S

「DC1(device control one: 装置制御1)」と 「DC3(device control three: 装置制御3)」です。 UNIX においてこの二つは、端末の出力を一時的に止めたり(Ctrl + S)、止めた出力を再開したり(Ctrl + Q)するために用います。

UNIX なんか縁ないよ、という貴女も、パソコン通信で使われる 「XON/XOFF」という通信方式はご存知なのではないでしょうか。 この方式はソフトウェア的に XON(これは DC1 と同じです)と XOFF(これは DC3 と同じです)を発生させ、データの流れを止めたり再開したり… という形で通信を行う方式です。もっとも、最近は低速なソフトウェア制御よりも、 高速なハードウェア制御(RTS / CTS)を使うほうが多いのですけどね。

「それにしても、こんな制御文字送るのだったら、キーボードの上にそれ用のキーを置いとけばいいじゃないか」 と思われる方もおられるかもしれません。実際、最近のキーボードでは上に挙げた制御文字を扱うためのキーが多く追加されています。 テレタイプで「Ctrl + 一文字」の形式で制御文字を扱っていたのは何故なんでしょうね(コストダウンでしょうか?)。

こんなふうにかつては「伝送制御」の為に使われていた Ctrl キーですが、時代の流れには勝てません。 UNIX な世界、それも文字端末環境ではいざ知らず、PC の世界などではいつの間にか Alt キーや Option キーなどと同じような、単なる「修飾キーの一つ」になってしまいました。 これも時代の流れなのかもしれませんが、たまには「Ctrl キーにはかつてはこんな大切な役目を担っていた時期もあったんだなぁ」 っていうことを考えてみるのも、またオツなものかと思うです。

参考文献