Emacs:在评论中仅突出显示TODO * *

时间:2010-03-02 23:11:13

标签: emacs comments elisp highlighting todo

这个问题与另一个问题Emacs :TODO indicator at left side有关。我最近遇到了一个我称之为FixmeMode的小模式。它支持自动突出显示 TODO 标记,并在它们之间导航。但是,我认为仅在注释中识别“TODO”字符串更有意义,而不是污染整个文件。有可能吗?

3 个答案:

答案 0 :(得分:24)

查看库fic-mode.el,它已经在C ++和Emacs-Lisp中得到验证。

这是专门为回答这个问题而写的。

安装就像任何标准包一样:

(require 'fic-mode)
(add-hook 'c++-mode-hook 'turn-on-fic-mode) 

虽然Wei Hu确实要求一种简单的方法将其添加到多种模式,所以这里有:

(defun add-something-to-mode-hooks (mode-list something)
  "helper function to add a callback to multiple hooks"
  (dolist (mode mode-list)
    (add-hook (intern (concat (symbol-name mode) "-mode-hook")) something)))

(add-something-to-mode-hooks '(c++ tcl emacs-lisp) 'turn-on-fic-mode)

答案 1 :(得分:3)

这可能但是相当棘手。 Fixme模式使用font-lock进行突出显示,因此它可以按照您的类型工作以突出显示关键字。字体锁定挂钩处于非常低的级别,基本上在每次更改后运行缓冲区的内容。但它经过高度优化,可以在现代计算机上瞬间显示。

左边缘的TODO指示器是静态的。执行该功能,所有当前的TODO都会突出显示;更改缓冲区(添加或删除TODO)不会改变条纹指示符;只有当函数再次运行时才会改变。

您的方法必须进入语法表,首先确定您何时在评论中,然后查找关键字。棘手的部分是以交互方式进行(即在您键入时)。您应该能够挂钩到font-lock构造来执行此操作,但是您提供的用于搜索注释语法表然后对于关键字的函数更有效,因为它将在每次运行时运行缓冲区更改(虽然它只会在更改的区域上运行,我认为)。您希望在font-lock-syntactic-keywords而不是font-lock-keywords中填写所有这些内容,因为语法关键字传递发生在语法传递之前(在关键字传递之前发生),并且您需要在注释之前设置TODO评论本身已经确定。

对不起,这不是完整的工作代码答案.....

答案 2 :(得分:2)

也许这会有所帮助:有一个fn c-in-literal cc模式,以及csharp模式下的类似csharp-in-literal。该 如果在C风格的注释中,返回值为c,如果在C ++中,则为c++ 风格评论。您可以将其添加到代码中 Emacs :TODO indicator at left side 得到你想要的东西。

(defun annotate-todo ()
   "put fringe marker on TODO: lines in the curent buffer"
  (interactive)
  (let (lit)
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward "TODO:" nil t)
      (progn
        (setq lit (c-in-literal)) ;; or csharp-in-literal
        (if (or (eq lit 'c) (eq lit 'c++))
            (let ((overlay (make-overlay (- (point) 5) (point))))
              (overlay-put overlay 'before-string
                           (propertize "A"
                                       'display
                                       '(left-fringe   ;; right
                                         horizontal-bar
                                         better-fringes-important-bitmap))))))))))