この関数は、指定されたテキストをエンコードするためのコーディングシステムを選択し、必要に応じてユーザーに選択を求めます。通常、指定されたテキストは現在のバッファ内の from と to の間にあるテキストです。from が文字列である場合、その文字列がエンコード対象のテキストを指定し、to は無視されます。
指定されたテキストに生バイトが含まれている場合(テキスト表現を参照)、select-safe-coding-system はそのエンコーディングとして raw-text を推奨します。
default-coding-system が nil
でない場合、それが最初に試行されるコーディングシステムとなり、そのシステムでテキストを処理できる場合は、select-safe-coding-system
がそのコーディングシステムを返します。また、コーディングシステムのリストを指定することもでき、その場合は関数がそれらを一つずつ試行します。すべてを試した後、次に現在のバッファの
buffer-file-coding-system の値(undecided でない場合)を試し、続いて buffer-file-coding-system
のデフォルト値、そして最後にユーザーが最も好むコーディングシステムを試行します。このシステムは、コマンド prefer-coding-system を使用してユーザーが設定できます(The GNU Emacs Manual の Recognizing
Coding Systems を参照してください)。
これらの符号化方式のいずれかが、指定されたテキストをすべて安全に符号化できる場合、select-safe-coding-system
はそれを選択して返します。そうでない場合は、すべてのテキストを符号化できる符号化方式の一覧から選択するようユーザーに求め、ユーザーの選択結果を返します。
default-coding-system は、最初の要素が t
で、それ以外の要素がコーディングシステムであるリストである場合もあります。その場合、リスト内のどのコーディングシステムでもテキストを処理できなければ、select-safe-coding-system
は上述の3つの代替案をいずれも試すことなく直ちにユーザーに問い合わせます。これは、リスト内のコーディングシステムのみを確認する際に便利です。
オプション引数 accept-default-p
は、ユーザー操作なしに選択されたコーディングシステムが許容されるかどうかを決定します。これが省略されているか、あるいは nil である場合、このようなサイレント選択は常に許容されます。nil 以外の場合は、関数である必要があります。select-safe-coding-system
は、この関数を、選択されたコーディングシステムのベースとなるコーディングシステムという1つの引数とともに呼び出します。関数が nil を返す場合、select-safe-coding-system
はサイレントに選択されたコーディングシステムを拒否し、ユーザーに候補リストからコーディングシステムを選択するよう求めます。
変数 select-safe-coding-system-accept-default-p が
nil 以外の場合、単一の引数を取る関数である必要があります。これは accept-default-p の代わりに使用され、この引数に指定された値を上書きします。
最終ステップとして、選択したコーディングシステムを返す前に、select-safe-coding-systemはそのコーディングシステムが、領域の内容をファイルから読み出した場合に選択される内容と整合しているかを確認する。(整合していない場合、その後改めて参照・編集されるファイルにおいてデータ破損を招く恐れがある。)通常、select-safe-coding-systemはこの目的のためにbuffer-file-nameをファイルとして使用するが、fileがnilでない場合は、代わりにそのファイルを使用する(これはwrite-regionや同様の関数において関連し得る)。明らかな不整合が検出された場合、select-safe-coding-systemはコーディングシステムを選択する前にユーザーに問い合わせを行う。
この変数は、出力操作のデフォルトのコーディングシステムではテキストを安全にエンコードできない場合に、ユーザーに適切なコーディングシステムを選択させるよう呼び出す関数の名前を指定します。この変数のデフォルト値は
select-safe-coding-system です。write-region のようにファイルにテキストを書き込んだり、process-send-region のように他のプロセスにテキストを送信したりする Emacs
プリミティブは、coding-system-for-write が nil 以外の値にバインドされていない限り、通常はこの変数の値を呼び出します(単一の操作に対するコーディングシステムの指定 を参照)。
ユーザーがコーディングシステムを指定でき、補完機能も備えた2つの関数をご紹介します。Completionを参照してください。
この関数は、ミニバッファを用いてコーディングシステムを読み込み、文字列 prompt でプロンプトを表示し、コーディングシステム名をシンボルとして返します。ユーザーが空の入力をした場合、default でどのコーディングシステムを返すかを指定します。これはシンボルまたは文字列である必要があります。
この関数は、ミニバッファを使用して文字列 prompt でプロンプトを表示しながらコーディングシステムを読み込み、コーディングシステム名をシンボルとして返します。ユーザーがヌル入力を行おうとした場合は、再入力を求めます。コーディングシステムを参照してください。