Emacsは、より効率的に再表示できるよう、画像をキャッシュします。Emacsが画像を表示する際は、画像キャッシュの中から、目的の仕様に一致する既存の画像仕様
equal
を検索します。一致するものが見つかった場合は、その画像がキャッシュから表示されます。そうでない場合は、Emacsは通常通り画像を読み込みます。
この関数は、フレーム frame の画像キャッシュから、指定 spec の画像を削除します。画像の指定は equal
を用いて比較されます。frame が nil
の場合、選択されたフレームがデフォルトとなります。frame が t の場合、既存のすべてのフレームで画像がフラッシュされます。
Emacsの現在の実装では、各グラフィカル端末がイメージキャッシュを保持しており、これはその端末上のすべてのフレームで共有されています(複数の端末を参照)。したがって、あるフレームでイメージを更新すると、同じ端末上の他のすべてのフレームでもイメージが更新されます。
image-flush の用途の一つに、画像ファイルの変更を Emacs
に通知することがあります。画像の指定に :file
プロパティが含まれている場合、画像が最初に表示された際に、ファイルの内容に基づいて画像がキャッシュされます。その後、ファイルが変更されても、Emacs
は古いバージョンの画像を表示し続けます。image-flush
を呼び出すとキャッシュから画像がクリアされ、次にその画像を表示する必要がある際に、Emacs はファイルを再読み込みすることになります。
image-flush のもう一つの用途は、メモリの節約です。Lispプログラムが image-cache-eviction-delay
よりもはるかに短い期間に大量の一時イメージを生成する場合(後述)、Emacs
による自動処理を待つのではなく、未使用のイメージを自身でフラッシュさせることができます。
この関数は画像キャッシュをクリアし、そこに格納されているすべての画像を削除します。filter
が省略されているか、または nil
が指定されている場合は、選択されたフレームのキャッシュをクリアします。filter
がフレームである場合は、そのフレームのキャッシュをクリアします。filter が t である場合は、すべての画像キャッシュがクリアされます。それ以外の場合、filter
はファイル名とみなされ、そのファイル名に関連付けられたすべての画像が、すべての画像キャッシュから削除されます。
この関数は画像アニメーションキャッシュもクリアします。このキャッシュは、Emacsがアニメーション付きのマルチフレーム画像用に保持する別のキャッシュです(マルチフレーム画像を参照)。animation-filter が省略されているか、あるいは nil が指定されている場合は、filter
で選択された画像キャッシュに加えて、アニメーションキャッシュもクリアされます。それ以外の場合、この関数は指定 eq から animation-filter
までの画像のみをアニメーションキャッシュから削除し、画像キャッシュはクリアしません。これにより、アニメーションが停止した後も画像が表示されている場合に、メモリ使用量を削減できます。
イメージキャッシュ内のイメージが指定された期間表示されなかった場合、Emacsはそのイメージをキャッシュから削除し、関連するメモリを解放します。
この変数は、画像が表示されずにキャッシュに保持される秒数を指定します。画像がこの時間表示されなかった場合、Emacsはその画像を画像キャッシュから削除します。
状況によっては、キャッシュ内の画像数が増えすぎた場合、実際の追い出し遅延がこれより短くなることがあります。
値が nil の場合、明示的にクリアしない限り、Emacs
はキャッシュから画像を削除しません。このモードはデバッグに役立ちます。
この関数は、現在の画像キャッシュの総サイズをバイト単位で返します。例えば、サイズ 200x100、色深度 24ビットの画像の場合、キャッシュサイズは 60000 バイトになります。