Menyesuaikan lekukan dalam mode makefile?

11

Di makefile saya, saya lebih suka lekukan berikut untuk garis kelanjutan:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

masih, mode makefile indentasinya dengan cara berikut (ketika diminta untuk meng-reindent file atau wilayah):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

Apakah mungkin untuk mengonfigurasinya entah bagaimana menggunakan varian sebelumnya (= garis kelanjutan indentasi dengan 4 spasi atau tab)?

Mekk
sumber
Bagaimana dengan indent-according-to-modeperintah?
Andriy Tykhonov

Jawaban:

1

Membangun solusi 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
sumber
Satu-satunya masalah adalah bahwa ini tidak akan berfungsi jika daftar file Anda diindentasi oleh TAB, karena kode saya membuat mereka tidak tersentuh.
Alex Schröder
memperbaiki indentasi ke 4 bukanlah solusi yang baik, bagaimana jika FILESdan LIBSpanjang, dan ada satu elemen setelahnya :=, dan Anda lebih baik menyelaraskan elemen berikut dengan yang pertama setelah :=?
CodyChan
Empat ruang adalah pertanyaan yang diajukan.
Alex Schröder
0

Iya. Adalah mungkin untuk mengkonfigurasinya, entah bagaimana.

(Dengan permintaan maaf untuk snark.)

Menulis fungsi yang indentasi baris yang Anda inginkan, kemudian menetapkan bahwa fungsi sebagai nilai variabel indent-line-functionuntuk makefile-mode. Sesuatu seperti:

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

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))
purple_arrows
sumber
Yah, 3 titik itu adalah sth. Saya tidak yakin bagaimana cara mengisinya ... Tapi terima kasih untuk penunjuk parsial.
Mekk
0

Jika Anda menggunakan aggressive-indent-mode, ini membantu saya untuk memasukkan makefile-modeke dalam daftar aggressive-indent-excluded-modes:

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

Perhatikan bahwa ini hanya berfungsi dengan global-aggressive-indent-modedihidupkan.

Timm
sumber