LINUX.ORG.RU

Отступы в emacs


0

1

Настраиваю отступы для c-mode.
Нужно сделать отдельно отступы для инициализации переменных в функции и её логики. Т.е.

void Test(void) {
(3пробела)DWORD abc;
(4пробела)exit(0);
(4пробела){
(4пробела)(3пробела)DWORD a;
(4пробела)(4пробела)exit(0);
(4пробела)}
}

Нужно именно такой стиль. Т.е. в целом для содержимого 4, для инициализации 3 и для вложенных блоков тоже 3!

Как сделать подскажите пожалуйста, стандартных переменных для подсчета отступов в emacs вроде нехватает.
Спасибо.

Еще вопрос. В настройках стоит пробел перед скобкой насколько я понял (может не так понял). Но когда пишу «if(a){» и нажимаю tab то пробел не появляется. Как это исправить?



Последнее исправление: NoName (всего исправлений: 4)

Ответ на: комментарий от bk_

Дело не в DWORD.
Тип можно любой из доступных указать. Допустим int. Смысл моих вопросов остается тотже.

NoName
() автор топика
Ответ на: комментарий от NoName

Я не знаю, как сделать такое в емаксе. Хотя и считаю, что это не нужно, но если бы реально нужно было реализовать, то сделал бы скрипт на перле.

bk_ ★★
()
Ответ на: комментарий от NoName

Зайди в раздел «Толкс» и увидишь, чем в совершенстве владеют здешние профессионалы :)

bk_ ★★
()
Ответ на: комментарий от NoName

Может кто-то и знает, например mv. ИМХО, лучший путь: Google + медитация на готовые расширения под Emacs (Open Source же!).

iVS ★★★★★
()
Ответ на: комментарий от iVS

перл не нужен

Перл нужен, lisp нужен, emacs нужен. Раз ты говоришь, что перл не нужен, давай забацай скрипт на elisp.

bk_ ★★
()
Ответ на: комментарий от bk_

Перл нужен, lisp нужен, emacs нужен. Раз ты говоришь, что перл не нужен, давай забацай скрипт на elisp.

Да, перл - язык более общего назначения, но в контексте задачи не нужен. Очередной срач Lisp vs Perl _не_нужен_.

iVS ★★★★★
()
Ответ на: комментарий от iVS

но в контексте задачи не нужен

Он единственный, пока, который сможет решить задачу быстро, решительно и качественно.

bk_ ★★
()
Ответ на: комментарий от bk_

Он единственный, пока, который сможет решить задачу быстро, решительно и качественно.

Те, кто утверждает о _единственности_ какого-то языка слишком ограничены. Утверждение из разряда «пей пиво, ешь мясо, а другого не нужно».

iVS ★★★★★
()

Можно пролистать `c-offsets-alist', но вроде там такого нет.

В любом случае, можно написать соответствующий `c-special-indent-hook' (This hook gets called after each line is indented by the mode).

n01r ★★
()

imho, проще будет написать свои хуки для c-mode.

tn1
()

Но когда пишу «if(a){» и нажимаю tab то пробел не появляется. Как это исправить?

В настройках стоит пробел перед скобкой насколько я понял (может не так понял).

Какая именно, есть, например, `clearing-functions', вроде `space-before-funcall'... а где там именно для «{»?

Можно использовать `defadvice' (костыль) для `autopair-mode':

(defadvice autopair-default-handle-action (after c-brace activate)
  (when (and (boundp 'c-auto-newline) c-auto-newline
             (eq (ad-get-arg 0) 'opening) (eq (ad-get-arg 1) ?\}))
    (save-excursion (search-backward "{")
                    (unless (looking-back "^\\s-*") (just-one-space)))
    (save-excursion (newline) (indent-according-to-mode))))

Условие в (when ...) заменить на проверку `major-mode', второй (save-excursion ...) не нужен (он для спаривания `autopair-mode' и `c-toggle-auto-state', возможны подводные камни: `c-mode' редко использую, сейчас добавил первый `save-excursion' для проверки).

n01r ★★
()
Ответ на: You failed! от srj

> http://www.emacswiki.org/emacs/SmartTabs

Классная картинка). Хотел кинуть сюда несколько раз, правда не находил повода, рад, что вы меньше ограничены стереотипами.

n01r ★★
()

Читай сорцы функции c-indent-command, смотри какие в ней хуки и переменные. Функции елисповые можно на лету переопределять, что доставляет немалый фан. Удачи.

provaton ★★★★★
()
Ответ на: комментарий от n01r

В стандартной версии емакса это все уже должно быть.

NoName
() автор топика
Ответ на: комментарий от NoName

Кинь линк на диалог, полжалуйстка. Просто интересно

bk_ ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.