Emacs隐藏/显示对C ++三斜杠Doxygen标记的支持?

时间:2010-05-29 18:16:36

标签: c++ emacs doxygen

我使用Doxygen的三斜杠语法来标记我的C ++代码。有 出现两个重要案例:

1)阻止标记注释,它是该行的唯一元素,并且可以    或者可能不会开始向左冲; e.g。

class foo
/// A one sentence brief description of foo.  The elaboration can
/// continue on for many lines.
{
    ...
};

void foo::bar
    /// A one sentence brief description of bar.  The elaboration can
    /// continue on for many lines.
    () const
{
    ...
}

2)跟踪标记注释总是遵循一定数量的C ++    在第一行早些时候的令牌,但可能仍然溢出    后续行; e.g。

class foo
{
    int  _var1;                 ///< A brief description of _var1.
    int  _var2;                 ///< A brief description of _var2
                                ///< requiring additional lines.
}

void foo::bar
    ( int arg1                  ///< A brief description of arg1.
    , int arg2                  ///< A brief description of arg2
                                ///< requiring additional lines.
    ) const
{
    ...
}

我想知道有什么隐藏/显示支持来处理这些约定。 最重要的情况是块标记注释。理想情况下我愿意 喜欢能够完全消除这些,这意味着我愿意 我不想简单地浪费一条线来表示存在折叠 阻止标记注释,更喜欢边缘标记,la hideshowvis.el

1 个答案:

答案 0 :(得分:3)

也许,作为部分答案,下面的代码片段可以解决问题。 在C ++模式下按M-s M-s,它会隐藏你所描述类型的所有注释。再次按下M-s M-s再次显示评论。我知道短代码有其局限性:

  1. 如果可以分别隐藏/显示每个特殊评论,那就太好了。

  2. 由于隐藏了所有特殊评论,您经常会需要M-s M-s。因此,hs1-mode应该对大型C ++文件更有效(可能应该通过jit-font-lock实现)。

  3. 应将连续的特殊注释行连接到一个隐藏的块。


  4. (defvar hs1-regexp
      "\\(\n[[:blank:]]*///\\|///<\\).*$"
      "List of regular expressions of blocks to be hidden.")
    
    (define-minor-mode hs1-mode
      "Hide/show predefined blocks."
      :lighter " hs1"
      (if hs1-mode
          (let (ol)
        (save-excursion
          (goto-char (point-min))
          (while (search-forward-regexp hs1-regexp nil 'noErr)
            (when (eq (syntax-ppss-context (syntax-ppss (match-end 1))) 'comment)
              (setq ol (make-overlay (match-beginning 0) (match-end 0)))
              (overlay-put ol 'hs1 t)
              (overlay-put ol 'invisible t)
              ))))
        (remove-overlays (point-min) (point-max) 'hs1 t)
        ))
    
    (add-hook 'c++-mode-hook '(lambda () (local-set-key (kbd "M-s M-s") 'hs1-mode)))