4 votes

Emacs faire des commentaires en bloc carré avec une bordure alignée à droite

Je dois écrire des commentaires de code avec des bordures alignées sur les quatre côtés en raison d'une norme de codage imposée de manière externe.

Quelle est la manière la plus simple, dans Emacs, de :

  1. Convertir un texte en un commentaire en bloc avec ce format
  2. Éditer le texte dans un commentaire en bloc et permettre à Emacs de le reformater correctement

Exemples de format de commentaire :

#*****************************************************************************#
#* Ceci est un commentaire en bloc. Il a des bordures alignées à droite.      *#
#*                                                                           *#
#* Il peut avoir des paragraphes séparés. Le texte dans un long paragraphe    *#
#* passe d'une ligne à la suivante avec un espace de remplissage interne.     *#
#*                                                                           *#
#* La bordure de droite est à la position 78                                  *#
#*****************************************************************************#
sous MySub
{
  #***************************************************************************#
  #* Le bord gauche du commentaire est aligné avec le bloc de code actuel,   *#
  #* mais la bordure de droite est toujours à la position 78                 *#
  #***************************************************************************# 
  ma $var = 3;
}

auto-fill-mode en lui-même ne préserve pas la bordure de droite.

3voto

Rich Points 1870

La bibliothèque vénérable et polyvalente "rebox2" peut le faire.

Pour l'installer, téléchargez https://raw.github.com/lewang/rebox2/master/rebox2.el dans votre répertoire site-lisp, et ajoutez ce qui suit à votre fichier .emacs:

(require 'rebox2)

; Le modèle suivant définit le style spécifique requis ici,
; qui ne correspond pas à un style intégré de rebox2.
;
; "75" signifie que le style est enregistré comme x75, où "x" dépend
; du mode de langage actuel. Le caractère "?" est remplacé par le caractère de commentaire spécifique au langage
;
; "999" est le poids utilisé pour reconnaître ce style de commentaire.
; Cette valeur fonctionne pour moi.
(rebox-register-template
 75
 999
 '("?*************?"
   "?* box123456 *?"
   "?*************?"))

(add-hook 'perl-mode-hook (lambda ()
; La "boucle de styles" spécifie une liste de styles de cadre à travers
; que rebox parcourra si vous refaites le remplissage (M-q) d'un cadre plusieurs fois. Avoir "11" dans cette boucle permet de "defaire" facilement un bloc de commentaire, p. ex. pour "uncomment-region"
                (set (make-local-variable 'rebox-style-loop) '(75 11))
; Le paramètre "min-fill-column" garantit que le cadre ne sera pas rétréci
; lorsque le texte est court
                (set (make-local-variable 'rebox-min-fill-column) 79)
                (rebox-mode 1)))

Maintenant:

  1. Pour convertir du texte en commentaire de bloc dans ce format, il suffit de sélectionner le texte et de faire M-q
  2. Pour modifier le texte dans un commentaire de bloc, vous pouvez simplement modifier le texte directement, et emacs réorganisera automatiquement le cadre. (Vous devrez peut-être faire M-q pour demander une réorganisation si emacs ne le fait pas automatiquement.)

2voto

Andreas Röhler Points 2601

M-x personnaliser-variable RET style-de-commentaire RET

Ensuite, choisissez "box" dans le menu des valeurs

1voto

abo-abo Points 9598

Vous pourriez utiliser yasnippet pour l'insertion et overwrite-mode pour l'édition.

Si vous souhaitez le retour à la ligne, vous pourriez également supprimer le rectangle C-x r k, passer à un tampon temporaire C-x b, coller le rectangle C-x r y. Editez à votre guise. Ensuite, supprimez le rectangle du tampon temporaire et collez-le dans votre source.

Voici le fragment de début/fin de bloc :

# -*- mode: snippet -*-
# name: commentaire de bloc
# key: bb
# --
`(concat "#" (make-string (- 80 aya-tab-position) ?*) "#")`
$0
`(concat "#" (make-string (- 80 aya-tab-position) ?*) "#")`

Voici le fragment de ligne de bloc :

# -*- mode: snippet -*-
# name: commentaire de ligne de bloc
# key: bl
# --
`"#* "`$1${1:$(make-string (- 78 aya-tab-position (length text)) ? )}#

Notez que j'utilise ici la variable de package auto-yasnippet aya-tab-position. Pour l'utiliser dans un snippet, vous devez étendre le snippet avec aya-open-line. Vous pouvez obtenir les deux packages depuis MELPA.

0voto

Rich Points 1870

Une réponse partielle à (1) (mais j'aimerais en entendre une meilleure) :

  • Tapez le paragraphe de commentaire en texte brut
  • M-x set-fill-column 76
  • Placez le curseur au début du paragraphe de commentaire et saisissez manuellement le "#* " (notez l'espace)
  • Avec le curseur sur la première lettre du paragraphe de commentaire, exécutez M-x set-fill-prefix
  • Utilisez maintenant M-q pour reformater le paragraphe
  • Cela triera la césure des mots et placera la bordure gauche en place.
  • Enfin, ajoutez manuellement les bordures supérieure, inférieure et droite.

Voir http://www.gnu.org/software/emacs/manual/html_node/emacs/Fill-Prefix.html

La même approche peut être utilisée pour certaines parties de (2) :

  • Assurez-vous que set-fill-column et set-fill-prefix sont corrects (voir ci-dessus)
  • Supprimez tous les marqueurs de bordure droite
  • Reformatez le paragraphe en utilisant M-q
  • Enfin, ajoutez manuellement les bordures supérieure, inférieure et droite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X