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

I.12.6 MS-DOSの国際サポート

MS-DOS上のEmacsは、GNUやUnix、その他のプラットフォームと同様に、同一の国際文字セットをサポートしています(国際文字セットのサポートを参照)。これには、異なる文字セット間を変換するための符号化方式も含まれます。ただし、MS-DOS/MS-Windowsと他のシステムとの間には互換性がないため、このサポートには留意しておくべきDOS固有の点がいくつかあります。本節では、これらの点について説明します。

以下の説明は、主にEmacsのMS-DOS版に特化したものであり、特にEmacsユーザーにとっての実務上の影響について述べている箇所がそうです。

M-x dos-codepage-setup

現在のDOSコードページに応じて、Emacsの表示およびコーディングシステムを適切に設定する。

MS-DOSは、任意の時点で256文字の文字セット1つをサポートするように設計されていますが、選択可能な文字セットが多岐にわたって用意されています。これらの代替文字セットはDOSコードページと呼ばれます。各コードページには128文字のASCII文字がすべて含まれていますが、残りの128文字(コード128から255まで)はコードページによって異なります。各DOSコードページは、850や862などの3桁の数値で識別されます。

複数のフォントを同時に使用できるXとは対照的に、MS-DOSでは通常、単一のセッション内で複数のコードページを使用することはできません。MS-DOSは、システム起動時に単一のコードページをロードし、変更するには再起動を必要とするように設計されていました45。MS-Windowsなどの他のシステムでDOS実行ファイルを実行する場合も、ほぼ同様の制限が適用されます。

MS-DOS上でマルチバイト操作を行うには、Emacsは選択したDOSコードページでどの文字が表示可能かを知る必要があります。そのため、起動直後にシステムに問い合わせて選択されたコードページ番号を取得し、その番号を変数 dos-codepage に格納します。システムによっては、実際のコードページが異なっていても、現在のコードページとしてデフォルト値の 437 を返すことがあります。(これは通常、ディスプレイハードウェアに内蔵されたコードページを使用する場合に起こります。)初期化ファイルで変数 dos-codepage を設定することで、Emacs で使用する別のコードページを指定できます。

Multibyte Emacsがサポートしているのは、特定のDOSコードページのみです。具体的には、日本語のコードページ932のように極東の文字体系を表示できるものや、単一のISO 8859文字セットをエンコードするものが該当します。

極東地域のコードページでは、これらの国々向けのMULE文字セットのいずれかを直接表示できるため、Emacsは単に、そのコードページがサポートする適切なターミナル符号化方式を使用するように設定します。本節の後半で説明する特殊な機能は、主にISO 8859文字セットを符号化するコードページに関するものです。

ISO文字セットのいずれかに対応するコードページについて、Emacsはコードページ番号に基づいて文字セットを判別します。Emacsは、現在のコードページを使用するファイルの読み書きをサポートするためにコーディングシステムを自動的に作成し、デフォルトでこのコーディングシステムを使用します。このコーディングシステムの名前はcpnnnであり、nnnはコードページ番号です。46

すべてのcpnnnコーディングシステムでは、モードラインの記憶符号として文字‘D’(“DOS”の略)を使用しています。ターミナルのコーディングシステムとファイルI/Oのデフォルトコーディングシステムの両方が、起動時に適切なcpnnnコーディングシステムに設定されるため、MS-DOSのモードラインが‘-DD\-’で始まるのは正常な動作です。モードラインを参照してください。極東地域のDOSターミナルではcpnnnコーディングシステムを使用していないため、初期のモードラインはEmacsのデフォルトと同じ形式になります。

コードページ番号はどのスクリプトを使用しているかも示すため、Emacs は自動的に set-language-environment を実行して、そのスクリプトの言語環境を選択します(言語環境 を参照)。

バッファに、選択したDOSコードページがサポートする文字セット以外のISO 8859文字セットに属する文字が含まれている場合、EmacsはそれをASCII文字のシーケンスを用いて表示します。例えば、現在のコードページに文字 ‘ò’(グレイヴ・アクセント付きの小文字 ‘o’)のグリフがない場合、それは ‘{`o}’ として表示され、ここで角括弧はこれが単一の文字であることを示す視覚的な目印となります。(ギリシャ文字やヘブライ文字など、一部の非ラテン文字では不自然に見えるかもしれませんが、その言語に精通している人であれば依然として読み取ることができます。)その文字が画面上で複数の列を占めていたとしても、実際には依然として単一の文字であり、すべてのEmacsコマンドはそれを1文字として扱います。

MS-Windowsは独自のコードページを提供しており、これらは同一のロケールにおけるDOSのコードページとは異なります。例えば、DOSコードページ850はWindowsコードページ1252と同じ文字セットをサポートしており、DOSコードページ855はWindowsコードページ1251と同じ文字セットをサポートしている、といった具合です。MS-Windows版のEmacsは、‘-nw’オプションを指定して起動した場合、表示に現在のコードページを使用します。


脚注

(45)

通常、ディスプレイメモリには特定のコードページが焼き付けられており、他のコードページはCONFIG.SYSなどのシステム設定ファイルを変更し、再起動することでインストールできます。再起動せずにコードページを変更できるサードパーティ製ソフトウェアも存在しますが、ここでは標準のMS-DOSシステムがどのように動作するかについて説明します。

(46)

ISO 8859向けの標準的なEmacsコーディングシステムは、通常DOSのコードページが標準的なISO文字コードと一致しないため、この用途にはあまり適していません。例えば、文字 ‘ç’(セディラ付きの ‘c’)は、標準的なLatin-1文字セットではコード231ですが、対応するDOSコードページ850では、このグリフにコード135が割り当てられています。