2009-11-18 45 views
2

我一直同时在Ubuntu上Emacs23使用PHP模式得到这个错误和类似的错误:Emacs23 PHP模式问题

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 starter kit,它捆绑了nxhtml版本。我尝试使用php-mode-1.5.0仍然没有成功。我甚至尝试使用最新版本的nxhtml(2.2),但仍然存在相同的错误。我不得不复制并粘贴 所有从mewde中缺失的函数定义,以便它以相对的理性工作。我不得不说,它确实增加了一些价值。 :)

有趣的事情,这个问题似乎是对我来说,我使用的在openSUSE 11.0和11.1 Emacs的同样的东西没有一个单一的问题,Ubuntu的业报唯一的问题。

谢谢。

回答

1

的问题是,一些试图调用未定义功能'php-template-if-hook

如果您提供了一个链接,您可以找到您正在使用的php-mode.el的位置,这很有用,因为似乎有several

符号'php-template-if-hook不是sourceforge上的php-mode.el的一部分,所以您要么有不同的版本,要么导致问题的.emacs中有其他内容。它看起来好像是触发了一个缩写插入,导致'php-template-if-hook注:it looks like人栈溢出使用从SourceForge php的模式,所以我建议你移动到一个。

快速谷歌搜索找到这个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)))) 

但是,解决由切割从intertubes /粘贴随机码你的问题不是一个很好的长期解决方案。

+0

我已经用必要的信息更新了问题。我已经合并了php-mode.el,我已经将它与一个定义了所有这些函数的函数合并在一起,并且它似乎迄今为止工作正常,并且存在一些问题。我不知道的是,为什么我似乎是唯一有这个问题的人,即使使用emacs22,也只有在Ubuntu Karmic中,我在opensuse 11.0和11.1上的emacs上使用了相同的东西,没有出现任何问题。 – partoa 2009-11-19 09:09:45

+0

很有可能,您在opensuse上使用的Emacs有不同的东西捆绑在一起。原来的错误是因为一个函数没有被定义。它不是Emacs的一部分(不管操作系统如何),所以在这两个系统上安装了不同的支持库。 – 2009-11-19 13:56:19

+0

我想。我甚至尝试用来自source伪造的一个来改变cc模式,以查看会发生什么,仍然发生同样的错误。我对Elisp不熟悉,否则我会选择调试底层系统,所以它不必调用未定义的函数,或者它不会抛出错误,就像opensuse一样。无论如何,这个问题现在已经解决了。感谢您的答复。 – partoa 2009-11-20 11:32:22