Next: MS-DOS Processes, Previous: MS-DOS Printing, Up: MS-DOS
MS-DOS上のEmacsは、UNIXや他のプラットフォーム上と同じ 国際化文字集合を扱えます(see International)。 これには、異なる文字集合のあいだの変換を行うコーディングシステムも含みます。 しかしながら、MS-DOS/MS-WindowsとUNIXとの非互換性に起因する DOSに固有な特色があり、ユーザーは理解しておく必要があります。 本節では、これらの特色について述べます。
MS-DOSは、一度には256文字から成る単一の文字集合を扱えるように 設計されていますが、さまざまな文字集合から選択できます。 代替文字集合は、DOSコードページと呼ばれます。 各コードページは、128個の全ASCII文字を含みますが、 残りの128文字(コード128〜255)は、コードページごとに異なります。 各DOSコードページは、850や862などの3桁の数字で識別します。
同時に複数のフォントを使えるXウィンドウに比べると、 MS-DOSでは1つのセッションでは複数のコードページを使えません。 MS-DOSはシステムブート時に単一のコードページをロードします。 コードページを変更するにはMS-DOSをリブートする必要があります 1。 MS-Windowsなどの他のシステムでDOSプログラムを実行する場合にも、 同様の制約が課せられます。
MS-DOS上でオプション‘--unibyte’ (see Initial Options)を指定してEmacsを起動すると、 Emacsは、いかなる変換も非ASCII文字には行いません。 非ASCII文字はそのまま読み書きし、 画面には8ビットコードをそのまま送ります。 つまり、MS-DOS上のユニバイトEmacsは、 なんであれカレントコードページを使いますが、 それ以外の文字を表現することはできません。
MS-DOS上でのマルチバイト操作には、
Emacsは、選択されているDOSコードページで表示できる文字群を
知っておく必要があります。
そのため、起動後、選択しているコードページ番号をシステムに問い合わせ、
変数dos-codepage
にその番号を保存します。
実際に使っているコードページとは異なっていても、
カレントコードページのデフォルト値437を返すシステムもあります。
(典型的には、ディスプレイ装置に組み込まれたコードページを使用すると
発生する。)
個人の初期化ファイルで変数dos-codepage
を設定すれば、
Emacsが使うコードページ(番号)を別のものに指定できる。
マルチバイトEmacsは、特定のDOSコードページだけを扱えます。 これらには、日本語用コードページ932のような極東の文字を表示できものや、 単一のISO 8859文字集合を符号化できるものが含まれます。
極東用コードページは、 それらの国々用のMULE文字集合の1つを直接表示できますから、 Emacsは、コードページで扱える 適切な端末コーディングシステムを設定するだけです。 本節の残りで述べる特別な機能は、 ISO 8859文字集合を符号化するコードページに関することです。
ISO文字集合の1つに対応したコードページに対しては、
Emacsはコードページ番号に基づいた文字集合名を知っています。
Emacsは、カレントコードページを用いたファイルの読み書きを扱う
コーディングシステムを自動的に作成し、
デフォルトでこのコーディングシステムを使います。
コードページ番号をnnnとすると、このようなコーディングシステムの
名前はcp
nnnです。
2
すべてのcp
nnnコーディングシステムは、
モード行の表示に(『DOS』の)文字‘D’を使います。
端末コーディングシステムとファイル入出力用のデフォルトの
コーディングシステムは、起動時に、
正しくcp
nnnコーディングシステムに設定されますから、
MS-DOSでは、モード行は普通‘-DD\-’で始まります。
See Mode Line。
極東用DOS端末は、cp
nnnコーディングシステムを使用せず、
そのため、初期のモード行はUNIXのようになります。
コードページ番号は、使用する文字群を指定しますから、
Emacsは、その文字群用の言語環境を選択するために
set-language-environment
を自動的に実行します
(see Language Environments)。
バッファ内に異なるISO 8859文字集合に属する文字、 すなわち、選択しているDOSコードページで扱えない文字が含まれる場合、 Emacsはその文字をASCII文字の列で表示します。 たとえば、カレントコードページに文字‘ò’ (アクサングレーブ付きの小文字の‘o’)の字形がないときには、 中括弧で囲って1文字であることを表して、 ‘{`o}’と表示します。 (このようにすると、ギリシャ文字やヘブライ文字などの非Latin文字のなかには、 とても見難くなるのもがあるが、その言語を知っている人には 少なくとも読める。) 1文字でも画面上は数桁を占めますが、 実際には単一の文字であり、Emacsのすべてのコマンドも1文字として扱います。
DOSコードページ内のすべての文字がISO 8859文字に対応するわけではなく、
箱を描くための文字や他の図形用文字もあります。
Emacs内部ではこれらの文字を表現できませんので、
これらの文字を含んだファイルを読み込むと、
これらの文字は、変数dos-unsupported-character-glyph
で指定した
特定の文字コードに変換されます。
Emacsは、ISO 8859以外の他の多く文字集合を扱えますが、
それらをMS-DOS上では表示できません。
そのようなマルチバイト文字がバッファ内にあると、
MS-DOS上のEmacsは、変数dos-unsupported-character-glyph
の
指定どおりに表示します。
デフォルトでは、その字形は、白抜きの三角形です。
コマンドC-u C-x =を使って、そのような文字の
実際の文字コードと文字集合を表示してください。
See Position Info。
デフォルトでは、Emacsはカレントコードページを扱えるコーディングシステムを 定義します。 (他国のDOSマシンで書いたファイルを訪問するなどの) 他のコードページ用のコーディングシステムを定義するには、 コマンドM-x codepage-setupを使います。 これは、3桁のコードページ番号を問い合わせてきますが、補完を使えます。 そして、指定したコードページ用のコーディングシステムを作成します。 これで、新たなコーディングシステムを使ってファイルを読み書きできますが、 このコーディングシステムを使うには、 ファイルコマンドで明示する必要があります(see Specify Coding)。
これらのコーディングシステムは、 DOSコードページで符号化したファイルを 他のオペレーティングシステム上のEmacsで訪問する場合にも利用できます。