Região de comentários do EMACS no modo C
Pergunta
No GNU Emacs, existe uma boa maneira de mudar o comando de registro de comentários no modo C de
/* This is a comment which extends */
/* over more than one line in C. */
para
/* This is a comment which extends
over more than one line in C. */
? eu tentei
(setq comment-multi-line t)
Mas isso não ajuda. Existe um Seção sobre comentários de várias linhas no manual do EMACS, mas não menciona nada.
Solução
Desde o emacs 21, tem havido um módulo chamado 'newcomment
, que tem diferentes estilos de comentários (veja a variável 'comment-styles
. Esta configuração se aproxima do que você deseja:
(setq comment-style 'multi-line)
(Nota: você provavelmente deve fazer essa configuração em 'c-mode-hook
).
No entanto, nenhuma das configurações faz com que os comentários se pareçam com o que você deseja.
A maneira mais fácil que vi para conseguir o que você quer é adicionar este hack:
(defadvice comment-region-internal (before comment-region-internal-hack-ccs activate)
"override 4th argument to be just spaces"
(when (eq major-mode 'c-mode) ; some condition here
(let ((arg (ad-get-arg 4)))
(when arg
(ad-set-arg 4 (make-string (length arg) ?\ ))))))
As configurações atuais para comment-style
Sempre prefixo as linhas de comentários com " *" (se não o todo " / *").
Se você não tem o Emacs 21, acho que você pode simplesmente baixar newcomment.el
do repositório. Não sei se funciona como está em versões anteriores do EMACS, mas pode valer a pena, embora atualizar o Emacs seja uma solução melhor.
Meu hack quebra o 'uncomment-region
. Uma correção adequada seria mudar 'comment-padright
. Isso levaria um pouco mais de pesquisa para não quebrar outras coisas. O hack acima apenas muda o comportamento em 'c-mode
(Ajuste a condição ao seu gosto).
Outras dicas
O mais próximo que eu poderia encontrar com o suporte de comentários embutidos é se você definir comment-style
para multi-line
, que produzirá isso:
/* This is a comment which extends
* over more than one line in C. */
Se isso não estiver perto o suficiente, dê uma olhada newcomment.el
e defina suas próprias funções de comentários, conforme apropriado.