Emacs:左边缘的TODO指示器有一个奇怪的副作用 - 删除字符

时间:2010-02-27 19:41:53

标签: emacs

我刚刚阅读了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)

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代替。这不会改变正在显示的字符串。

另一个优点是,由此注释的代码的剪切/粘贴不带标记。

我已更新原始问题中的代码以反映此更改。