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

34.10.6 単一操作に対するコーディングシステムの指定

変数 coding-system-for-read および/または coding-system-for-write をバインドすることで、特定の操作に対するコーディングシステムを指定できます。

変数: coding-system-for-read

この変数が nil 以外の場合、ファイルの読み込みや同期サブプロセスからの入力に使用するコーディングシステムを指定します。

これは任意の非同期サブプロセスやネットワークストリームにも適用されますが、その仕組みは異なります。サブプロセスの起動時やネットワークストリームのオープン時に指定される coding-system-for-read の値が、そのサブプロセスやネットワークストリームの入力デコード方式を規定します。この値は、上書きされない限り、そのサブプロセスやネットワークストリームで引き続き使用されます。

この変数の正しい使い方は、特定のI/O操作に対して let でバインドすることです。グローバル値は通常 nil であり、これをグローバルに他の値に設定してはいけません。以下に、この変数の正しい使い方の例を示します。

;; Read the file with no character code conversion.
(let ((coding-system-for-read 'no-conversion))
  (insert-file-contents filename))

その値が non-nil である場合、この変数は、file-coding-system-alist、process-coding-system-alist、network-coding-system-alist を含む、入力に使用する符号化方式を指定する他のすべての方法よりも優先されます。

変数: coding-system-for-write

これは coding-system-for-read とほぼ同様に動作しますが、入力ではなく出力に適用される点が異なります。ファイルへの書き込みのほか、サブプロセスやネットワーク接続への出力にも影響します。また、Emacs がサブプロセスを呼び出す際に使用するコマンドライン引数のエンコーディングにも適用されます。

call-process-region や start-process のように、単一の演算が入力と出力の両方を担う場合、coding-system-for-read と coding-system-for-write の両方がそれに影響します。

変数: coding-system-require-warning

coding-system-for-write を nil 以外の値にバインドすると、出力プリミティブが select-safe-coding-system-function で指定された関数を呼び出せなくなります(ユーザー選択のコーディングシステム を参照)。これは、C-x RET c (universal-coding-system-argument) が coding-system-for-write をバインドすることで動作し、Emacs はユーザーの選択に従うべきだからです。Lisp プログラムが coding-system-for-write を、書き出すテキストのエンコードに安全ではない可能性のある値にバインドする場合、coding-system-require-warning を nil 以外の値にバインドすることもできます。これにより、coding-system-for-write が nil 以外であっても、出力プリミティブは select-safe-coding-system-function の値を呼び出すことでエンコードを確認せざるを得なくなります。あるいは、指定されたエンコーディングを使用する前に、明示的に select-safe-coding-system を呼び出してください。

ユーザーオプション: inhibit-eol-conversion

この変数が nil 以外の場合、どのコーディングシステムが指定されていても、行末変換は行われません。これは、すべての Emacs I/O およびサブプロセスプリミティブ、ならびに明示的なエンコーディング・デコーディング関数(明示的なエンコーディングとデコーディング を参照)に適用されます。

操作によっては、単一のコーディングシステムに固定するのではなく、複数のコーディングシステムを使い分ける必要がある場合があります。Emacsでは、コーディングシステムを使用する際の優先順位を指定できます。この順序は、find-coding-systems-region などの関数が返すコーディングシステムのリストのソート順に影響します(Lispにおけるコーディングシステムを参照)。

関数: coding-system-priority-list &optional highestp

この関数は、現在の優先度順にコーディングシステムの一覧を返します。オプション引数 highestp が nil 以外の場合、最優先のコーディングシステムのみを返します。

関数: set-coding-system-priority &rest coding-systems

この関数は、符号化方式の優先度リストの先頭に coding-systems を配置することで、それらの優先度を他のすべてよりも高くします。

マクロ: with-coding-priority coding-systems &rest body

このマクロは、prognと同様にbodyを実行し(prognを参照)、コーディングシステムの優先リストの先頭にcoding-systemsを配置します。coding-systemsは、bodyの実行時に優先するコーディングシステムのリストとする必要があります。