Подтвердить что ты не робот

Создание php-режима (и других модемов cc-mode), совместимых с Emacs 23

Я использую Emacs 23 и php-mode.el 1.5.0. Когда у меня это есть в моем .emacs:

(require 'php-mode)

Я получаю это сообщение об ошибке при запуске Emacs:

Предупреждение (инициализация): произошла ошибка при загрузке `/Users/kdj/.emacs ':

ошибка: `c-lang-defconst 'должен использоваться в файле

Чтобы обеспечить нормальную работу, вы должны изучить и удалить причина ошибки в файле инициализации. Запустить Emacs с помощью параметр `--debug-init ', чтобы просмотреть полную ошибку.

Если я оцениваю (require 'php-mode) после запуска Emacs, я не получаю никаких сообщений об ошибках.

Я нашел запись блога которая указывает, что эта проблема специфична для Emacs 23 (то есть с Emacs 22 нет ошибки. x), но он не дает никаких решений.

Я не знаю, имеет ли это значение, но я использую Mac OS X, и я создал Emacs из текущих источников CVS, используя ./configure --with-ns.

Что происходит здесь и/или как я могу это исправить?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой при попытке запустить csharp-mode. Я, наконец, нашел решение при перекопании в фактический файл Emacs Lisp для режима csharp:

;;   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.

Таким образом, быстрое и грязное исправление для установки вашего .emacs - это автоматическая загрузка на расширение, а не размещение (require 'php-mode) или (load "php-mode") там. Без дальнейших церемоний,

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

Надеюсь, это поможет! Теперь мне просто нужно заставить работать режим переключения PHP/HTML. Желаю мне удачи.