64 votes

Comment dire à emacs d'ouvrir le fichier .h en mode C++ ?

Quelles lignes dois-je ajouter à mon fichier _emacs (sous Windows) pour qu'il ouvre les fichiers .h en mode C++ ? Le mode par défaut est le mode C.

Gracias,

kris

67voto

Essayez ça :

(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

Chaque fois que vous ouvrez des fichiers .h, le mode C++ est utilisé.

35voto

phils Points 30543

Une autre approche pour utiliser à la fois le mode c et le mode c++ selon les besoins, consiste à utiliser variables locales du répertoire pour régler le mode.

Les variables du répertoire sont évaluées après que le mode ait été défini. 1 afin que vous puissiez écrire un .dir-locals.el pour votre projet C++ contenant ceci :

((c-mode . ((mode . c++))))

Et Emacs changera le mode en c++-mode alors qu'il l'avait initialement fixé à c-mode .

Si vous travaillez avec un mélange de projets C et C++, cela constitue une solution assez triviale pour chaque projet.

Bien sûr, si la majorité de vos projets sont en C++, vous pourriez définir le mode c++ par défaut, et vous pourriez alors utiliser cette approche en sens inverse pour passer en mode c lorsque cela est nécessaire.


1 normal-mode appelle (set-auto-mode) y (hack-local-variables) dans cet ordre. Voir aussi : Comment puis-je accéder aux variables locales du répertoire dans mes hooks en mode majeur ?

22voto

KeithB Points 9459

Si vous ne voulez pas que cela s'applique à chaque fichier .h, vous pouvez ajouter le texte suivant au bas de vos fichiers d'en-tête C++.

// Local Variables:
// mode: c++
// End:

Cela fonctionnera pour toutes les variables emacs que vous voulez définir sur une base par fichier. Emacs ignore les caractères de tête, donc utilisez la variable de commentaire appropriée pour le type de fichier.

20voto

Prof. Falken Points 10242

Apparemment, vous pouvez aussi mettre cela en haut du fichier :

// -*-c++-*-

pour dire à Emacs que c'est un fichier C++.

17voto

Borbus Points 313

Comme j'utilise régulièrement le C et le C++, j'ai écrit cette fonction pour essayer de "deviner" si un fichier .h est censé être en C ou en C++.

;; function decides whether .h file is C or C++ header, sets C++ by
;; default because there's more chance of there being a .h without a
;; .cc than a .h without a .c (ie. for C++ template files)
(defun c-c++-header ()
  "sets either c-mode or c++-mode, whichever is appropriate for
header"
  (interactive)
  (let ((c-file (concat (substring (buffer-file-name) 0 -1) "c")))
    (if (file-exists-p c-file)
        (c-mode)
      (c++-mode))))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c-c++-header))

Et si cela ne fonctionne pas, j'utilise une touche pour basculer entre les modes C et C++.

;; and if that doesn't work, a function to toggle between c-mode and
;; c++-mode
(defun c-c++-toggle ()
  "toggles between c-mode and c++-mode"
  (interactive)
  (cond ((string= major-mode "c-mode")
         (c++-mode))
        ((string= major-mode "c++-mode")
         (c-mode))))

Ce n'est pas parfait, il pourrait y avoir une meilleure heuristique pour décider si un en-tête est C ou C++ mais cela fonctionne pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X