Formateur de code / Beautifier pour C sur Linux pour un utilisateur Emacs

Je suis un utilisateur Linux à la recherche d’un logiciel de création de code qui prendra les fichiers contenant du code C et les formatera selon les spécifications. Plus précisément, je cherche à:

  • Changer toutes les indentations à 8 espaces
  • Formater des blocs de code de manière cohérente
  • Ajouter des sauts de ligne de manière cohérente

Ce serait bien s’il y avait à la fois des valeurs par défaut et la possibilité de personnaliser. Je préfère les solutions libres / open source lorsqu’elles sont disponibles. Aucune suggestion?

UPDATE: Je devrais également noter que je suis un utilisateur d’Emacs, et que cela peut donc être une question spécifique à Emacs. J’ai mis à jour les balises pour refléter cela.

Astyle vaut le détour.

“indent” et “cb” viennent avec la plupart des dissortingbutions que j’ai eues …

Avez-vous regardé le retrait de GNU ?

Emacs? C’est probablement plus que ce que vous cherchez, mais ça le fera …

Si vous voulez que le moteur d’indentation (externe) fonctionne bien avec Emacs, vous devez être sûr de configurer votre indentation en mode cc pour qu’elle corresponde. Il existe de nombreux styles intégrés que vous pouvez utiliser. Et si aucun d’entre eux ne répond à vos besoins, vous pouvez personnaliser les parameters (la personnalisation interactive est particulièrement utile).

Une autre solution, inférieure, consisterait à configurer votre before-save-hook pour appeler le schéma d’indentation. Quelque chose comme ce qui suit:

 (add-hook 'c-mode-common-hook (lambda ()) (add-hook (make-local-variable 'before-save-hook) 'indent-it-all)) (defun indent-it-all () "indent the buffer using indent" (shell-command-on-region (point-min) (point-max) "indent" tt)) 

C’est ce que j’utilise personnellement, et je pense que cela répond à tous vos besoins d’indentation. Vous pouvez l’essayer en ajoutant le code à votre fichier .emacs. Cette fonction prend en charge l’indentation appropriée lorsque j’écris du code:

 (defun linux-c-indent () "adjusted defaults for C/C++ mode use" (interactive) (setq tab-width 8) (setq indent-tabs-mode nil) ;;force spaces, to work with dumber editors (setq c-basic-offset 8) (setq c-set-style "K&R")) (add-hook 'c-mode-common-hook 'linux-c-indent) 

Et si je souhaite réindenter des fichiers écrits par d’autres personnes, j’utilise les éléments suivants:

 (defun iwb () "indent whole buffer" (interactive) (delete-trailing-whitespace) (indent-region (point-min) (point-max) nil) (untabify (point-min) (point-max))) 

La fonction iwb s’exécute à chaque fois que j’ouvre un fichier de “programmation” dans emacs. De cette façon, je vois toujours du code bien mis en retrait. Je peux mettre ce morceau de code aussi si je le veux.