缩进模板限制

时间:2016-07-14 09:58:25

标签: emacs d

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

1 个答案:

答案 0 :(得分:0)

运行C-h f d-mode,它应该说:d-mode is an interactive autoloaded compiled Lisp function in 'd-mode.el'.关注d-mode.el链接。

从搜索"缩进"在该文件中,看起来他们只使用cc-mode中定义的内容。您可以通过在d模式缓冲区中运行它来找出它们使用的功能:

 C-h v indent-line-function

这表明他们只使用了c-indent-line。也许解决这个问题的一种方法是尝试检测这一情况,否则回退到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)))