LINUX.ORG.RU

emacs - изменить способ отступа в php


0

0

Наверное, не совсем в девеломент, не бейте сильно...

Исторически работал с таким вот способом отступов:

if ($a) {
    $b = 2;
}
else {
    $b = 3;
}

$function($a, // подразумевается, что параметры длинные и их приходится переносить
          $b,
          $c
          );



На новой работе руководство проектом требует смены на такой вот:

if ($a) {
    $b = 2;
} else {          // это к емаксу отношение не имеет, оно просто мне не нравится :-)
    $b = 3;
}

$function(
    $a,
    $b,
    $c
);



Емакс такие фентиля выкручивать не даёт, при первой попытке возвращает к своим предпочтениям. 
Менять редактор на другой не хочется. Отключать php-mode (и делать все отступы табами) - тем более. 
Помогите настроить php-mode, пожалуйста.
★★★★★

Какие фентиля? Это похоже на k&r-style. Жмешь C-c . и выбираешь k&r. Потом прописываешь в ~/.emacs автоматический выбор стиля по хуку.

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

>Не работает что-то... Как посмотреть, установлен этот режим или нет?

Открываешь файл *.php любой. Автоматически должна выставиться режим PHP (в статусе видо будет). Далее жмем 'C-c . ' и на вопрос отвечаем k&r. Должно работать. Если это то, что нужно, то прописываем строчки, что выше в ~/.emacs

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

Пф-ф-ф-ф, да нет же. Если через M-x, то так:

M-x c-set-style, а на вопрос ответить k&r. Еще раз обращу внимание, что вызывать это надо, когда курсор находится в PHP-шном буфере при *активном* php-mode.

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

Сорри, не заметил точку после C-c :-)

Попробовал, вроде работает. Правда, отступ странный.

Делает так:

function(
     $a,
     $b
     )

Перед $a - 1 таб и 1 пробел (т.е. 5 пустых мест).
И скобка не совсем там... 

Ладно, буду воевать.. Спасибо за помощь. 

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

Да, не заметил. Разница на один пробел. Ну тогда попробуй cc-mode вместо k&r. Там отступы правильные.

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

О, то что надо. Спасибо большое.

Блин, 7-й год в емаксе, а лисп выучить руки так и не дошли... )

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

>О, то что надо

А вот насчет закрывающей скобочки в функции, то надо подкрутить кое-что в стиле. Заготовленного такого, видимо, нет. Сейчас посмотрю, какой параметр надо выставить. Займет некоторое время.

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

Можно еще на шее посидеть? :)

Из емакса смена стиля работает нормально, а вот автоматически он не устанавливается. 

Мой ~/.emacs

(load "/usr/share/emacs/site-lisp/site-gentoo" nil t)

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(c-basic-offset 4)
 '(c-tab-always-indent (quote other))
 '(column-number-mode t)
 '(fringe-mode 0 nil (fringe))
 '(indent-tabs-mode t)
 '(save-place t nil (saveplace))
 '(scroll-bar-mode (quote right))
 '(show-paren-mode t)
 '(size-indication-mode t)
 '(tab-always-indent t)
 '(tab-width 4)
 '(tool-bar-mode nil)
 '(transient-mark-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(set-default-font "-misc-*-*-r-*-*-20-*-*-*-*-*-*")

;;my favourite scrolling
(setq scroll-conservatively 50)
;;(setq scroll-preserve-screen-position 't)
(setq scroll-margin 5)

(autoload 'css-mode "css-mode")
(setq auto-mode-alist
  (cons '("\\.css\\.php\\'" . css-mode) auto-mode-alist))

(add-hook 'php-mode-user-hook
          (lambda ()
            (c-set-style "cc-mode")))


З.Ы. Emacs из cvs, 23.0.50.1, более-менее свежий gentoo

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

>(add-hook 'php-mode-user-hook

У меня более старый Emacs. Во-первых, проверь, есть ли эта переменная в
 Emacs23. Вдруг ее переименовали? C-h v php-mode- , а далее комплит 
жми. Просмотри списочек на предмет hook.


Во-вторых, если ты уже менял стиль до этого через add-hook на k&r, то 
хук у тебя загрязнился. add-hook добавляет новый хук спереди всех по 
умолчанию, проверяя на совпадения. Можно очистить хук 
(setq php-mode-user-hook nil), а потом опять (add-hook ... ) свой. 
А можно еще добавить аргумент append (t на конце). Тогда хук 
добавляется в конец списка (соответсвенно, срабатывает последним):



(add-hook 'php-mode-user-hook
          (lambda ()
            (c-set-style "cc-mode")) t)

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

Нашел php-mode-hook, поправил, заработало.

Спасибо огромное, с меня пиво )

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

>И скобка не совсем там... 

Ага, надо поменять параметр arglist-close в 0.

попробуй

(add-hook 'php-mode-user-hook
          (lambda ()
            (c-set-style "cc-mode")
	    (c-set-offset 'arglist-close 0)) t)

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

В принципе, ты можешь поковырять любой сишный режим, как ты хочешь. Параметров отступов там много. cc-mode -- это просто подходящий тебе уже настроенный режим. Просто повезло. А могло не повезти. Но это все-равно исправимо.

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