【问题标题】:Emacs: TODO indicator on left fringe has a strange side-effect - deleting charactersEmacs:左边缘的 TODO 指示器有一个奇怪的副作用 - 删除字符
【发布时间】:2011-01-21 20:44:31
【问题描述】:

我刚刚阅读了Emacs :TODO indicator at left side,并尝试了一下。这似乎很有趣。出现了小三角形指示符,但我得到了一个奇怪的副作用:文本本身正在被改变。正在删除字符。

之前:

之后:

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

(我在 Windows 上使用 emacs 22.2.1)

【问题讨论】:

  • 它们实际上并没有被删除,只是显示方式不同。这几乎一样恶心。我不敢相信当我第一次提出解决方案时我没有注意到这种副作用。我相信新版本会如您所愿。

标签: emacs


【解决方案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)))))))

第一个解决方案使用了'display 文本属性,它改变了指定文本的显示方式,在这种情况下,它被left fringe 中的三角形替换。我需要做的是改用'before-stringoverlay。这不会改变正在显示的字符串。

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

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

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2023-04-04
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2016-03-16
    相关资源
    最近更新 更多