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 :(得分: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)))