O ile wiem w emacs, nie ma możliwości dostosowania poziomu wcięcia zamykającego znaku ">" listy szablonów w C++. Obecnie mój program emacs wcięcie robi to:C++ Szablony i Emacs: Dostosowywanie wcięcia
template <
typename T1,
typename T2,
typename T3
>
class X;
Co chcę jest coś takiego:
template <
typename T1,
typename T2,
typename T3
>
class X;
Ustawianie wcięcia zmienne Template-args-CONT do zera będzie wciąć znak '>' prawidłowo, ale kosztem odwinięcia rzeczywistej treści listy argumentów szablonu.
Jakieś sugestie od guru emacs?
EDIT:
mam to trochę pracy z następującym Hack:
(defun indent-templates (elem)
(c-langelem-col elem t)
(let ((current-line
(buffer-substring-no-properties
(point-at-bol) (point-at-eol))))
(if (string-match-p "^\\s-*>" current-line)
0
'+)))
a następnie ustawiając Template-args-cd do indent-szablony w moim niestandardowego motywu, ala:
(c-add-style "my-style"
'("stroustrup"
;; ... Other stuff ...
(template-args-cont . indent-templates))))
Ale nadal jest dość wadliwy. Działa przez większość czasu, ale czasami emacs myli się myśląc, że lista szablonów jest arglistą, a następnie pojawia się wesołość.
Nie jestem pewien, czy jest to możliwe, ale jeśli można znaleźć informacje na tej stronie: http://www.gnu.org/software/emacs/manual/html_mono/ccmode.html#Customizing-Indentation – rve
Właściwie , Myślę, że może to być możliwe, jeśli napiszesz własną funkcję line-up. Dokument z mojego wcześniejszego komentarza podaje więcej informacji na ten temat. – rve
Zauważ, że Emacs C++ - tryb zazwyczaj okresowo myli się z powodu argumentów szablonu, więc może to nie być problem z kodem ... [aby być sprawiedliwym, jest to naprawdę trudne do uzyskania, ze względu na wiele znaczeń '<' and '>' w C++ (czasami jako zrównoważony separator, czasami jako operator), chyba że robisz dużo więcej rzeczywistego analizowania niż C++ - tryb robi ...] – snogglethorpe