Emacs делает отступ для дополнительного уровня для каждой строки - PullRequest
3 голосов
/ 17 мая 2011

Как вы скажете emacs для отступа текущей продолженной строки (например, после оператора точки или косвенного обращения) на один уровень глубже , чем предыдущий? Аргументы о том, какой из них симпатичнее, здесь неуместны, поскольку именно этот стиль мы используем в моей работе, поэтому у меня действительно нет выбора.

Я предполагаю, что это смещение (может быть statement-cont?), Но я не уверен, как это сделать динамически, как это ...

Вид связанных: Как управлять отступами после открытых скобок в Emacs

Есть

#include <stdio.h>

struct thing {
    int the_first_piece_of_data;
};

struct stuff {
    struct thing the_first_thing_in_this_stuff;
    struct thing *pointer_to_the_first_thing_in_this_stuff;
};

int main(int argc, char *argv[])
{
    struct stuff some_stuff_to_work_with;
    struct stuff *pointer_to_stuff = &some_stuff_to_work_with;
    some_stuff_to_work_with.
        pointer_to_the_first_thing_in_this_stuff =
        &(some_stuff_to_work_with.
          the_first_thing_in_this_stuff);

    some_stuff_to_work_with.
        the_first_thing_in_this_stuff.
        the_first_piece_of_data = 42;

    printf("The piece of data is => %d\n",
           some_stuff_to_work_with.
           the_first_thing_in_this_stuff.
           the_first_piece_of_data);

    pointer_to_stuff->
        pointer_to_the_first_thing_in_this_stuff->
        the_first_piece_of_data++;

    printf("The piece of data is => %d\n",
           pointer_to_stuff->
           pointer_to_the_first_thing_in_this_stuff->
           the_first_piece_of_data);

    return 0;
}

Хотите

#include <stdio.h>

struct thing {
    int the_first_piece_of_data;
};

struct stuff {
    struct thing the_first_thing_in_this_stuff;
    struct thing *pointer_to_the_first_thing_in_this_stuff;
};

int main(int argc, char *argv[])
{
    struct stuff some_stuff_to_work_with;
    struct stuff *pointer_to_stuff = &some_stuff_to_work_with;
    some_stuff_to_work_with.
        pointer_to_the_first_thing_in_this_stuff =
            &(some_stuff_to_work_with. /*exra indent*/
              the_first_thing_in_this_stuff);

    some_stuff_to_work_with.
        the_first_thing_in_this_stuff.
            the_first_piece_of_data = 42; /*exra indent*/

    printf("The piece of data is => %d\n",
           some_stuff_to_work_with.
               the_first_thing_in_this_stuff. /*exra indent*/
                   the_first_piece_of_data); /*exra indent*/

    pointer_to_stuff->
        pointer_to_the_first_thing_in_this_stuff->
            the_first_piece_of_data++; /*exra indent*/

    printf("The piece of data is => %d\n",
           pointer_to_stuff->
               pointer_to_the_first_thing_in_this_stuff-> /*exra indent*/
                   the_first_piece_of_data); /*exra indent*/

    return 0;
}

1 Ответ

2 голосов
/ 17 мая 2011

Это невозможно с помощью встроенных параметров отступа.

Вы можете проверить это с помощью Cc Cs (он же c-show-syntactic-information) в строках, где вы хотите /* extra indent */, и над ними, и вы увидите, что синтаксическая информация для этих линии всегда одинаковы. Другими словами, насколько знает механизм отступов, эти строки синтаксически одинаковы.

Ознакомьтесь с документацией для интерактивной настройки .

Возможно, можно сделать то, что вы хотите, настроив c-special-indent-hook.

...