Emacs lua-mode问题: (void-function interactively-called-p)
我正在尝试安装适用于emacs 21.4.1的lua-mode(版本20110428)并遇到问题。在我的.emacs文件中,我有:
(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)
我使用了这里的安装说明:http://lua-mode.luaforge.net/ 此外,在我的.emacs.d/ dir中,我有包含lua-mode.el的lua-mode/。所有这些文件都有正确的权限。
但是,当我使用emacs打开新文件“test.lua”时,我在scratch缓冲区中得到以下消息:
“文件模式规范错误:(void-function called-interactively-p)”
我正在运行RHEL5。我在网上寻找了很多帮助,但没有找到太多帮助。有人有什么建议吗?我不知道任何LISP(因此很难调试lua-mode.el),除了一些快捷键,我不太了解emacs。
谢谢。
原文链接 https://stackoverflow.com/questions/6845464
我认为 Emacs 21.4 中根本不存在 `called-interactively-p' 函数。
但实际上,我认为你说的是 XEmacs,而不是 GNU Emacs。请注意,这是两个不同的项目。
你应该将 XEmacs 升级到 21.5 beta 版本,或者更好(因人而异),可能使用 GNU Emacs 23。
你正在使用一个 Emacs 版本,它没有带有 1 个参数的 "called-interactively-p" 函数的版本(函数的早期版本没有带有参数)。你可以通过将此解决方法(发布在此处:http://paste.lisp.org/display/115598/raw)放入 Emacs 初始文件中来解决此问题:
(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)))))
但是,当我这样做,并尝试使用 Emacs 22 进行测试时,由于某些函数不存在,我还遇到了其他错误,因此如果您想要使用 lua-mode,则可能必须升级 Emacs 版本。
在 Emacs 23 和 24 中,“lua-mode.el”似乎可以使用(我不是 lua 程序员,无法进行适当的测试),以现有的 lua 文件为例,但是当您尝试创建新的 lua 文件时,它会崩溃。实际上,这是“lua-mode.el”代码中的一个错误,当您尝试打开一个新的 lua 文件时会发生此错误(如果您尝试打开现有的 lua 文件则不会发生)。问题是在“lua-unmark-multiline-literals”函数中的第1218行的“remove-text-properties”调用中,它使用的是一个从“1”开始且结束值为“0”的“remove-text-properties”函数(对于新文件,它是“0”因为缓冲器大小为“0”)。您可以通过将第1218行更改为以下方式来解决此问题:
(remove-text-properties (or begin 1)
(or end
(if (> (buffer-size) 0)
(buffer-size)
(or begin 1)))
'(syntax-table ()))
您应该让“lua-mode.el”的开发者知道此错误,并可能要求支持早期的 Emacs 版本。
我碰巧是lua-mode
的维护者。当我在网上冲浪时,幸运地发现了你的问题,并且在有人慷慨地提供了called-interactively-p
函数的备用实现后,问题得到了解决。
同时,我必须承认,我很清楚在emacs23之前called-interactively
的逻辑已经发生了变化,但我没有在有人将其报告为错误之前就想着去修改它。这只是一个优化努力,因为Emacs最近进行了许多内部API更改,预先修复它们根本就不适合我的时间表。
实际上,我的做法是:
- 我将在最近的lua-mode中提供
called-interactively-p
的备用实现,这将成为下一个版本的内容。 - 我想鼓励你以问题报告的形式在此处反馈此类故障。我会定期阅读,并且欢迎你的反馈以及自己的改进。
谢谢,immerrr。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我也遇到了这个问题。我能够通过更改以下内容来解决它:
(add-to-list 'auto-mode-alist '("\\.lua\\'" . lua-mode))
我不敢说我知道这是为什么会有所不同:我从加载 javascript 模式的某些逻辑推断出来,它使用了类似的语法来描述文件扩展名。