开发者

Emacs lua-mode issue: (void-function interactively-called-p)

I'm trying to install lua-mode (version 20110428) for emacs 21.开发者_如何转开发4.1 and am having problems. In my .emacs file I've got:

(add-to-list 'load-path "~/.emacs.d/lua-mode/")
...
(setq auto-mode-alist (cons '("\\.lua$" . lua-mode) auto-mode-alist))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)

I used the installation instructions from here: http://lua-mode.luaforge.net/ Also, in my .emacs.d/ dir I have lua-mode/ which contains lua-mode.el. All of those files have the correct permissions.

Except now when I use emacs to open the new file "test.lua" I get the following message in the scratch buffer:

"File mode specification error: (void-function called-interactively-p)"

I'm running RHEL5. I've looked online but haven't found much help. Does anyone have any suggestions? I don't know any LISP (so it's hard to debug lua-mode.el) and apart from a handful of shortcuts, I don't know that much about emacs.

Thanks.


You are using a version of Emacs that doesn't have the version of the "called-interactively-p" function that takes 1 argument (earlier versions of the function didn't take an argument). You can get around this by putting this workaround (posted here: http://paste.lisp.org/display/115598/raw) in your Emacs init file:

(condition-case nil (called-interactively-p 'interactive)
  (error
   ; Save reference to called-interactively-p in
   ; inglorion-system-called-interactively-p
   (fset 'inglorion-system-called-interactively-p
         (symbol-function 'called-interactively-p))
   ; Define called-interactively-p so that it discards
   ; its arguments and calls inglorion-system-called-interactively-p
   (fset 'called-interactively-p
         (lambda (&rest args)
           (inglorion-system-called-interactively-p)))))

However, when I did this and attempted to test with Emacs 22, I encountered other errors as well due to certain functions not being present so you may have to upgrade your version of Emacs if you want to use lua-mode.

With Emacs 23 & 24, "lua-mode.el" seems to work (I'm not a lua programmer so I couldn't test it properly) with existing lua files but breaks when you attempt to create a new lua file. It's actually a bug in the "lua-mode.el" code that occurs when you try to open a new lua file (it doesn't occur if you attempt to open an existing lua file). The problem is that the "remove-text-properties" call at line# 1218 (in the "lua-unmark-multiline-literals" function) is calling the "remove-text-properties" function with a begin value of "1" and an end value of "0" (it's "0" because the buffer-size is "0" for a new file. You can fix this by changing line# 1218 from:

    (remove-text-properties (or begin 1) (or end (buffer-size)) '(syntax-table ()))

to:

    (remove-text-properties (or begin 1)
                            (or end
                                (if (> (buffer-size) 0)
                                    (buffer-size)
                                  (or begin 1)))
                            '(syntax-table ()))

You should let the developer of "lua-mode.el" know about the bug and possibly also request support for earlier Emacs versions.


I happen to be the maintainer of lua-mode. I was lucky to stumble upon your problem when surfing on the internet and I the problem was solved after someone generously provided a backup implementation of called-interactively-p function.

Meanwhile, I must admit I was well aware that called-interactively logics were changed somewhere before emacs23, but I didn't bother changing it until someone would have filed it as a bug. This is merely an effort optimization since there've been numerous internal API changes in Emacs recently and fixing them preemptively simply doesn't fit into my timetable.

The bottomline is that:

  1. I'll provide the backup implementation of called-interactively-p within lua-mode in nearest future which will get to next release.
  2. And I'd like to encourage you to file such malfunctions as bugreports here. I'm reading them regularly and your reports as well as your own hacks are welcome upstream.

Cheers, immerrr.


I think the function `called-interactively-p' just did not exist in Emacs 21.4.

But actually, I think you are talking about XEmacs, not GNU Emacs. Note that these are 2 different projects.

You should upgrade your XEmacs to 21.5 beta, or better (YMMV), use GNU Emacs 23 probably.


I had this problem as well. I was able to fix it by changing it to say:

(add-to-list 'auto-mode-alist '("\\.lua\\'" . lua-mode))

I can't claim to know why this makes a difference: I extrapolated from some other logic to load javascript mode which used a similar syntax to describe the file extension.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜