¿Personalizar sangría en modo makefile?

11

En mis makefiles, prefiero la siguiente sangría para las líneas de continuación:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

aún así, el modo makefile lo sangra de la siguiente manera (cuando se le pide reiniciar el archivo o la región):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

¿Es posible configurarlo de alguna manera para usar la variante anterior (= sangría líneas de continuación por 4 espacios o tabulación)?

Mekk
fuente
¿Qué pasa con el indent-according-to-modecomando?
Andriy Tykhonov el

Respuestas:

1

Basándose en la solución 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
fuente
El único problema es que esto no funcionará si su lista de archivos está sangrada por TAB, porque mi código los deja intactos.
Alex Schröder
arreglar la sangría a 4 no es una buena solución, ¿qué pasa si el FILESy LIBSson largos, y hay un elemento después :=, y es mejor alinear los siguientes elementos con el primero después :=?
CodyChan
Cuatro espacios es lo que hizo la pregunta.
Alex Schröder
0

Si. Es posible configurarlo, de alguna manera.

(Con disculpas por el gruñido).

Escriba una función que sangra una línea de la manera que desee, luego configure esa función como el valor de la variable 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)))
flechas_púrpura
fuente
Bueno, esos 3 puntos son algo que no estoy seguro de cómo llenar ... Pero gracias por el puntero parcial.
Mekk
0

En caso de que esté usando aggressive-indent-mode, me ayudó a poner makefile-modeen la lista de aggressive-indent-excluded-modes:

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

Tenga en cuenta que esto solo funciona con global-aggressive-indent-modeactivado.

Timm
fuente