Personalizzare il rientro in modalità makefile?


11

Nei miei makefile, preferisco il seguente rientro per le righe di continuazione:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

tuttavia, la modalità makefile lo rientra nel modo seguente (quando viene richiesto di riindentare il file o l'area):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

È possibile configurarlo in qualche modo per utilizzare la variante precedente (= linee di continuazione del rientro di 4 spazi o tab)?


E il indent-according-to-modecomando?
Andriy Tykhonov,

Risposte:


1

Basandosi sulla soluzione di 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)))

L'unico problema è che questo non funzionerà se l'elenco dei file è indentato dai TAB, perché il mio codice non viene toccato.
Alex Schröder,

correggere il rientro su 4 non è una buona soluzione, cosa succede se FILESe e LIBSsono lunghi, e c'è un elemento dopo :=, e meglio allineare i seguenti elementi con il primo dopo :=?
CodyChan,

Quattro spazi è la domanda.
Alex Schröder,

0

Sì. È possibile configurarlo, in qualche modo.

(Con scuse per lo snark.)

Scrivi una funzione che rientra una riga nel modo desiderato, quindi imposta quella funzione come valore della variabile indent-line-functionper makefile-mode. Qualcosa di simile a:

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

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

Bene, quei 3 punti sono sth Non sono sicuro di come riempire ... Ma grazie per il puntatore parziale.
Mekk,

0

Nel caso tu stia usando aggressive-indent-mode, mi ha aiutato a mettere makefile-modenella lista di aggressive-indent-excluded-modes:

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

Nota che funziona solo con global-aggressive-indent-modeacceso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.