我刚刚阅读了Emacs :TODO indicator at left side,并尝试了一下。这看起来很有趣。小指示符三角形出现,但我得到一个奇怪的副作用:文本本身正在改变。正在删除字符。
之前:
alt text http://i50.tinypic.com/25ge83s.jpg
之后:
alt text http://i46.tinypic.com/2qn4e94.jpg
模式行确实表明在运行annotate-todo
后缓冲区已被更改。
这解释了什么?
(我在Windows上使用emacs 22.2.1)
答案 0 :(得分:5)
(defun annotate-todo ()
"put fringe marker on TODO: lines in the curent buffer"
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "TODO:" nil t)
(let ((overlay (make-overlay (- (point) 5) (point))))
(overlay-put overlay 'before-string (propertize (format "A")
'display '(left-fringe right-triangle)))))))
第一个解决方案使用'display
文本属性,该属性更改指定文本的显示方式,在这种情况下,{em>替换由left fringe中的三角形。我需要做的是使用'before-string
overlay代替。这不会改变正在显示的字符串。
另一个优点是,由此注释的代码的剪切/粘贴不带标记。
我已更新原始问题中的代码以反映此更改。