C'est le problème:
cc-mode repose un peu sur l'hypothèse que les mots clés sont des mots simples. Ajout du support pour enum_class
au lieu de enum class
serait juste une question de changer un peu les expressions régulières.
Au lieu de cela Emacs traite cela comme une classe. La bonne façon de résoudre ce serait enseignement Emacs que c'est un enum. Mais c'est au-delà de la portée de la réponse.
C'est le hack:
Donc, nous allons modifier l'existant en retrait pour se comporter différemment dans ce cas. (Code disponible pour bricoler dans ce résumé.)
(defun à l'intérieur de la classe-enum-p (pos)
"Vérifie si POS est à l'intérieur des accolades de C++ \"enum class\"."
(ignorer les erreurs
(enregistrez-excursion
(goto-char op)
(jusqu'-liste -1)
(en arrière-sexp 1)
(en regardant en arrière "enum[ \t]+classe[ \t]+[^}]+"))))
(defun alignez-enum-classe (langelem)
(si (à l'intérieur de la classe-enum-p (c-langelem-pos langelem))
0
(c-gamme-supérieur-intro-cont langelem)))
(defun alignez-enum-classe-fermeture corset (langelem)
(si (à l'intérieur de la classe-enum-p (c-langelem-pos langelem))
'-
'+))
(defun fix-enum-classe ()
"Le programme d'installation " c++en mode' pour mieux gérer les \"classe enum\"."
(add-to-list 'c-décalages-accédez à la liste '(celui du haut-intro-cont . alignez-enum-classe))
(add-to-list 'c-décalages-accédez à la liste
'(déclaration-suite . alignez-enum-classe-fermeture corset)))
(add-hook 'c++-mode-hook" fix-enum-classe)
Ce n'est pas très testés. ;)
Comment il fonctionne:
c-offsets-alist
détermine l'indentation pour différentes positions dans l'arbre syntaxique. Il peut être affecté à des constantes ou des fonctions.
Ces deux fonctions est de savoir si la position actuelle est à l'intérieur de l' enum class {...}
. Si c'est le cas, ils return 0 ou '-, cc-mode interprète comme la profondeur de pénétration. Si elle ne l'est pas, ils retournent la valeur par défaut.
inside-class-enum-p
déplace simplement le précédent corset et vérifie si le texte avant qu'il soit "enum class".