Fazendo com que o parágrafo de preenchimento do Emacs funcione bem com comentários do tipo javadoc
Pergunta
Estou escrevendo um modo principal do Emacs para um dialeto APL que uso no trabalho.Eu tenho bloqueio de fonte básico para funcionar, e depois de definir comentário-início e comment-start-skip, comentar/descomentar região e preencher parágrafo também trabalho.
No entanto, os blocos de comentários geralmente contêm comentários de estilo javadoc e i gostaria de preencher parágrafo para evitar colar linhas iniciando com tais comandos.
Se eu tiver isso (\ em vez de javadoc @):
# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value
M-q me dá:
# This is a comment that is long and
# should be wrapped. \arg Description
# of argument \ret Description of
# return value
Mas eu quero:
# This is a comment that is long and
# should be wrapped.
# \arg Description of argument
# \ret Description of return value
Tentei configurar parágrafo-início e parágrafo-separado para valores apropriados, mas o parágrafo de preenchimento ainda não funciona dentro de um bloco de comentários.Se eu remover os marcadores de comentário, M-q funciona como eu quero para, então o regexp que eu uso para início de parágrafo parece funcionar.
Tenho que escrever um parágrafo de preenchimento personalizado para o meu major modo?cc-mode tem um que lida com casos como este, mas é realmente Eu gostaria de evitá-lo se possível.
Solução
O problema era que o regexp de início de parágrafo precisava corresponder a toda a linha para funcionar, incluindo o caractere de comentário real.O seguinte elisp funciona para o exemplo que dei:
(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")
Aqui está uma página que tem um exemplo de regexp para modo php que faz isso:http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/
Outras dicas
Existem outros modos que possuem funções menos complexas usadas para fill-paragraph-function
.Navegando pela minha instalação, parece que aqueles em modo ada e modo make são bons exemplos.
O que faço nesses casos é abrir uma linha em branco entre as linhas do parágrafo e as linhas do argumento, depois usar M-q para quebrar as linhas do parágrafo e, em seguida, eliminar a linha em branco entre elas.Não é o ideal, mas funciona e é fácil de gravar em uma macro se precisar repeti-la.