Emacs 会对图像进行缓存,以便更高效地重复显示。当 Emacs 显示图像时,会在图像缓存中查找与目标规格 equal 的已有图像定义。若找到匹配项,则从缓存中显示图像;否则 Emacs 按常规方式加载图像。
此函数从框架 frame 的图像缓存中移除规格为 spec 的图像。图像规格通过 equal 比较。若 frame 为 nil,默认使用当前选中框架;若为 t,则在所有现有框架上清除该图像。
在 Emacs 当前实现中,每个图形终端拥有独立的图像缓存,该终端上的所有框架共享此缓存(see 多终端)。因此,在一个框架中刷新图像会同时刷新同一终端上其他框架中的该图像。
image-flush 的用途之一是告知 Emacs 图像文件已发生变更。若图像规格包含 :file 属性,图像首次显示时会基于文件内容缓存。即使后续文件内容改变,Emacs 仍会继续显示旧版本。调用 image-flush 可将该图像从缓存清除,迫使 Emacs 下次需要显示时重新读取文件。
image-flush 的另一用途是节约内存。如果你的 Lisp 程序在远短于 image-cache-eviction-delay(见下文)的时间内创建大量临时图像,你可以选择主动清除未使用的图像,而不必等待 Emacs 自动处理。
此函数清空图像缓存,移除其中所有图像。若 filter 省略或为 nil,清空当前选中框架的缓存;若为框架,则清空该框架的缓存;若为 t,清空所有图像缓存。其他情况下 filter 视为文件名,所有与该文件名关联的图像将从全部缓存中移除。
若图像缓存中的某幅图像在指定时间内未被显示,Emacs 会将其从缓存移除并释放相关内存。
该变量指定图像在未被显示的情况下可保留在缓存中的秒数。当图像未显示时长达到该值时,Emacs 会将其从图像缓存移除。
某些情况下,如果缓存中图像数量过多,实际移除延迟可能短于该值。
若值为 nil,除非显式清空,否则 Emacs 不会从缓存移除图像。该模式适用于调试。
此函数返回当前图像缓存的总大小,单位为字节。例如一幅 200x100、24 位色深的图像,缓存大小为 60000 字节。