本節では、特定のファイルや特定のサブプログラムを実行するときの デフォルトのコーディングシステムを指定する変数と、 それらを使った入出力操作を行う関数について述べます。
これらの変数の目的は、読者が望むデフォルトをいったんこれらに設定しておけば、
再度変更する必要がないようにすることです。
Lispプログラムの特定の操作向けに特定のコーディングシステムを指定するには、
これらの変数を変更しないでください。
かわりに、coding-system-for-read
やcoding-system-for-write
を
使って上書きします(see Specifying Coding Systems)。
この変数は、特定のファイルの読み書きに使用する コーディングシステムを指定する連想リストである。 各要素は
(
pattern.
coding)
の形であり、 patternは特定のファイル名に一致する正規表現である。 patternに一致するファイル名に当該要素を適用する。要素のcdr、codingはコーディングシステムであるか、 2つのコーディングシステムを収めたコンスセルであるか、 関数シンボルであること。 codingがコーディングシステムであると、 ファイルの読み書きの両方にそのコーディングシステムを使う。 codingが2つのコーディングシステムを収めたコンスセルであると、 そのcarは復号化に使うコーディングシステムを指定し、 そのcdrは符号化に使うコーディングシステムを指定する。
codingが関数シンボルであると、 その関数は、コーディングシステムか、 2つのコーディングシステムを収めたコンスセルを返すこと。 その値は上に述べたように使われる。
この変数は、サブプロセスで実行しているプログラムに依存して サブプロセスに使うコーディングシステムを指定する連想リストである。
file-coding-system-alist
と同様に働くが、 patternはサブプロセスを始めるために用いたプログラム名に対して 一致を取る点が異なる。 この連想リストに指定したコーディングシステムは、 サブプロセスとの入出力に使用するコーディングシステムの初期化に用いれるが、set-process-coding-system
を使って、 あとで別のコーディングシステムを指定できる。
警告:
データからコーディングシステムを決定するundecided
のような
コーディングシステムは、非同期サブプロセスの出力に対しては
完全に信頼性のある動作はできない。
これは、Emacsが非同期サブプロセスの出力が
到着するたびに一塊で処理するからである。
コーディングシステムが文字コード変換や行末変換を未指定にしていると、
Emacsは1つの塊から正しい変換を検出しようと試みるが、
これがつねに動作するとは限らない。
したがって、非同期サブプロセスでは、可能な限り
文字コード変換と行末変換の両方を指定したコーディングシステムを使います。
つまり、undecided
やlatin-1
などではなく、
latin-1-unix
のようなものを使います。
この変数は、ネットワークストリームに使用するコーディングシステムを 指定する連想リストである。
file-coding-system-alist
と同様に働くが、 要素内のpatternはポート番号か正規表現である点が異なる。 それが正規表現であると、ネットワークストリームを開くために 使用したネットワークサービス名に対して一致をとる。
この変数は、なにも指定されていないサブプロセス(やネットワークストリーム) の入出力に使用するコーディングシステムを指定する。
値は、
(
input-coding.
output-coding)
の形の コンスセルであること。 ここで、input-codingはサブプロセスからの入力に適用され、 output-codingはそれへの出力に適用される。
この関数は、argumentsを指定してoperationを行うときに (デフォルトで)使用されるコーディングシステムを返す。 その値はつぎの形である。
(decoding-system encoding-system)第1要素decoding-systemは (operationが復号化を行う場合には)復号化に用いる コーディングシステムであり、 encoding-systemは (operationが符号化を行う場合には)符号化に用いる コーディングシステムである。
引数operationは、Emacsの入出力基本関数の
insert-file-contents
、write-region
、call-process
、call-process-region
、start-process
、open-network-stream
のいずれかであること。残りの引数は、これらの入出力基本関数に指定するであろう引数と同じであること。 基本関数に依存して、引数の1つを対象として選ぶ。 たとえば、operationがファイル入出力を行う場合、 ファイル名を指定する引数が対象である。 サブプロセスの基本関数では、プロセス名が対象である。
open-network-stream
では、サービス名やポート番号が対象である。この関数は、operationに応じて当該対象を
file-coding-system-alist
やprocess-coding-system-alist
やnetwork-coding-system-alist
で探す。 see Default Coding Systems。