2016-07-14 7 views
1

Emacsのd-modeは現在、誤っインデント

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

ような

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

としてテンプレートの制限をインデント誰もがこの問題を解決するために掘りを開始する場所に任意のアイデアを持っていますか? d-modeにはcc-modeが使用されています。

答えて

0

実行C-h f d-modeとなります。d-mode is an interactive autoloaded compiled Lisp function in 'd-mode.el'.となります。d-mode.elリンクに従います。

そのファイルの「インデント」を検索すると、cc-modeに定義されているものだけが使用されているように見えます。

C-h v indent-line-function 

これは、彼らはただc-indent-lineを使用しなかった示しています。あなたは、彼らがDモードのバッファでこれを実行することにより、使用機能を調べることができます。おそらくこれを修正する方法は、この1つのケースを検出しようとすることです。それ以外の場合はc-indent-lineに置き換えてください。このようなもの(テストされていないコード、説明目的のみ):

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