C++11 mode ou des réglages pour emacs?
Je suis à court d'Emacs 23.3.1 (Ubuntu, Onirique package) et emacs ne semble pas comprendre tout de le nouveau C++11 mots clés, constexpr, thread_local, etc. Aussi, il ne comprend pas que ">> "est désormais autorisée dans les paramètres de modèle, ou de la nouvelle classe enum' la syntaxe. Est-il à jour ou de remplacement du module de quelque part? Ou, à défaut, quelques réglages à faire emacs plus de C++11 amicale dans le temps de le dire?
- Notez que
thread_local
n'est pas encore pris en charge par G++: gcc.gnu.org/projects/cxx0x.html La gcc extension__thread
est similaire, mais de ne pas se prévaloir des constructeurs ou destructeurs IIRC. - J'ai eu le même problème avec vim, qui ont certains des fichiers de syntaxe, je l'écoute. Doit être la même pour emacs je pense 🙂
Vous devez vous connecter pour publier un commentaire.
J'ai vérifié tronc version,
cc-mode
n'a pas encore été mis à jour, et autant que je sache, il n'y a pas d'alternative. Si vous le voulez vraiment, mais ne veulent pas se salir les mains, vous devez payer quelqu'un pour le mettre en œuvre pour vous...Bien, je suis en utilisant 24.1. En C++98 mots-clés sont manquantes, et tous les nouveaux C++11 mots clés. Il n'a même pas fontify nombre de constantes. Il me semble que si c++en mode n'a pas été mis à jour depuis une décennie.
J'utilise le code suivant pour un long moment maintenant, et a récemment ajouté C++11 mots clés. Essayez de le mettre dans votre .emacs; il devrait combler quelques trous.
Espère que cette aide.
cc-mode.el
. Dans l'intervalle, Alan répondu à mon mail, en disant qu'un petit nombre de C++11 fonctionnalités ont été ajoutées à l' (encore inédit) référentiel de la branche "C++11-0-1". Je lui ai proposé mon aide, et il a accepté. Cependant, il a aussi m'a prévenu que la licence CC-Mode n'est pas facile à comprendre... donc il peut prendre un peu de temps pour traduire les plutôt pragmatique crochet-code dans la vraie chose.R"( a "quot'd" string )";
(font-lock-add-keywords 'c++-mode '(("\\(-?[0-9]+[.eE]?[0-9]*[f]?\\)" 1 font-lock-warning-face append)))
enum class
correctement. 🙁Conformément à une demande présentée par Mike Weller ici une version mise à jour pour le C++11 chaînes de caractères littéraux (incl. défini par l'utilisateur littéraux).
Dans le ci-dessus la mise en œuvre de chaînes de caractères littéraux, le délimiteur balises sont marqués séparément comme
font-lock-keyword-face
; une autre option seraitfont-lock-constant-face
. Cette mise en œuvre n'est pas aussi efficace qu'elle pourrait l'être; mais il fonctionne et ne ralentit pas Emacs. Notez que les expressions régulières définies par l'utilisateur chaînes de caractères littéraux n'ont pas été "volée" à partir de somehere; j'espère donc qu'ils travaillent. Tous les commentaires sont les bienvenus.Si vous aimez fontify l'ensemble de la chaîne littérale comme
font-lock-string-face
- y compris les délimiteurs - remplacer les trois expressions régulières par une seule. Comme celui-ci:Avoir du plaisir.
.
ne correspond pas de saut de ligne. Il fixe, par le remplacement de tous les.*
avec[[:ascii:][:nonascii:]]*
Ont un coup d'oeil à l'emballage : "C++ moderne" font-lock pour Emacs. Il est également disponible sur Melpa.
Je suis le responsable de ce mode mineur. Tout commentaire est apprécié.
Remplacement d'Andreas à virgule flottante regexp avec cela permettra d'améliorer sa mise en surbrillance de flotteurs.
Espère que ça aide quelqu'un.
Pour moi, les deux plus pressant des points de douleur avec la police de verrouillage de moderne de code C++ ont été
auto
est mis en évidence comme un mot-clé (et non un type) et donc de l'identifiant suivant ne serait pas normalement higlight comme une déclaration de variable, etsrc/ClangIndexer.cpp
) puis e.g ne parvient pas à mettre en évidence le haut niveau des constructions telles que des définitions de fonction.Après un peu d'expérimentation, je suis arrivé à une solution qui fonctionne bien pour moi et les adresses de ces deux points.
La première est obtenue en modifiant
lisp/progmodes/cc-langs.el
(copie à laload-path
, puis en modifiant marche aussi) pour supprimer"auto"
deet ajouter à
c++-font-lock-extra-types
(par exemple: Personnaliser).Pour la seconde, la vidange
c++-font-lock-extra-types
(sauf de garder"auto"
) aide.