Стиль C ++ в emacs: исключение столбца больше 80 для поведения автоматического отступа в скобках по умолчанию - PullRequest
1 голос
/ 16 февраля 2012

У меня есть длинное объявление функции в C ++, которое я пишу в emacs.Поведение отступа с круглыми скобками не делает исключения для 80 столбцов и выглядит следующим образом:

std::vector<std::vector<double> > doFooBarBlahBlah(const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg1,
                                                   const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg2) {

Перемещение аргумента на следующую строку и автоматическое выравнивание приводит к:

std::vector<std::vector<double> > doFooBarBlahBlah(
                                                   const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg1,
                                                   const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg2) {

Руководство по стилю Google C ++ предлагает:

std::vector<std::vector<double> > doFooBarBlahBlah(
    const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg1,
    const std::map<std::pair<unsigned, std::string>, FoobarType> fooArg2) {

Существует ли расширение emacs для автоматизации отступов таким образом, чтобы соблюдать это правило?

1 Ответ

1 голос
/ 16 февраля 2012

Отредактировано, чтобы учесть исключение длины столбца Это поможет вам:

(defun my-c-custom-settings ()
  (c-set-offset 'arglist-intro 'my-special-indent))
(add-hook 'c-mode-common-hook 'my-c-custom-settings)

(defun my-special-indent (pair)
  (let* ((symbol (car pair))
         (offset (cdr pair))
         (regular-column (c-lineup-arglist-intro-after-paren symbol)))
    (if (> (save-excursion (+ (aref regular-column 0)
                              (- (progn (end-of-line) (current-column))
                                  (progn  (beginning-of-line) 
                                          (skip-chars-forward " \t")
                                          (current-column)))))
           80)
        '+
      regular-column)))

Чтобы узнать, какие настройки необходимо установить для отступа, нужно переместить курсорк точке, которую вы хотите сделать отступ по-другому и выполните:

M-x c-set-offset

aka Cc Co .И в этом случае вы хотите установить его на '+, указывая на отступ на один уровень больше, чем текущий уровень.Одной из настроек может быть функция, которая возвращает смещение.

В руководстве по работе с cc-режимом имеется масса информации о отступ , включая информацию о том, как ее настроить (я взялпростой способ в примере выше).А также документация для c-offsets-alist .

...