MS-DOSのEmacsは、異なる文字セット同士を変換するためのコーディングシステムを含む、GNU、Unix、その他のプラットフォームでサポートされているのと同じ国際化文字セットをサポートします (国際化文字セットのサポートを参照してください)。 しかしMS-DOSと、MS-Windowsや他のシステムとの間の非互換により、このサポートには知っておくべきいくつかのDOS特有の状況があります。このセクションではこれらの状況について説明します。
以下の説明では、主にEmacsのMS-DOSポートについて、特に経験豊富なEmacsユーザーにとって密接に関係する部分について説明します。
カレントDOSコードページにたいして、適切なEmacsディスプレイとコーディングシステムをセットアップします。
MS-DOSは常に256文字の文字セットをサポートするようにデザインされていますが、それからさまざまな文字セットを選択できます。選択できる文字セットはDOSコードページとして知られます。各コードページはすべて128文字のASCII文字を含みますが、それ以外の128文字(コード128から255)は、コードページごとに異なります。各コードページは850、862のように3桁の数字で識別されます。
同時に複数のフォントを使用できるXとは対照的に、通常MS-DOSは1つのセッションで複数のコードページを使用できません。MS-DOSはシステムの開始時に1つのコードページをロードするようにデザインされており、それを変更するには再起動が必要です33。MS-Windowsのような他のシステムでDOSの実行可能ファイルを実行するときも、ほぼ同じ制限が適用されます。
MS-DOSでのマルチバイト処理にたいして、Emacsは選択されたDOSコードページで表示できる文字を知る必要があります。そのため起動後に、選択されたコードページ番号を得るためにシステムに問い合わせを行い、その番号を変数dos-codepage
に格納します。実際のコードページは異なっていても、カレントコードページにたいしてデフォルト値437を返すシステムがいくつかあります(通常これはディスプレイハードウェアーに組み込まれているコードページを使用しているとき発生します)。initファイルで変数dos-codepage
をセットすることにより、Emacsに別のコードページを指定できます。
マルチバイトのEmacsは特定のDOSコードページ — 日本語コードページ932のような極東アジアのスクリプトを表示できるものや、1つのISO 8859文字セットをエンコードするものがあります。
極東アジアのコードページは、それらの国々にたいするMULE文字セットの1つを直接表示できるので、Emacsはそのコードページでサポートされる適切な端末コーディングシステムを使用するためにセットアップを行なうだけです。このセクションの残りの部分で説明する特別な機能は、主にISO 8859文字セットをエンコードするコードページに関するものです。
ISO文字セットの1つに対応するコードページにたいして、Emacsはそのコードページ番号にもとづいた文字セットを認識します。Emacsは、カレントコードページを使用したファイルの読み書きをサポートするためのコーディングシステムを自動的に作成して、そのコーディングシステムをデフォルトとして使用します。このコーディングシステムの名前はcpnnn
で、nnnはコードページ番号です。34
cpnnn
というコーディングシステムはすべて、モードラインのニーモニックに文字‘D’
(“DOS”)を使用します。端末のコーディングシステムと、ファイルI/Oにたいするデフォルトのコーディングシステムは、開始時に適切なcpnnn
コーディングシステムにセットされているので、普通はMS-DOSのモードラインは‘-DD\-’で始まります。
モードラインを参照してください。
極東アジアのDOS端末はcpnnn
コーディングシステムを使用しないので、Emacsデフォルトのモードラインが初期表示されます。
コードページ番号は使用しているスクリプトも示すので、Emacsはそのスクリプトにたいする言語環境を選択するために、自動的にset-language-environment
を実行します
(言語環境を参照してください)。
バッファーにISO 8859文字セット以外の文字が含まれていて、それが選択されたDOSコードページでサポートされていない場合、EmacsはASCII文字のシーケンスを使用して、それを表示します。たとえばカレントコードページが文字‘ò’(grave accentつきの小文字の‘o’)にたいするグリフをもたない場合、その文字は‘{`o}’と表示されます。ここで中カッコ(braces)はそれが1つの文字であることを示す指標です(これはギリシャ文字やヘブライのアルファベットのような非ラテン文字にたいして不格好に見えるかもしれませんが、その言語を知る人はこれを読むことができます)。その文字がスクリーンの複数列を占めていても、それは単なる1つの文字であり、Emacsコマンドは、それを1文字として扱います。
MS-Windowsは独自のコードページを提供し、同じロケールにたいするDOSコードページとは異なります。たとえばDOSコードページと同じ文字をサポートするWindowsコードページは1252で、DOSコードページ855と同じ文字をサポートするWindowsコードページは1252、などです。EmacsのMS-Windowsバージョンを‘-nw’オプションで呼び出したとき、Emacsはカレントコードページを使用して表示を行ないます。
通常1つの特定のコードページがディスプレイメモリーに組み込まれていて、CONFIG.SYSのようなシステム設定ファイルを変更して再起動することにより他のコードページをインストールできます。再起動なしでコードページを変更できるサードパーティーのソフトウェアーもありますが、ここでは普通のMS-DOSシステムが振る舞う方法を説明します。
ISO 8859にたいすEmacsの標準コーディングシステムは、この目的に完全に沿っているとは言えません。なぜならDOSコードページは通常、標準ISO文字コードにマッチしないからです。たとえば文字‘ç’(cedillaつきの‘c’)は標準Latin-1文字セットのコード231ですが、それに対応するDOSコードページ850はこのグリフにコード135を使用します。