¿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)?


¿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)))

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)))

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.