Benutzerdefinierte Einrückung für bestimmte Zeilen?

8

Ich versuche derzeit herauszufinden, wie ich einige Zeilen gezielt behandeln kann, ohne die Einrückung des restlichen Puffers zu verfälschen. Betrachten Sie die folgende Funktion MyFuncals Beispiel:

void MyFunc()
{
  unsigned y = 0;

DONOTINDENT;

  unsigned int x = 5 + 2;
  return x + 12;
}

Hier möchte ich, dass die Zeile DONOTINDENT;in Spalte 0 eingerückt wird, während der Rest der Funktion normal eingerückt werden soll. Ich habe versucht, dies mit dem folgenden Brauch zu lösen c-special-indent-hook:

(defun my-c-mode-indent-hook ()
  (let (p1 p2 myline)
    (setq p1 (line-beginning-position))
    (setq p2 (line-end-position))
    (setq myLine (buffer-substring-no-properties p1 p2))

    (if (string-match-p "DONOTINDENT" myLine)
        (save-excursion
          (indent-line-to 0))
      )
    )
  )

(defun my-c-mode-common-hook ()
  ;; my customizations for all of c-mode and related modes
  (setq c-special-indent-hook 'my-c-mode-indent-hook)
  )

(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

OK, dies funktioniert für die Zeile recht gut DONOTINDENT;, funktioniert jedoch nicht für alle nachfolgenden Zeilen, da diese relativ zu eingerückt sind DONOTINDENT;. Wenn DONOTINDENT;also in Spalte 0 eingerückt ist, unsigned int x = 5 + 2;wird auch in Spalte 0 eingerückt, aber es sollte in Spalte eingerückt werden c-basic-offset.

Wie kann ich den Einzug für die folgenden Zeilen korrigieren? Gibt es eine interne Variable, mit der ich die Berechnung der Einrückungsstufe der nachfolgenden Zeilen beeinflussen kann, oder basiert diese Berechnung ausschließlich auf der vorhergehenden Einrückung. Ich denke, es sollte möglich sein, dies irgendwie zu erreichen, da Beschriftungen in switch-case-Anweisungen auf ähnliche Weise eingerückt werden, aber ich hatte Mühe, dies herauszufinden, als ich mich in den cc-mode-Code vertiefte.

Danke im Voraus!

Viele Grüße, Fabian

Rosepeter
quelle

Antworten:

0

Ich denke, es ist möglich, abhängig von der Art der DONOTINDENT-Linie.

Eine benutzerdefinierte cc-offsets-alist- Regel ermöglicht je nach dem einzurückenden syntaktischen Element unterschiedliche Einrückungsregeln. Sie können versuchen, dies mit den richtigen syntaktischen Symbolen zu kombinieren, um bestimmte Zeilen nach Belieben einzurücken.

vxid
quelle