Problema do modo PHP emacs23
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.
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.