win*_*TTr 2 emacs loops overlay elisp
我不确定这是否只是我的代码的一个简单错误.但我无法弄清楚问题是什么,所以请指出来.
aaaaa
(progn
(setq ol-list nil)
(dolist (pos '(1 2 3 4))
(let ( (ol (make-overlay pos (1+ pos) (current-buffer))) )
(overlay-put ol 'display "X")
(print ol)
(setq ol-list
(nconc ol-list (list ol)))
);; let
) ;; dolist
)
(progn
(dolist (ol ol-list)
(delete-overlay ol))
(setq ol-list nil) )
Run Code Online (Sandbox Code Playgroud)
将上面的代码片段放在"lisp-mode"缓冲区的开头,并将eval(Cx Ce)放在每个progn部分.
在我的emacs上,第一个代码部分将"aaaaa"变为"Xa".但我认为结果应该是"XXXXa".那问题出在哪里?
为了替换显示规范,"具有该属性的文本"表示具有与其显示属性相同的Lisp对象的所有连续字符; 这些字符将替换为单个单元.
手册继续解释如何做你想做的事.您需要为每个叠加分配不同的字符串.像这样的东西:
(overlay-put ol 'display (concat "X"))
Run Code Online (Sandbox Code Playgroud)
我也有一些建议让你的代码更像Lisp:
(require 'cl)
(setq ol-list
(loop for pos from 1 upto 4
collect (let ((ol (make-overlay pos (1+ pos))))
(overlay-put ol 'display (concat "X"))
ol)))
(mapcar #'delete-overlay ol-list)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |