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

Che*_*eso 5 emacs

我刚刚在左侧阅读了Emacs:TODO指标,并试了一下.这看起来很有趣.小指示符三角形出现,但我得到一个奇怪的副作用:文本本身正在改变.正在删除字符.

之前:

替代文字http://i50.tinypic.com/25ge83s.jpg

后:

替代文字http://i46.tinypic.com/2qn4e94.jpg

模式行确实表明缓冲区在运行后已被更改annotate-todo.这解释了什么?

(我在Windows上使用emacs 22.2.1)

Tre*_*son 6

啊......我早先看到了我的方式错误.这是一个新版本.

(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)))))))
Run Code Online (Sandbox Code Playgroud)

第一个解决方案使用'displaytext属性,它更改指定文本的显示方式,在这种情况下,它被左边缘的三角形替换.我需要做的是改为使用叠加层.这不会更改显示的字符串.'before-string

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

我已经更新了原始问题中的代码以反映这一变化.