Получение Emacs fill-paragraph, чтобы играть хорошо с комментариями, подобными javadoc

Я пишу основной режим Emacs для диалекта APL, который я использую на работе. Я получил базовая блокировка шрифтов для работы, а также после установки комментариев и запуска comment-start-skip, comment/uncomment region и fill paragraph также работа.

Однако блоки комментариев часто содержат комментарии стиля javadoc и i хотел бы заполнить абзац, чтобы избежать склеивания строк, начинающихся с такими командами.

Если у меня это (\ вместо javadoc @):

# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value

M-q дает мне:

# This is a comment that is long and
# should be wrapped. \arg Description
# of argument \ret Description of
# return value

Но я хочу:

# This is a comment that is long and
# should be wrapped.
# \arg Description of argument
# \ret Description of return value

Я пробовал настроить абзац-начало и абзац-раздел соответствующие значения, но абзац-абзац все еще не работает внутри блок комментариев. Если я удалю маркеры комментариев, M-q работает так, как я хочу to, поэтому регулярное выражение, которое я использую для запуска параграфа, похоже, работает.

Должен ли я написать специальный абзац заполнения для моего основного Режим? cc-mode имеет тот, который обрабатывает такие случаи, но это действительно комплекс, я хотел бы избежать его, если это возможно.

Ответ 1

Проблема заключалась в том, что регулярное выражение в начале абзаца должно соответствовать всей строке для работы, включая фактический символ комментария. Следующий пример работает для примера, который я дал:

(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")

Вот страница, которая имеет пример regexp для php-mode, который делает это: http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/

Ответ 2

Существуют и другие режимы, которые имеют менее сложные функции, используемые для fill-paragraph-function. Просмотр через мою установку, это похоже на то, что в ada-mode и make-mode - хорошие примеры.

Ответ 3

В этих случаях я открываю пустую строку между строками абзаца и строками аргументов, затем использую M-q для обертывания строк абзаца, а затем удаляю пустую строку между ними. Не идеально, но он работает и достаточно легко записать в макрос, если вам нужно его повторить.