Personnaliser l'indentation en mode makefile?


11

Dans mes makefiles, je préfère le retrait suivant pour les lignes de continuation:

FILES:=                \
    file1.cpp          \
    file2.cpp          \
    fileYetAnother.cpp

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

toujours, le mode makefile le met en retrait de la manière suivante (lorsqu'on lui demande de réindenter le fichier ou la région):

FILES:=            \
file1.cpp          \
file2.cpp          \
fileYetAnother.cpp

LIBS:=             \
libsth1.so         \
libelsewhere.so

Est-il possible de le configurer d'une manière ou d'une autre pour utiliser l'ancienne variante (= indentation des lignes de continuation par 4 espaces ou tabulation)?


Et la indent-according-to-modecommande?
Andriy Tykhonov

Réponses:


1

S'appuyant sur la solution de purple_arrows:

(defun my-makefile-indent-line ()
  (save-excursion
(forward-line 0)
(cond
 ;; keep TABs
 ((looking-at "\t")
  t)
 ;; indent continuation lines to 4
 ((and (not (bobp))
       (= (char-before (1- (point))) ?\\))
  (delete-horizontal-space)
  (indent-to 4))
 ;; delete all other leading whitespace
 ((looking-at "\\s-+")
  (replace-match "")))))

(add-hook 'makefile-mode-hook
      (lambda ()
    (setq-local indent-line-function 'my-makefile-indent-line)))

Le seul problème est que cela ne fonctionnera pas si votre liste de fichiers est indentée par des tabulations, car mon code les laisse intactes.
Alex Schröder

fixer l'indentation à 4 n'est pas une bonne solution, que se passe-t-il si le FILESet LIBSsont longs, et il y a un élément après :=, et vous feriez mieux d'aligner les éléments suivants avec le premier après :=?
CodyChan

Quatre espaces est ce que la question posée.
Alex Schröder

0

Oui. Il est possible de le configurer, en quelque sorte.

(Avec des excuses pour le snark.)

Écrivez une fonction qui indente une ligne comme vous le souhaitez, puis définissez cette fonction comme valeur de la variable indent-line-functionpour makefile-mode. Quelque chose comme:

(defun my-makefile-indent-line ()
  ...)

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))

Bon, ces 3 points sont qch je ne sais pas trop comment les remplir ... Mais merci pour le pointeur partiel.
Mekk

0

Dans le cas où vous utilisez aggressive-indent-mode, cela m'a aidé à mettre makefile-modesur la liste aggressive-indent-excluded-modes:

(global-aggressive-indent-mode)
(add-to-list 'aggressive-indent-excluded-modes 'makefile-mode)

Notez que cela ne fonctionne qu'avec global-aggressive-indent-modeactivé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.