Pergunta

Eu continuo recebendo esse erro e erros semelhantes ao usar o modo PHP no EMACS23 no 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)

Quando eu digito if(, e o erro abaixo quando eu digito array( ou qualquer coisa que termine com array(, por exemplo 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)

Este erro é levantado mesmo quando eu uso o kit inicial do EMACS. Alguém consertou um problema semelhante?

O php-mode.el que eu uso é do Kit iniciante emacs que agrupa uma versão de nxhtml. Eu tentei usar PHP-Mode-1.5.0 Ainda não há sucesso. Até tentei usar a versão mais recente do NXHTML (2.2), mas ainda assim o mesmo erro persistiu. Eu tive que copiar e colar todas as definições de função ausentes de Mewde para trabalhar com relativa sanidade. Devo dizer que isso agrega algum valor. :)

O engraçado, esse problema parece ser um problema do Ubuntu Karmic para mim, eu estava usando as mesmas coisas nos emacs no OpenSUSE 11.0 e 11.1 sem um único problema.

Obrigado.

Foi útil?

Solução

O problema é que algo está tentando chamar a função indefinida 'php-template-if-hook.

Seria útil se você fornecesse um link para onde você encontrou o php-mode.el você está usando, porque parece haver de várias.

O símbolo 'php-template-if-hook não faz parte do php-mode.el No Sourceforge, então você tem uma versão diferente ou há algo mais nos seus .emacs que estão causando o problema. Parece que algo está desencadeando uma inserção do abrev que leva a 'php-template-if-hook. Observação: parece As pessoas no Stack Overflow estão usando o modo PHP do SourceForge, então eu recomendo mudar para isso.

Uma rápida pesquisa no Google encontra isso php-mode.el, que definiu 'php-template-if-hook ser:

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

Porém, resolver seu problema cortando/colando código aleatório dos intertubos não é uma boa solução de longo prazo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top