我有大約20個疊加標記與t
標記不同 - 例如'ov-one
; 'ov-two
; 'ov-three
。我正在尋找一些幫助,請刪除整個疊加列表,而不是每個疊加有不同的mapc
條目。當前的方法是如下:Emacs - 如何刪除疊加(以列表的形式)
(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))
我不會說emacs lisp,但是什麼阻止你編寫相應的映射函數?在非常簡單的Scheme中,它可能看起來像'(define(iter fl)(if(null?l)l(begin(f(car l))(iter f(cdr l))))',你可以推測在emacs lisp中做一些類似的事情 – dfeuer
也就是說,你可能想看看'do'形式,它甚至可能在emacs lisp中可用,儘管我不確定這個.emacs lisp是舊的並且相當有毛病。 – dfeuer