Emacs org-mode gnuplot:定时器出错:(void-variable data-file)

8
每次我在emacs的org-mode中调用org-plot/gnuplot命令时,都会出现相同的错误信息Error running timer: (void-variable data-file)。我使用的是Debian Jessie上的emacs 24.4.1以及Mac Os上的emacs 24.5。这两个系统都有一个可用的gnuplot版本。我甚至尝试在没有.emacs文件的情况下运行emacs并执行该命令,但仍然会出现同样的错误。

2
展示你的代码。给出一个从 emacs -Q 开始的操作步骤。打开 debug-on-error 并显示回溯信息等。另外,我猜测你可能评估了一些代码(例如 lambda 表达式),它使用了一个词法变量(data-file),但是你只是从一个启用了局部变量声明的文件上下文中取出了它。 - Drew
1
谢谢,-Q选项让我知道gnuplot的某些内容没有正确编译。尽管仍然无法解决问题。 - Vu Nguyen
也遇到了同样的错误。 - djhaskin987
2个回答

5
这是一个错误。org-plot.el文件中的函数org-plot/gnuplot还没有更新以适应词法作用域变量。如果您已经安装了.el文件,可以在emacs安装中修复它。首先找到org-plot.el源文件(一种方法是执行)
m-x apropos ^org-plot/gnuplot$ 

然后在结果顶部点击文件链接,并替换org-plot/gnuplot函数中的最后一个表达式(使用c-m-f快速到达末尾)

(run-with-idle-timer 0.1 nil (lambda () (delete-file data-file)))

改为阅读

(run-with-idle-timer 0.1 nil (lambda (data-file) (delete-file data-file)) data-file)

原始代码期望lambda闭合动态数据文件变量,但现在是词法的。我的替换代码直接将值传递到lambda。

您需要保存修改后的文件,然后使用以下命令重新编译它:

m-x byte-compile-file

否则,您将只看到警告,.el文件已更新(但它仍会加载旧代码的.elc文件)。

如果这在较新版本的org中得到修复,我不会感到惊讶,但我尚未进行检查。


2

编辑:找到了!请参见下面的原始答案。在其中,我找到了提到data-file的行。原始源文件中该行周围的注释提到已经进行了更改以适应gnuplot 4。这与@vu-nguyen的评论一起,让我下载并编译gnuplot 4.6.7

我这样编译并安装它:

./configure --with-cwdrc --with-readline=gnu --enable-backwards-compatibility
make
sudo make install

然后它开始工作了。

原始回答

我删除了我的 elpa 文件夹并重新安装了我的 elpa 包,以确保我没有使用“脏”包文件。编辑:我甚至卸载了最新版本的 gnuplot 包并安装了旧版本(201403170.6.6),但没有任何帮助。

看起来唯一涉及 data-file 的包是 gnuplot:

gnuplot.el:2820: ("(gnuplot)data-file" nil "[_a-zA-Z0-9]+")

也许这是一个 bug?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接