2013-04-07 2 views
3

Я редактирую .ml код под Emacs. Мой режим по умолчанию: caml-mode.Относится ли отступы в режиме caml-mode?

Я понимаю, что Tab на линии или M-x indent-region в регионе не отрегулирует место комментария, тогда как tuareg-mode делает это.

Не caml-mode Отмененные комментарии от природы? Я могу что-нибудь сделать?

ответ

1

Взгляд на исходный код показывает, что caml-mode не содержит отступов. Первопричина в caml-compute-final-indent in caml.el:

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

Этой функция вычисляет отступ смещения линии в точке. Первая ветвь в выражении cond обрабатывает начало комментария и просто возвращает исходное смещение отступа без изменений.

Чтобы исправить это, вам придется повторно реализовать или посоветовать caml-compute-final-indent. Вероятно, я не уверен и не тестировал его - достаточно скопировать всю реализацию на ваш init.el и просто полностью удалить первую ветвь cond. В этом случае отступ будет обрабатываться последней ветвью, которая вычисляет смещение отступа для выражений. Это может или, скорее всего, не сработает.

Из того, что я видел в исходном коде, я бы посоветовал против caml-mode. Код устарел и не соответствует многим соглашениям, обязательным для современных режимов Emacs, и не использует функции, предоставляемые современными версиями Emacs, чтобы иметь дело с отступом. Это not really actively maintained, последние изменения - незначительные ошибки или исправления форматирования. Все крупные взносы состоялись не менее пяти лет назад.

Действительно использовать tuareg-mode, в лучшем случае от MELPA, который обеспечивает последний моментальный снимок от tuareg-mode SVN. Развитие tuareg-mode несколько сонное, но там are at least some major changes with the last two years.

Смежные вопросы