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

42.17.12 画像キャッシュ

Emacsは、より効率的に再表示できるよう、画像をキャッシュします。Emacsが画像を表示する際は、画像キャッシュの中から、目的の仕様に一致する既存の画像仕様 equal を検索します。一致するものが見つかった場合は、その画像がキャッシュから表示されます。そうでない場合は、Emacsは通常通り画像を読み込みます。

関数: image-flush spec &optional frame

この関数は、フレーム frame の画像キャッシュから、指定 spec の画像を削除します。画像の指定は equal を用いて比較されます。frame が nil の場合、選択されたフレームがデフォルトとなります。frame が t の場合、既存のすべてのフレームで画像がフラッシュされます。

Emacsの現在の実装では、各グラフィカル端末がイメージキャッシュを保持しており、これはその端末上のすべてのフレームで共有されています(複数の端末を参照)。したがって、あるフレームでイメージを更新すると、同じ端末上の他のすべてのフレームでもイメージが更新されます。

image-flush の用途の一つに、画像ファイルの変更を Emacs に通知することがあります。画像の指定に :file プロパティが含まれている場合、画像が最初に表示された際に、ファイルの内容に基づいて画像がキャッシュされます。その後、ファイルが変更されても、Emacs は古いバージョンの画像を表示し続けます。image-flush を呼び出すとキャッシュから画像がクリアされ、次にその画像を表示する必要がある際に、Emacs はファイルを再読み込みすることになります。

image-flush のもう一つの用途は、メモリの節約です。Lispプログラムが image-cache-eviction-delay よりもはるかに短い期間に大量の一時イメージを生成する場合(後述)、Emacs による自動処理を待つのではなく、未使用のイメージを自身でフラッシュさせることができます。

関数: clear-image-cache &optional filter animation-filter

この関数は画像キャッシュをクリアし、そこに格納されているすべての画像を削除します。filter が省略されているか、または nil が指定されている場合は、選択されたフレームのキャッシュをクリアします。filter がフレームである場合は、そのフレームのキャッシュをクリアします。filter が t である場合は、すべての画像キャッシュがクリアされます。それ以外の場合、filter はファイル名とみなされ、そのファイル名に関連付けられたすべての画像が、すべての画像キャッシュから削除されます。

この関数は画像アニメーションキャッシュもクリアします。このキャッシュは、Emacsがアニメーション付きのマルチフレーム画像用に保持する別のキャッシュです(マルチフレーム画像を参照)。animation-filter が省略されているか、あるいは nil が指定されている場合は、filter で選択された画像キャッシュに加えて、アニメーションキャッシュもクリアされます。それ以外の場合、この関数は指定 eq から animation-filter までの画像のみをアニメーションキャッシュから削除し、画像キャッシュはクリアしません。これにより、アニメーションが停止した後も画像が表示されている場合に、メモリ使用量を削減できます。

イメージキャッシュ内のイメージが指定された期間表示されなかった場合、Emacsはそのイメージをキャッシュから削除し、関連するメモリを解放します。

変数: image-cache-eviction-delay

この変数は、画像が表示されずにキャッシュに保持される秒数を指定します。画像がこの時間表示されなかった場合、Emacsはその画像を画像キャッシュから削除します。

状況によっては、キャッシュ内の画像数が増えすぎた場合、実際の追い出し遅延がこれより短くなることがあります。

値が nil の場合、明示的にクリアしない限り、Emacs はキャッシュから画像を削除しません。このモードはデバッグに役立ちます。

関数: image-cache-size

この関数は、現在の画像キャッシュの総サイズをバイト単位で返します。例えば、サイズ 200x100、色深度 24ビットの画像の場合、キャッシュサイズは 60000 バイトになります。