2013-10-24 2 views
4

Нам нужно прокомментировать наш код на C++, используя javadoc отформатированные комментарии doxygen, и я ищу что-то в emacs, которые могут поддерживать стиль javadoc по мере ввода.Форматирование комментариев в стиле javadoc в emacs

Так что, если я начну писать комментарий, как это:

/** 
* This function does the following: 

Когда я нажимаю «войти», я хотел бы, чтобы курсор на авто отступ и вставить «*», чтобы я мог продолжать печатать без форматирование вручную. Так что, когда я ударил «возврат» комментарий должен выглядеть следующим образом (без меня, набрав «[TAB] *»):

/** 
* This function does the following: 
* 
+0

javadoc для C++ называется doxygen. http://doxymacs.sourceforge.net/ –

ответ

2

Существует переменная c-block-comment-prefix, которая управляет префиксом продолженных строк в пределах /*...*/-комментариев к стилю.

С ним быть установлен в

(setq c-block-comment-prefix "* ") 

и ваша точка внутри полной - т.е. закрыт - блок комментариев (| является точкой)

1. /|* */ 
2. /*| */ 
3. /* |*/ 
4. /* *|/ 

при нажатии Mj (c-indent-new-comment-line команда) , вы получите следующее:

/* 
* */ 

Работает как для 23, так и для 24 Emacsen.

2

Найдено ответ здесь: http://www.frankmeffert.de/2010/09/emacs-doxygen-doxymacs/ я сделал небольшие хитрости, чтобы работать на C и C++ режимы и добавить дополнительное пространство после каждого «*»

(defun my-javadoc-return() 
    "Advanced C-m for Javadoc multiline comments. 
Inserts `*' at the beggining of the new line if 
unless return was pressed outside the comment" 
    (interactive) 
    (setq last (point)) 
    (setq is-inside 
     (if (search-backward "*/" nil t) 
     ;; there are some comment endings - search forward 
      (search-forward "/*" last t) 
      ;; it's the only comment - search backward 
      (goto-char last) 
      (search-backward "/*" nil t) 
    ) 
    ) 
    ;; go to last char position 
    (goto-char last) 
    ;; the point is inside some comment, insert `* ' 
    (if is-inside 
     (progn 
    (insert "\n* ") 
    (indent-for-tab-command)) 
    ;; else insert only new-line 
    (insert "\n"))) 

(add-hook 'c-mode-common-hook (lambda() 
    (local-set-key "\r" 'my-javadoc-return))) 
+0

В качестве примечания стороны: символы 't' и' nil' оценивают сами по себе, вам не нужно указывать их. –

+0

'(if 't' nil)' это просто окольный способ записи ''. Если вы прочтете это вслух, вы поймете, почему: «если истинно, то true, а если false, то false». – Stefan

+0

спасибо за советы – perogiex

2

IIUC, попав M-j вместо RET должно дать вам поведение, которое вы хотите.

Смежные вопросы