Personalizando o recuo no modo makefile?

11

Nos meus makefiles, prefiro o seguinte recuo para linhas de continuação:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

mesmo assim, o modo makefile o recorta da seguinte maneira (quando solicitado a reinserir arquivo ou região):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

É possível configurá-lo de alguma forma para usar a variante anterior (= recuar linhas de continuação por 4 espaços ou tabulação)?

Mekk
fonte
E o indent-according-to-modecomando?
Andriy Tykhonov 6/11

Respostas:

1

Com base na solução 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)))
Alex Schröder
fonte
O único problema é que isso não funcionará se a sua lista de arquivos for recuada por TABs, porque meu código as deixa intocadas.
Alex Schröder
fixar o recuo em 4 não é uma boa solução, e se o FILESe LIBSfor longo, e houver um elemento depois :=, e melhor alinhar os seguintes elementos com o primeiro depois :=?
CodyChan
Quatro espaços é o que a pergunta foi feita.
Alex Schröder
0

Sim. É possível configurá-lo, de alguma forma.

(Com desculpas pelo desprezo.)

Escreva uma função que travessões uma linha da maneira que quiser, em seguida, definir essa função como o valor da variável indent-line-functionpara makefile-mode. Algo como:

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

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))
purple_arrows
fonte
Bem, esses 3 pontos são sth, não sei como preencher ... Mas obrigado pelo ponteiro parcial.
Mekk
0

Caso você esteja usando aggressive-indent-mode, isso me ajudou a colocar makefile-modena lista de aggressive-indent-excluded-modes:

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

Observe que isso só funciona com global-aggressive-indent-modeativado.

Timm
fonte