Налаштування відступу в режимі makefile?


11

У моїх файлах я віддаю перевагу наступному відступу для рядків продовження:

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

LIBS:=                 \
    libsth1.so         \
    libelsewhere.so

все-таки режим makefile відрізає його наступним чином (коли його вимагають повторно вписати файл або регіон):

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

LIBS:=             \
libsth1.so         \
libelsewhere.so

Чи можливо налаштувати його якось використовувати колишній варіант (= відступи продовження рядків на 4 пробіли чи вкладку)?


Що з indent-according-to-modeкомандою?
Андрій Тихонов

Відповіді:


1

Спираючись на рішення 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)))

Єдина проблема полягає в тому, що це не спрацює, якщо ваш список файлів буде позначений відступом TAB, тому що мій код залишає ці недоторканими.
Алекс Шредер

виправити відступ до 4 - це не гарне рішення, що робити, якщо FILESі LIBSдовгі, а після цього є один елемент :=, а вам краще вирівняти наступні елементи з першим після :=?
CodyChan

Чотири пробіли - це запитання.
Алекс Шредер

0

Так. Можна це якось налаштувати.

(З вибаченнями за примх.)

Напишіть функцію , яка робить відступ рядка так , як ви хочете, а потім встановіть цю функцію в якості значення змінної indent-line-functionдля makefile-mode. Щось на зразок:

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

(add-hook 'makefile-mode-hook (lambda () (setq-local indent-line-function 'my-makefile-indent-line)))

Ну, ці 3 крапки - це я не впевнений, як заповнити ... Але дякую за часткове вказівка.
Мекк

0

Якщо ви користуєтесь aggressive-indent-mode, це допомогло мені внести makefile-modeдо списку aggressive-indent-excluded-modes:

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

Зауважте, що це працює лише з global-aggressive-indent-modeувімкненим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.