27 votes

Rendre php-mode (et autres modes dérivés de cc-mode) compatible avec Emacs 23

J'utilise Emacs 23 et php-mode.el 1.5.0. Lorsque je l'ai dans mon .emacs :

(require 'php-mode)

J'obtiens ce message d'erreur au démarrage d'Emacs :

Warning (initialization): An error occurred while loading `/Users/kdj/.emacs':

error: `c-lang-defconst' must be used in a file

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Si j'évalue (require 'php-mode) après le démarrage d'Emacs, je ne reçois aucun message d'erreur.

J'ai trouvé un entrée de blog qui indique que ce problème est spécifique à Emacs 23 (c'est-à-dire qu'il n'y a pas d'erreur avec Emacs 22.x), mais il ne donne aucune solution.

Je ne sais pas si cela a une importance, mais j'utilise Mac OS X, et j'ai construit Emacs à partir des sources CVS actuelles, en utilisant ./configure --with-ns .

Quelqu'un sait-il ce qui se passe ici, et/ou comment je peux le réparer ?

50voto

Jeremy Grozavescu Points 672

J'ai rencontré le même problème en essayant de faire fonctionner le mode csharp. J'ai finalement trouvé la solution en creusant dans le fichier emacs lisp de csharp-mode :

;;   This code doesn't seem to work when you compile it, then
;;   load/require in the emacs file. You will get an error (error
;;   "`c-lang-defconst' must be used in a file") which happens because
;;   cc-mode doesn't think it is in a buffer while loading directly
;;   from the init. However, if you call it based on a file extension,
;;   it works properly. Interestingly enough, this doesn't happen if
;;   you don't byte-compile cc-mode.

Donc, le correctif rapide et sale à mettre dans votre .emacs est de charger automatiquement l'extension et de ne pas mettre (require 'php-mode) ou (load "php-mode") là-dedans. Sans plus attendre,

(autoload 'php-mode "php-mode" "Major mode for editing php code." t)
(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
(add-to-list 'auto-mode-alist '("\\.inc$" . php-mode))

J'espère que cela vous aidera ! Il ne me reste plus qu'à faire fonctionner le changement de mode php/html. Souhaitez-moi bonne chance.

2voto

Bertrand Marron Points 9284

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