Настраивать отступ в режиме makefile?


11

В моих make-файлах я предпочитаю следующий отступ для строк продолжения:

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

Единственная проблема заключается в том, что это не будет работать, если ваш список файлов имеет отступ с помощью вкладок, потому что мой код оставляет их нетронутыми.
Алекс Шредер

исправить отступ до 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.