Dostosowywanie wcięcia w trybie makefile?

11

W moich plikach Makefile wolę następujące wcięcie dla linii kontynuacji:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

nadal tryb makefile wcina go w następujący sposób (gdy zostanie wyświetlony monit o ponowne utworzenie pliku lub regionu):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

Czy można go jakoś skonfigurować, aby używał poprzedniego wariantu (= wcięcie linii kontynuacji o 4 spacje lub tabulator)?

Mekk
źródło
Co z indent-according-to-modedowództwem?
Andrij Tychonow

Odpowiedzi:

1

Opierając się na rozwiązaniu 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
źródło
Jedynym problemem jest to, że to nie zadziała, jeśli lista plików jest wcięta przez tabulatory, ponieważ mój kod pozostawia te nietknięte.
Alex Schröder,
naprawienie wcięcia na 4 nie jest dobrym rozwiązaniem, co jeśli jeśli FILESi LIBSsą długie, a jest jeden element po :=, a lepiej dopasować następujące elementy do pierwszego po :=?
CodyChan
Pytanie zawiera cztery spacje.
Alex Schröder
0

Tak. W jakiś sposób można to skonfigurować.

(Z przeprosinami za Snarka.)

Napisz funkcję, która wcina wiersz tak, jak chcesz, a następnie ustaw tę funkcję jako wartość zmiennej indent-line-functiondla makefile-mode. Coś jak:

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

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))
strzałki fioletowe
źródło
Cóż, te 3 kropki są w porządku. Nie jestem pewien, jak wypełnić ... Ale dzięki za częściowy wskaźnik.
Mekk
0

Jeśli używasz aggressive-indent-mode, pomogło mi to umieścić makefile-modena liście aggressive-indent-excluded-modes:

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

Pamiętaj, że działa to tylko przy global-aggressive-indent-modewłączonym.

Timm
źródło