Проблема с отступом в Emacs C-mode с комментариями в стиле Doxygen - PullRequest
1 голос
/ 22 сентября 2009

У меня проблема с многострочными комментариями в стиле doxygen с функцией отступа emacs в c-mode. Согласно руководству по доксигену (http://www.doxygen.nl/manual/docblocks.html), форма ниже принимается.

 /********************************************//**
 *  ... text
 ***********************************************/

Я пытаюсь использовать этот формат в emacs, но когда я вкладываю строку '* ... text', * заканчивается под / ** в конце первой строки следующим образом:

 /********************************************//**
                                                *  ... text
 ***********************************************/

Есть предложения как это исправить? Все еще изучаю все входы и выходы emacs.

Ответы [ 2 ]

4 голосов
/ 23 сентября 2009

Причина, по которой он имеет отступ, заключается в том, что (по умолчанию) многострочные комментарии выровнены с началом комментария в предыдущей строке. В этом случае начало содержащего комментария находится в столбце 47.

Теперь, как это исправить. Вот как я понял, как это исправить, решение в конце.

Во-первых, есть руководство cc-mode , а именно раздел , настраивающий отступ . Полезный ключ - C-c C-s, который сообщает вам, какой синтаксис используется для отступа. В данном случае это ((c 61)) - c является важной частью на данный момент.

Чтобы настроить его в интерактивном режиме, вы можете набрать C-c C-o (когда точка находится на линии, отступ которой вы хотите исправить). Вам будет предложено указать, какую запись синтаксиса вы хотите настроить (по умолчанию c в данном случае b / c, это текущий синтаксис), а затем вам будет предложено изменить запись синтаксиса (по умолчанию c-lineup-C-comments).

Теперь мы можем посмотреть на эту функцию, чтобы увидеть, как мы можем настроить ее для удовлетворения ваших потребностей. M-x find-function c-lineup-C-comments.

Вот где это становится сложнее. Вы можете настроить способ, которым cc-mode обрабатывает отступ комментария, но похоже, что вы хотите, чтобы он делал (в данном случае), чтобы признать, что c-комментарию, в котором вы находитесь, сразу предшествует другой c-comment и , для которого comment - это тот, которому вы хотите выровнять отступ.

Как ты это делаешь? Самый простой способ, о котором я могу подумать, это посоветовать 'c-lineup-C-comments распознать этот особый случай и изменить значение его первого аргумента на то, что вы хотите. Мое ограниченное тестирование показывает, что это работает для вашего примера:

(defadvice c-lineup-C-comments (before c-lineup-C-comments-handle-doxygen activate)
  (let ((langelm (ad-get-arg 0)))
    (save-excursion
      (save-match-data 
        (goto-char (1+ (c-langelem-pos langelem)))
        (if (progn
              (beginning-of-line)
              ;; only when the langelm is of form (c . something)
              ;; and we're at a doxygen comment line
              (and (eq 'c (car langelm))
                   (looking-at "^\\(\\s-*\\)/\\*+//\\*\\*$")))
            ;; set the goal position to what we want
            (ad-set-arg 0 (cons 'c (match-end 1))))))))

Конечный результат этого совета должен состоять в том, что аргумент, переданный в c-lineup-C-comments, должен быть преобразован из (c . 61) в (c . 17) (или что-то в этом роде), по сути, вводя в заблуждение подпрограмму, чтобы выровнять комментарий в начале строки, а не комментарий, который вы в настоящее время изменяете.

0 голосов
/ 23 сентября 2009

Какую версию emacs вы используете? У моего emacs 22 есть эта проблема, но на другой машине с emacs 23 нет. Это, вероятно, из-за некоторого "электрического" вмятины. Попробуйте M-x description-key RET RET, а также M-x description-mode, чтобы найти подходящее место для поиска ключей. Существует также http://doxymacs.sourceforge.net/, но я не проверял это лично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...