Emacs23 проблема php-режима

Я продолжаю получать эту ошибку и подобные ошибки при использовании php-mode на Emacs23 в Ubuntu:

Debugger entered--Lisp error: (void-function php-template-if-hook)
  php-template-if-hook()
  abbrev-insert(if #("if" 0 2 (fontified t face font-lock-keyword-face)) 414 416)
  #[(G73404 funs global) "[Byte Code]"
  apply(#[(G73404 funs global "[Byte Code]"
  (lambda (&rest --cl-rest--) (apply #[... "[Byte Code]"
  expand-abbrev()
  self-insert-command(1)
  c-electric-paren(nil)
  call-interactively(c-electric-paren nil nil)

когда я печатаю if( и ошибка ниже, когда я печатаю array( или что-нибудь, что заканчивается array( например, is_array(:

Debugger entered--Lisp error: (void-function php-template-if-hook)
  php-template-if-hook()
  abbrev-insert(if #("if" 0 2 (fontified t face font-lock-keyword-face)) 414 416)
  #[(G73404 funs global) "[Byte code]"
  apply(#[(G73404 funs global "[Byte Code]"
  (lambda (&rest --cl-rest--) (apply #[... "[Byte Code]"
  expand-abbrev()
  self-insert-command(1)
  c-electric-paren(nil)
  call-interactively(c-electric-paren nil nil)

Эта ошибка возникает даже тогда, когда я использую стартовый комплект emacs. Кто-нибудь исправил подобную проблему?

Я использую php-mode.el из начального набора emacs, который включает в себя версию nxhtml. Я пытался использовать php-mode-1.5.0 до сих пор безуспешно. Я даже пытался использовать последнюю версию nxhtml(2.2), но ошибка все еще сохранялась. Мне пришлось скопировать и вставить все определения функций, отсутствующие в mewde, чтобы он работал с относительной рассудительностью. Я должен сказать, что это добавляет некоторую ценность, хотя.:)

Забавно то, что эти проблемы кажутся мне единственной проблемой Ubuntu Karmic, я использовал те же вещи в emacs на opensuse 11.0 и 11.1 без единой проблемы.

Благодарю.

1 ответ

Решение

Проблема в том, что что-то пытается вызвать неопределенную функцию 'php-template-if-hook,

Было бы полезно, если бы вы предоставили ссылку на то, где вы нашли php-mode.el вы используете, потому что, кажется, их несколько.

Символ 'php-template-if-hook не является частью php-mode.el на sourceforge, так что у вас либо другая версия, либо в вашем.emacs есть что-то другое, что вызывает проблему. Похоже, что-то вызывает вставку аббревиатуры, которая приводит к php-template-if-hook, Примечание: похоже, что люди, переполненные стеком, используют php-режим из sourceforge, поэтому я рекомендую перейти к этому.

Быстрый поиск в Google находит это php-mode.el, который определил 'php-template-if-hook быть:

(defun php-template-if ()
  "Insert an if statement."
  (interactive)
  (let ((start (point)))
    (insert "if ")
    (insert "(") ; +
    (when (php-template-field "condition" nil t start (point))
      (insert ") {") ; +
      (newline-and-indent)
      (setq start (point-marker))
      (insert "\n}")
      (php-indent-line-2)
      (goto-char start))))

Но решение вашей проблемы путем вырезания / вставки случайного кода из трубок не является хорошим долгосрочным решением.

Другие вопросы по тегам