[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

C. EmacsとMS-DOS

ここでは、(『MS-DOG』とも呼ばれる)MS-DOS『オペレーティングシステム』で 稼働するEmacsの癖について簡単にふれます。 MS-DOS用に作成したEmacsのバイナリは、 Windows 3.x、Windows NT、Windows 9X、OS-2上で DOSアプリケーションとしても動作します。 MS-DOS用に作成したEmacsを使っている限り、 本章の情報はこれらすべてのシステムにあてはまります。

Windows NTやWindows 9Xに専用のEmacsを作ることも可能です。 その場合には、本章のほとんどは関係ありません。 長いファイル名、複数のフレーム、スクロールバー、マウスメニュー、 サブプロセスの利用を含めて、本書の他の部分で説明した動作に 近い動作をします。 しかし、テキストファイルとバイナリファイルに関する節は適用できます。 また、本章の最後の2つの節は、Windows NTと9Xだけに適用できます。


C.1 MS-DOSのキーボードとマウス

PCのキーボードの左側のALTキーは、METAキーに割り当てられます。 SUPERキーとHYPERキーのエミュレーションには、選択肢が2つあります。 変数dos-hyper-keydos-super-keyを1にすれば、 右側のCTRLキーを選びます。 変数dos-hyper-keydos-super-keyを2にすれば、 右側のALTキーを選びます。 dos-super-keydos-hyper-keyのいずれも1でなければ、 デフォルトで右側のALTキーもMETAに割り当てられます。 しかし、MS-DOSの国際化キーボード用プログラム `KEYB.COM'をインストールしてある場合は、 右側のALTMETAには割り当てません。 というのは、米国配列のキーボードでない場合、 右側のALT~@として使われるからです。 この場合には、左側のALTのみをMETAとして使えます。

変数dos-keypad-modeは、 数字キーパッド上のキーが返すキーコードを制御する変数です。 ファイル`_emacs'につぎの行を入れておけば、 ENTERキーがC-jとして働くように定義できます。

 
;; 数字キーパッドのEnterキーをC-jとして動作させる。
(define-key function-key-map [kp-enter] [?\C-j])

(ほとんどのワークステーションでの呼称から) EmacsでDELと呼ばれるキーは、PCではBS(バックスペース)です。 このため、PC特有の端末初期化においては、 BSキーはDELとして動作するようにしています。 同じ理由から、DELキーは C-dとして動作するようにしてあります。

MS-DOS用のEmacsでは、 C-BREAKC-gのような中断文字として認識します。 これは、Emacsが入力を読もうとしないと C-gが打鍵されたことを検出できないからです。 そのため、動作中のコマンドを止めるためにC-gを使えません (see section 中断とアボート)。 対照的に、C-BREAKは (他のシステムでのC-gのように)打鍵するとすぐに検出されるので、 動作中のコマンドを停止したり緊急脱出したりするために使えます (see section 緊急脱出)。

MS-DOS用Emacsは、(デフォルトの端末だけで)マウスを使えます。 メニューやメニューバー(see section メニューバー)の利用を含めて、 マウスコマンドはドキュメントどおりに動作します。 MS-DOS用Emacsではスクロールバーは使えません。 PCのマウスには、通常、2つのボタンしかありません。 これらはMouse-1Mouse-2として動作しますが、 2つのボタンを同時に押せばMouse-3として動作します。

MS-DOS用EmacsがWindows上で動作している場合には、 クリップボードの操作を利用できます。 キルリングにテキストを置いたり、 キルリングからテキストをヤンクしたりするコマンドでは、 Xウィンドウシステムの場合と同様に、 まずWindowsのクリップボードを調べます(see section 編集用マウスコマンド)。 Windows上のMS-DOS用Emacsは、 一次セレクションとカットバッファのみを利用し、 二次セレクションはつねに空です。

Windowsで実装されているクリップボードの参照方法のため、 クリップボードに置けるテキストの長さは、 Emacsが利用できるDOSの空きメモリ量に制限されます。 通常、620Kバイトまでのテキストをクリップボードに置けますが、 この上限はシステムの設定に依存し、 他のプログラムのサブプロセスとしてEmacsを実行しているときには少なくなります。 削除したテキストがクリップボードに入りきらなければ、 Emacsはその旨のメッセージを出力して、 テキストをクリップボードへ置きません。

Windowsのクリップボードにはナル文字を入れられません。 キルしたテキストにナル文字が含まれる場合には、 Emacsはそのようなテキストをクリップボードへ置きません。 さらに、エコー領域には、その旨、メッセージを表示します。

変数dos-display-scancodesの値がnil以外のときには、 キーを打つたびに、Emacsは各キーのASCII(コードの)値と キーボードスキャンコードを出力します。 この機能は、デバッグ用のコマンドview-lossageを補佐します。


C.2 MS-DOSの画面

MS-DOSの画面では、ボールド体(太字体)やイタリック体(斜体)などの フォントの変種を使えませんが、 個々に前景色と背景色を指定できるフェイスを複数個使えます。 したがって、関連するフェイスに異なる表示色を定義すれば、 (font-lock、エンリッチ(enriched)モードなどの) フォントを用いるEmacsのパッケージの全機能を利用できます。 コマンドlist-colors-display(see section フレームパラメータの設定)と コマンドlist-faces-display(see section 複数タイプフェイスの利用)を使えば、 利用可能なフェイスと表示色、それらの見え方を知ることができます。

本章のMS-DOSでの国際化対応では、 DOSの画面に組み込まれたフォントでは表せない 字形や文字をEmacsがどのように表示するかを説明します。

MS-DOSでも複数のフレーム(see section フレームとXウィンドウシステム)を利用できます。 しかし、それらはすべて重なっているので、 一度には1つのフレームしか見ることができません。 見えている1つのフレームが画面全体を覆います。 MS-WindowsのDOSボックスでEmacsを実行しているときには、 見えているフレームを画面全体より小さくはできますが、 それでも、一度に1つのフレームしか表示できません。

コマンドmode4350は43行表示と50行表示を切り替えますが、 ハードウェアに依存します。 コマンドmode25は、デフォルトの80x25の画面サイズに切り替えます。

デフォルトでは、Emacsは80桁で、25行、28行、35行、40行、43行、50行の 画面サイズしか知りません。 しかし、ビデオアダプタに別の画面サイズに切り替える特別な ビデオモードがあれば、Emacsでもそれらを利用できます。 Emacsにフレームサイズをnm桁に切り替える指示をすると、 screen-dimensions-nxmという変数があるかどうか調べます。 変数があれば、その値(整数である必要がある)を 切り替え先のビデオモードとして使います。 (Emacsは、 screen-dimensions-nxmの値をレジスタALに入れ、 BIOSの関数Set Video Modeを呼び出し、ビデオモードを切り替えます。) たとえば、ビデオモードを85にすると66x80の画面に切り替わるアダプタがあるとします。 `_emacs'につぎの行を加えれば、 Emacsでこの画面サイズを使えるようになります。

 
(setq screen-dimensions-66x80 85)

MS-DOS用Emacsでは、 フレームサイズは利用可能な特定のサイズにしか設定できませんから、 フレームサイズの変更要求すべてに答えられるわけではありません。 使えないサイズが要求されると、 Emacsは指定されたサイズのつぎに大きいサイズを選びます。 たとえば、36x80のフレームを要求すると、かわりに、40x80になります。

変数screen-dimensions-nxmは、 指定サイズに正確に一致するときだけ使われます。 利用可能なつぎに大きなサイズの候補を探すときには無視します。 上述の例では、VGAで38x80を使えて、 変数screen-dimensions-38x80に適切な値を定義したとしても、 36x80のフレームを要求した場合には、40x80の画面になってしまいます。 このような場合に38x80のサイズにしたければ、 変数screen-dimensions-36x80にも screen-dimensions-38x80と同じビデオモードの値を入れます。

MS-DOSでは、フレームサイズを変更すると、 他のすべてのフレームのサイズも変更してしまいます。


C.3 MS-DOSにおけるファイル名

他のシステムではファイル名の構成要素の区切りにはスラッシュを使いますが、 MS-DOSでは、普通、バックスラッシュ`\'を使います。 MS-DOS用Emacsでは、スラッシュもバックスラッシュも使えて、 さらに、ファイル名に含まれるドライブ名も理解します。

MS-DOSでは、ファイル名に大文字小文字の区別はなく 8文字に制限されますが、ピリオドとさらに3文字を付加できます。 Emacsは他のシステム向けのファイル名を扱ううえで、 これらの制限を熟知しています。 たとえば、ドット`.'で始まるファイル名は、 MS-DOSでは正しくないので、Emacsはそれを透過的に下線`_'に変換します。 したがって、デフォルトの初期化ファイル(see section 初期化ファイル`~/.emacs')は、 MS-DOSでは`_emacs'と呼ばれます。 ピリオドの前後の文字数制限を越えた部分は、 通常、MS-DOSが無視します。 したがって、ファイル`LongFileName.EvenLongerExtension'を訪れると、 実際には`longfile.eve'を訪れることになりますが、 モード行にはもとの長い名前が表示されます。 これ以外には、MS-DOSにおいて正しいファイル名を指定するのは、 ユーザーの責任です。 上述した透過的な変換は、Emacsに組み込まれたファイル名にのみに作用します。

MS-DOSでの上述のファイル名の制限のために、 もとのファイル名の文字をいくつか捨てずに バックアップファイル(see section 単一バックアップファイルと番号付きバックアップファイル)の名前を構成することは不可能です。 たとえば、バックアップを1つしか使っていなくても、 `docs.txt'のバックアップファイルの名前は `docs.tx~'となります。

Windows 9x上のDOSアプリケーションとしてEmacsを実行する場合には、 長いファイル名の使用を有効にできます。 そうすると、Emacsは、ファイル名を切り詰めたり小文字に変換したりせずに、 指定したとおりのファイル名をそのまま使います。 長いファイル名の使用を有効にするには、 Emacsを起動するまえに、環境変数LFNに`y'と設定します。 残念ながら、Windows NTではDOSプログラムから長いファイル名を使えませんので、 MS-DOS用Emacsからは短い8+3の別名しか見えません。

MS-DOSにはホームディレクトリという概念がないので、 MS-DOS用Emacsでは、Emacsをインストールしてあるディレクトリを 環境変数HOMEの値であるということにします。 つまり、Emacsのバイナリ`emacs.exe'が ディレクトリ`c:/utils/emacs/bin'に置いてあるとすれば、 Emacsは、環境変数HOMEが`c:/utils/emacs'と 設定されているかのようにふるまいます。 特に、ここが初期化ファイル`_emacs'を探す場所となります。 このことを心に留めておけば、UNIXでのように、 ホームディレクトリの別名としてファイル名に`~'を使えます。 Emacsを起動するまえに環境変数HOMEを設定することもでき、 その場合には、上述のデフォルトのふるまいに優先します。

DJGPPのエミュレーションライブラリの機能では 入出力装置はディレクトリ`/dev'に置かれていると仮定するので、 MS-DOS用Emacsはディレクトリ名`/dev'を特別扱いします。 いかなるディスク上でも`/dev'というディレクトリ名を使わないように 忠告しておきます。


C.4 テキストファイルとバイナリファイル

GNU Emacsでは、テキスト行の区切りとして改行文字を使います。 これは、GNU Emacsが開発されたUNIXでの習慣であり、 UNIXをモデルとしたGNUシステムでの習慣でもあります。

MS-DOSとMS-Windowsでは、テキスト行の区切りとして、 通常、復帰・行送りの2文字列を使います。 (行送りは改行と同じ文字です。) したがって、Emacs において典型的なファイルを便利に編集するには、 これらの行末(end-of-line、EOL)文字列を変換する必要があります。 Emacsは通常つぎのようにします。 ファイルを読み込むときには復帰・行送りを改行に変換し、 ファイルを書き出すときには改行を復帰・行送りに変換します。 国際文字コードの変換を扱う機構でもこの変換を行います (see section コーディングシステム)。

ほとんどのファイルにおけるこの特別な書式変換のために、 Emacsが報告する文字位置(see section カーソル位置の情報)は、 オペレーティングシステム上でのファイルサイズ情報と食い違います。

内容がテキストではないある種のファイルは、変換すべきではありません。 したがって、MS-DOS用Emacsは、 ある種のファイルをバイナリファイルとして区別して、 そのまま読み書きします。 (この区別はMS-DOSのものではなく、Emacsがもたらすものです。) これらには、実行プログラム、圧縮したアーカイブなどが含まれます。 Emacsはファイル名を用いて、バイナリファイルとして扱うべきかどうか決定します。 変数file-name-buffer-file-type-alistには、 バイナリファイルを表すファイル名のパターンを定義しておきます。 file-name-buffer-file-type-alistに指定したバイナリファイルの パターンにファイル名が一致すると、 Emacsは行末変換だけでなくすべての符号変換を抑制する コーディングシステム(see section コーディングシステムno-conversionを使います。

さらに、Emacsは、ファイルの内容から行区切りとして 復帰・行送りでなく改行を用いていると判断すると、 ファイルの読み書きにおいて変換を行いません。 したがって、特に努力しなくても、 UNIXやGNUシステムからのファイルをMS-DOS上で読んだり編集でき、 それらのファイルの行末はUNIX流の行末のままです。

コマンドfind-file-textやコマンドfind-file-binaryを用いると、 ファイルをテキストとして扱うか バイナリとして扱うかを指定して訪れることができます。 行末変換はコーディングシステムの一般的な変換機構の一部なので、 コーディングシステムを指定するコマンド(see section コーディングシステムの指定)によって ファイルをテキストとして扱うかバイナリとして扱うかを指定することもできます。 たとえば、C-x RET c undecided-unix RET C-x C-f foobar.txt とすれば、行末変換をせずにファイル`foobar.txt'を訪れることができます。

モード行にはカレントバッファで行末変換を行ったかどうか表示されます。 モード行の始めのほうにあるコーディングシステムを表す文字のうしろには、 通常、コロンが表示されます。 バッファでMS-DOSの行末変換を使っている場合には、 この文字はバックスラッシュに変わります。

NFSやSambaを用いてUNIXやGNUシステムを使った コンピュータ上のファイルシステムを参照するとき、 これらのファイルシステム上のどのファイルに対しては、 新規作成時でなくても、Emacsは行末変換を行うべきではありません。 こうするためには、 該当するファイルシステムを無変換の ファイルシステムと指定するために、 関数add-untranslated-filesystemを呼びます。 この関数は、ファイルシステム名である引数を1つとりますが、 これにはドライブ名やディレクトリ名を含めることもできます。 たとえば、

 
(add-untranslated-filesystem "Z:")

は、ドライブZを無変換のファイルシステムとして指定しますし、

 
(add-untranslated-filesystem "Z:\\foo")

は、ドライブZ上のディレクトリ`\foo'を 無変換のファイルシステムとして指定します。

個人の`_emacs'ファイルや サイトの全ユーザーに便利なように`site-start.el'の中で、 add-untranslated-filesystemを使うことが多いでしょう。

add-untranslated-filesystemの効果を取り消すには、 関数remote-untranslated-filesystemを使います。 この関数は、まえにadd-untranslated-filesystemに使ったのと 同じ文字列を引数としてとります。


C.5 印刷とMS-DOS

lpr-buffer(see section 印刷)や ps-print-buffer(see section Postscriptの印刷)のような印刷コマンドは、 UNIX流のプログラムlprがない場合には、 プリンタポートに直接出力を送ればMS-DOSやMS-Windowsでも動作します。 このふるまいは、UNIX上のlprでの印刷 (see section 印刷、see section Postscriptの印刷を制御する変数) を制御する変数と同じ変数で制御されますが、 MS-DOSやMS-Windows上でのこれらの変数のデフォルト値は、 UNIX上での値と同じではありません。

DOS流の通常の印刷のように、ローカルのプリンタを使いたい場合には、 Lisp変数lpr-command""(デフォルト値)を設定し、 printer-nameにはプリンタポートの名前を設定します。 たとえば、ローカルのプリンタポートならば(デフォルト値の)"PRN""LPT2"、シリアルプリンタならば"COM1"です。 printer-nameにはファイル名も設定できます。 その場合には、『印刷』結果は、そのファイルに追加書きされます。 printer-name"NUL"を設定すると、 印刷結果は(システムの空デバイスに送られて)黙って捨てられます。

MS-Windowsでは、Windowsのネットワークソフトウェアをインストールしてあれば、 printer-nameに、他のマシンとの共用プリンタのUNC共用名 (たとえば"//joes_pc/hp4si")を設定すれば、 そのプリンタを利用することもできます。 (スラッシュでもバックスラッシュでもかまいません。) 共用プリンタの名前を調べるには、 DOSコマンドプロンプトで`net view'を実行してサーバー一覧を取得してから、 `net view server-name'を実行して サーバーが共有するプリンタ(とディレクトリ)の名前を調べます。

printer-nameにファイル名を設定するときには、 絶対ファイル名を使うのが最良です。 Emacsは、カレントバッファのデフォルトディレクトリに応じて 作業ディレクトリを変更します。 printer-nameのファイル名が相対的であると、 印刷を行ったバッファのディレクトリごとに、 そのような名前のファイルができてしまいます。

コマンドprint-bufferprint-regionは、 各印刷ページに見出しを付けるために、 prプログラムを呼び出したり、 lprプログラムに対して特別なフラグを使います。 MS-DOSやMS-Windowsには、通常、これらのコマンドはありませんから、 デフォルトでは、変数lpr-headers-switchesは、 ページ見出しを付ける要求を無視するように設定してあります。 したがって、print-bufferprint-regionは、 それぞれ、lpr-bufferlpr-regionと同じ出力になります。 (たとえばGNU Textutilsなどの)適当なprプログラムがあるならば、 lpr-headers-switchesnilを設定します。 すると、Emacsはページ見出しを付けるためにprを呼び出し、 printer-nameの指定に従って出力結果を印刷します。

lprと同じ動作をするlprがある場合には、 変数lpr-command"lpr"と設定できます。 すると、他のシステムと同様に、Emacsはlprを使って印刷します。 (プログラム名がlprでない場合には、 lpr-commandにはプログラムを探す場所を設定する。) lpr-command""以外の場合には、 変数lpr-switchesには標準的な意味があります。 変数printer-nameの値が文字列である場合には、 UNIXの場合と同様に、lprのオプション-Pの値として使われます。

同様の一連の変数、ps-lpr-commandps-lpr-switchesps-printer-name(see section Postscriptの印刷を制御する変数)は、 PostScriptファイルの印刷方法を定義します。 これらの変数は、上に述べた非PostScript印刷用の対応する変数と 同じように使われます。 つまり、ps-printer-nameの値は、 非PostScript印刷でのprinter-nameの使い方と同様に、 PostScript出力の送り先の装置(やファイル)の名前として使われます。 (つまり、別々の2つのポートに2台のプリンタを接続してあり、 その一方がPostScriptプリンタの場合、異なる2組の変数群を使える。)

変数ps-lpr-commandのデフォルト値は""であり、 PostScript出力をps-printer-nameで指定するプリンタポートへ 送ることを意味します。 しかし、ps-lpr-commandには、PostScriptファイルを受理する プログラムの名前を設定してもかまいません。 つまり、非PostScriptプリンタがある場合、 この変数に(Ghostscriptなどの)PostScriptインタープリタプログラムの 名前を設定できます。 インタープリタプログラムに渡す必要があるオプションは、 ps-lpr-switchesを用いて指定します。 (ps-printer-nameの値が文字列の場合、その値は、 オプション-Pの値として、オプション列に付加される。 これは、lprを使う場合にだけ有用であろう。 というのは、インタープリタを使う場合、典型的には、 ps-printer-nameには文字列以外を設定して無視させる。)

たとえば、ポート`LPT2'に接続したEpsonプリンタに印刷するために Ghostscriptを使うには、つぎの内容を個人のファイル`_emacs'に入れます。

 
(setq ps-printer-name t)  ; Ghostscriptは -P を理解しない
(setq ps-lpr-command "c:/gs/gs386")
(setq ps-lpr-switches '("-q" "-dNOPAUSE"
			"-sDEVICE=epson"
			"-r240x72"
			"-sOutputFile=LPT2"
			"-Ic:/gs"))

(この例では、 ディレクトリ`"c:/gs"'にGhostscriptをインストールしてあると仮定。)

MS-DOSとMS-Windowsでは、後方互換のために、 dos-printer(やdos-ps-printer)の値を設定してあると、 printer-name(やps-printer-name)の値を上書きします。


C.6 MS-DOSでの国際化対応

MS-DOS上のEmacsは、UNIXや他のプラットフォーム上と同じ 国際化文字集合を扱えます(see section 国際化文字集合の使い方)。 これには、異なる文字集合のあいだの変換を行うコーディングシステムも含みます。 しかしながら、MS-DOS/MS-WindowsとUNIXとの非互換性に起因する DOSに固有な特色があり、ユーザーは理解しておく必要があります。 本節では、これらの特色について述べます。

M-x dos-codepage-setup

Emacs画面とコーディングシステムを カレントDOSコードページに適したものに設定する。

M-x codepage-setup

特定のDOSコードページ用のコーディングシステムを作成する。

MS-DOSは、一度には256文字から成る単一の文字集合を扱えるように 設計されていますが、さまざまな文字集合から選択できます。 代替文字集合は、DOSコードページと呼ばれます。 各コードページは、128個の全ASCII文字を含みますが、 残りの128文字(コード128〜255)は、コードページごとに異なります。 各DOSコードページは、850や862などの3桁の数字で識別します。

同時に複数のフォントを使えるXウィンドウに比べると、 MS-DOSでは1つのセッションでは複数のコードページを使えません。 MS-DOSはシステムブート時に単一のコードページをロードします。 コードページを変更するにはMS-DOSをリブートする必要があります (65)。 MS-Windowsなどの他のシステムでDOSプログラムを実行する場合にも、 同様の制約が課せられます。

MS-DOS上でオプション`--unibyte' (see section 初期化オプション)を指定して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とすると、このようなコーディングシステムの 名前はcpnnnです。 (66)

すべてのcpnnnコーディングシステムは、 モード行の表示に(『DOS』の)文字`D'を使います。 端末コーディングシステムとファイル入出力用のデフォルトの コーディングシステムは、起動時に、 正しくcpnnnコーディングシステムに設定されますから、 MS-DOSでは、モード行は普通`-DD\-'で始まります。 See section モード行。 極東用DOS端末は、cpnnnコーディングシステムを使用せず、 そのため、初期のモード行はUNIXのようになります。

コードページ番号は、使用する文字群を指定しますから、 Emacsは、その文字群用の言語環境を選択するために set-language-environmentを自動的に実行します (see section 言語環境)。

バッファ内に異なる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 section カーソル位置の情報

デフォルトでは、Emacsはカレントコードページを扱えるコーディングシステムを 定義します。 (他国のDOSマシンで書いたファイルを訪問するなどの) 他のコードページ用のコーディングシステムを定義するには、 コマンドM-x codepage-setupを使います。 これは、3桁のコードページ番号を問い合わせてきますが、補完を使えます。 そして、指定したコードページ用のコーディングシステムを作成します。 これで、新たなコーディングシステムを使ってファイルを読み書きできますが、 このコーディングシステムを使うには、 ファイルコマンドで明示する必要があります(see section コーディングシステムの指定)。

これらのコーディングシステムは、 DOSコードページで符号化したファイルを 他のオペレーティングシステム上のEmacsで訪問する場合にも利用できます。


C.7 サブプロセス(MS-DOS)

MS-DOSはシングルプロセスの『オペレーティングシステム』なので、 非同期なサブプロセスは利用できません。 特に、シェル(shell)モードやその派生モードは動きません。 綴りの修正やGUDなどの非同期のサブプロセスを用いたEmacsの機能のほとんどは、 MS-DOSでは動きません。 疑うならば試してみてください。 動作不能なコマンドは、「非同期サブプロセスを使えない」旨の エラーメッセージを出力します。

MS-DOS用Emacsでも、 M-x compileによるコンパイル、 M-x grepによるファイルの探索、 M-x diffによるファイルの比較は動作しますが、 これらは下位プロセスを同期して走らせます。 つまり、下位プロセスが終了するまではいっさい編集はできません。

対照的に、Windows専用にコンパイルしたEmacsでは、 非同期プロセスを使えます。 See section サブプロセス(Windows 95、NT)

lpr-buffer(see section 印刷)や ps-print-buffer(see section Postscriptの印刷)のような印刷コマンドは、 MS-DOSではプリンタポートの1つに出力を送ることで動作します。 See section 印刷とMS-DOS

MS-DOSで同期的にサブプロセスを動かす場合には、 プログラムが確実に終了し、しかも、キーボードからまったく入力しないことを 確認してください。 MS-DOSにはプロセスを終了させる一般的な方法がないので、 プログラムがみずから終了できない場合には、 それを終了させることができなくなります。 このような場合、 C-cC-BREAKを押すと助かる場合もあります。

MS-DOSでは、他のマシンのファイルを参照することはできません。 MS-DOSにネットワーク機能が組み込まれていなければ、 メイルの送信、Webの閲覧、リモートログインなどの ネットワーク向けのコマンドも使えません。

MS-DOSでのdiredは、 他のシステムではシステムのlsコマンドを使う場面で パッケージls-lispを使います。 したがって、MS-DOSのdiredでは 変数dired-listing-switchesに設定できるオプションは限られます。 使えるオプションは、 `-A'、`-a'、`-c'、`-i'、`-r'、`-S'、 `-s'、`-t'、`-u'です。


C.8 サブプロセス(Windows 95、NT)

(DOS版と対比して)Windows専用にコンパイルしたEmacsでは、 非同期のサブプロセスを完全に使えます。 Windows版では、32ビットのWindowsアプリケーションを実行している限りは、 同期であれ非同期であれサブプロセスはうまく動作します。 しかし、サブプロセスでDOSアプリケーションを実行すると、 アプリケーションの実行に問題を生じたり実行できなかったりします。 さらに、2つのDOSアプリケーションを同時に2つのサブプロセスで実行すると、 システムをリブートしなければならなくなります。

Windows 95の標準のコマンドインタープリタ (および、ほとんどのコマンド行ユーティリティ)はDOSアプリケーションなので、 この種のシステムを使う場合には上記の問題は重要になります。 しかし、これに関してわれわれにできることは何もなく、 Microsoftだけが修正できるのです。

DOSアプリケーションのサブプロセスを1つだけ実行するならば、 『行儀がよく』て、しかも、画面を直接操作するなどの 非標準的な動作をしない限りは、サブプロセスは予想どおりに動作するはずです。 CPUモニタ(監視)アプリケーションを使うと、 DOSアプリケーションが停止しているときでさえも、 マシンは100%ビジーになりますが、 これはCPUモニタがプロセッサの負荷を調べる方法に起因します。

別のサブプロセスでDOSアプリケーションを実行する場合には、 まえもってDOSアプリケーションを終了しておく必要があります。 Emacsは、DOSのサブプロセスに割り込んだり停止させることができません。 このようなサブプロセスを終了する唯一の方法は、 そのプログラムに終了を指示するコマンドを与えることです。

別々のサブプロセスにおいて2つのDOSアプリケーションを同時に実行しようとすると、 一方あるいは両方が非同期であるとしても、 2番目に起動したものは最初のものが終了するまで休止してしまいます。

最初のサブプロセスを操作できて終了を指示できるならば、 2番目のサブプロセスは正常に実行を継続するはずです。 しかし、2番目が同期サブプロセスであれば、 最初のサブプロセスが終了するまではEmacs自体が固まってしまいます。 ユーザー入力なしに終了できない場合には、 Windows 95を使っている限りリブート以外の選択はありません。 Windows NTであれば、プロセスを調べるアプリケーションを使って、 適当なntvdmを終了させます(するとDOSの2つのサブプロセスも終了します)。

このような状況でWindows 95をリブートすることが必要になったときには、 Startメニューの中のShutdownコマンドを使ってはいけません。 たいていの場合、システムが固まってしまいます。 かわりに、CTL-ALT-DELを打鍵してShutdownを選びます。 処理に数分かかる場合もありますが、多くの場合、機能してくれます。


C.9 Windowsのシステムメニューの利用

Windows専用にコンパイルしたEmacsでは、 ALTキーを押してWindowsのメニューを立ち上げる機能を切ってあります。 これは、EmacsではALTMETAの働きをするからです。 Emacsを利用しているときには、 ユーザーはしばしばいったんMETAキーを押してから何もせずに放します。 この動作でWindowsのメニューが立ち上がってしまうと、 以降のコマンドの意味が変ってしまいます。 多くのユーザーにはこれでは邪魔でしょう。

w32-pass-alt-to-systemnil以外の値を設定すれば、 ALTキーを押したときの処理はWindowsのデフォルトに戻ります。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.