Emacs caml模式是否缩进注释?

Emacs caml模式是否缩进注释?,emacs,indentation,ml,Emacs,Indentation,Ml,我正在Emacs下编辑.ml代码。我的默认模式是caml模式 我意识到,行上的Tab或区域上的M-x缩进区域不会调整注释的位置,而tuareg模式会调整注释的位置 caml模式indent注释不是天生的吗?有什么我可以做的吗?看一下源代码就会发现,caml模式根本不缩进注释。根本原因在于: 此函数用于计算点处直线的缩进偏移。cond表达式中的第一个分支处理注释的开头,并简单地返回原始缩进偏移量 要解决此问题,您必须重新实施或建议caml compute final indent。可能—我不确定,

我正在
Emacs
下编辑
.ml
代码。我的默认模式是
caml模式

我意识到,行上的
Tab
或区域上的
M-x缩进区域
不会调整注释的位置,而
tuareg模式
会调整注释的位置


caml模式
indent注释不是天生的吗?有什么我可以做的吗?

看一下源代码就会发现,
caml模式
根本不缩进注释。根本原因在于:

此函数用于计算点处直线的缩进偏移。
cond
表达式中的第一个分支处理注释的开头,并简单地返回原始缩进偏移量

要解决此问题,您必须重新实施或建议
caml compute final indent
。可能—我不确定,也没有测试过—将整个实现复制到
init.el
,然后完全删除第一个
cond
分支就足够了。在这种情况下,缩进将由最后一个分支处理,该分支计算表达式的缩进偏移量。这可能,或者更可能不起作用

根据我在源代码中看到的情况,我建议不要使用
caml模式
。代码已经过时,并且没有遵循现代Emacs模式所必需的许多约定,也没有使用现代Emacs版本提供的特性来处理缩进。事实上,最近的更改只是一些小错误,或者是格式化修复。所有重大贡献至少发生在五年前

真正使用
tuareg模式
,最好使用MELPA,它提供了
tuareg模式
SVN的最新快照。
tuareg模式的发展也有点令人昏昏欲睡,但仍然存在

(defun caml-compute-final-indent ()
  (save-excursion
    (back-to-indentation)
    (cond
     ((and (bolp) (looking-at comment-start-skip)) (current-column))
     ((caml-in-comment-p)
      (let ((closing (looking-at "\\*)"))
            (comment-mark (looking-at "\\*")))
        (caml-backward-comment)
        (looking-at comment-start-skip)
        (+ (current-column)
           (cond
            (closing 1)
            (comment-mark 1)
            (t (- (match-end 0) (match-beginning 0)))))))
     (t (let* ((leading (looking-at caml-leading-kwops-regexp))
               (assoc-val (if leading (assoc (caml-match-string 0)
                                             caml-leading-kwops-alist)))
               (extra (if leading (symbol-value (nth 1 assoc-val)) 0))
               (prio (if leading (nth 2 assoc-val)
                       caml-max-indent-priority))
               (basic (caml-compute-basic-indent prio)))
          (max 0 (if extra (+ extra basic) (current-column))))))))