Emacs:左边条纹上的TODO指示器有一个奇怪的副作用——删除字符

Emacs:左边条纹上的TODO指示器有一个奇怪的副作用——删除字符,emacs,Emacs,我只是阅读,并尝试了一下。这似乎很有趣。小指示器三角形出现了,但我得到了一个奇怪的副作用:文本本身正在被修改。正在删除字符 之前: 之后: 模式行确实指示缓冲区在运行注释todo后已被更改。 这是怎么解释的 (我在Windows上使用emacs 22.2.1)啊。。。我早就看到了我的错误。这是一个新版本 (defun annotate-todo () "put fringe marker on TODO: lines in the curent buffer" (interact

我只是阅读,并尝试了一下。这似乎很有趣。小指示器三角形出现了,但我得到了一个奇怪的副作用:文本本身正在被修改。正在删除字符

之前:

之后:

模式行确实指示缓冲区在运行
注释todo
后已被更改。 这是怎么解释的


(我在Windows上使用emacs 22.2.1)

啊。。。我早就看到了我的错误。这是一个新版本

(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)))))))
第一个解决方案使用了
“显示
文本”属性,该属性更改了指定文本的显示方式,在本例中,它被中的三角形替换。我需要做的是在字符串之前使用
。这不会更改正在显示的字符串

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


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

它们实际上没有被删除,只是显示方式不同。这几乎同样令人讨厌。我不敢相信我在第一次提出解决方案时没有注意到这种副作用。我相信新的工作原理和你预期的一样。