我有大约20个与t
标记不同的叠加层 - 例如'ov-one
; 'ov-two
; 'ov-three
。我正在寻求一些帮助,请删除整个叠加列表,而不是为每个叠加层添加不同的mapc
条目。目前的方法如下:
(defun delete-the-overlays ()
(mapc #'(lambda (o) (when (overlay-get o 'ov-one)
(delete-overlay o))) (overlays-in (window-start) (window-end)))
(mapc #'(lambda (o) (when (overlay-get o 'ov-two)
(delete-overlay o))) (overlays-in (window-start) (window-end)))
(mapc #'(lambda (o) (when (overlay-get o 'ov-three)
(delete-overlay o))) (overlays-in (window-start) (window-end))) )
通过它获得变量列表和mapcar / dolist会更清楚,但我没有找到任何示例。
(defvar list-of-overlays '(ov-one ov-two ov-three))
答案 0 :(得分:2)
完成所需内容的一种简单方法是为每组叠加层添加额外的叠加属性,例如my-overlay
。然后你只需要测试那个属性,因为它们都有它。无需针对不同的属性单独测试每个叠加层。
例如,给定的叠加层将具有属性ov-two
,但它也具有属性my-overlay
。另一个叠加层会比较属性ov-three
,但它也会有属性my-overlay
。
这是一种非常标准的方法,IMO。
请注意,如果您这样做,则不需要另外保留叠加层的单独列表。 (但是没有什么能阻止你这样做。)就像创建列表是记录集合的一种方法一样,将对象的属性设置为记录集合的方式:即具有该属性的对象。
答案 1 :(得分:1)
如何'回合
(defun delete-the-overlays ()
(dolist (o (overlays-in (window-start) (window-end)))
(when (or (overlay-get o 'ov-one)
(overlay-get o 'ov-two)
(overlay-get o 'ov-three))
(delete-overlay o))))