2009-05-22 19 views
29

Estoy usando Emacs 23 y php-mode.el 1.5.0. Cuando tengo esto en mi .emacs:Haciendo que el modo php (y otros modos derivados del modo cc) sea compatible con Emacs 23

(require 'php-mode) 

me sale este mensaje de error cuando Emacs se inicia:

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 evalúo (require 'php-mode) después del inicio de Emacs, que no se deje ningún mensaje de error.

Encontré un blog entry que indica que este problema es específico de Emacs 23 (es decir, no hay ningún error con Emacs 22.x), pero no da ninguna solución.

No sé si esto importa, pero estoy usando Mac   OS   X, y construí Emacs a partir de las fuentes actuales de CVS, usando ./configure --with-ns.

¿Qué está pasando aquí y cómo puedo solucionarlo?

+0

Uso Emacs 23 y 'php-mode' enviados con Emacs Starter Kit (también v1.5.0). Funciona. Puede tener algunos otros modos en su .emacs que tengan como efecto 'php-mode'. –

+0

He cambiado mis .emacs a solo "(add-to-list 'load-path" ~/elisp ") (requiere' php-mode) ', y el problema persiste. –

+0

¿Puedes poner tus dotemacs en algún lugar en línea? –

Respuesta

51

Me encontré con el mismo problema al intentar poner en marcha el csharp-mode. Finalmente encontré la solución al excavar en el archivo real de Emacs Lisp para 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. 

Por lo tanto, la solución rápida y sucia para poner en su .emacs es la carga automática de extensión y no poner (require 'php-mode) o (load "php-mode") ahí. Sin más preámbulos,

(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)) 

Espero que esto ayude! Ahora solo necesito que las cosas de cambio de modo PHP/HTML funcionen. Deséame suerte.

+0

¡Impresionante! Esto funciona perfectamente –

+0

funciona para mí también – Matt

+0

Tarde en la fiesta, pero muchas gracias por esto. No tengo ningún problema con Linux, pero en Windows recibí el mismo error, ya que nxhtml carga muchas cosas por sí mismo. Eliminé mis archivos cc - *. Elc y los errores desaparecieron. – monksp