2016-07-14 36 views
1

Emacs d-mode derzeit einrückt falsch Vorlage Einschränkungen wieEinrücken der Vorlage Einschränkungen

auto f(T)(T x) 
    if (is(T == struct)) 
{ 
} 

als

auto f(T)(T x) 
    if (is(T == struct)) 
    { 
    } 

Hat jemand eine Idee, wo diese zu graben beginnen zu beheben? Beachten Sie, dass d-modecc-mode verwendet.

Antwort

0

Führen Sie C-h f d-mode, und es sollte sagen: d-mode is an interactive autoloaded compiled Lisp function in 'd-mode.el'. Folgen Sie der d-mode.el Verbindung.

Von der Suche nach "Einzug" in dieser Datei, es sieht aus wie sie nur verwenden, was in cc-mode definiert ist. Sie können herausfinden, welche Funktion sie, indem Sie diese in einem d-Modus Puffer verwenden:

C-h v indent-line-function 

Dies zeigt, dass sie nur c-indent-line genutzt haben. Vielleicht ist es eine Möglichkeit, dies zu beheben, indem Sie versuchen, diesen einen Fall zu erkennen und andernfalls auf c-indent-line zurückzugreifen. So etwas (ungetesteter Code, nur zu Illustrationszwecken):

(defun d-indent-line() 
    (let* ((auto-if-curly 
      (save-excursion 
      (back-to-indentation 
      (when (looking-at "{") 
       (forward-line -1) 
       (back-to-indentation 
       (when (looking-at "if") 
        (forward-line -1) 
        (back-to-indentation 
        (looking-at "auto"))))))))) 
    (if auto-if-curly 
     (ident-line-to 0) 
     (c-ident-line)))) 

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