我最近将我的Emacs设置配置为使用python-mode.el而不是python.el。这个改变显然导致org模式不再能够导出python源块,因为我得到了
org-export-format-source-code-or-example: "End of buffer"
作为导出后的唯一消息,并且不生成导出文件。
我想知道为什么会这样,以及我能做些什么来解决它。我的python-mode.el是通过el-get安装的(不是我认为这很重要)。它在我的init文件中加载如下:
(add-to-list 'load-path "~/.emacs.d/el-get/python-mode/")
(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
以下是产生此错误的示例:
This is a test.
#+BEGIN_SRC python
print "Hello, World"
#+END_SRC
以下是我在消息中看到的内容:
Export buffer:
Exporting...
org-babel-exp processing...
org-export-format-source-code-or-example: End of buffer
答案 0 :(得分:1)
在我的配置中,
我有同样的问题。当我追踪导致此错误的原因时,我发现org-html-fontifiy-code
中的ox-html.el
会导致此错误。特别是下面的代码块:
(save-excursion
(let ((beg (point-min))
(end (point-max)))
(goto-char beg)
(while (progn (end-of-line) (< (point) end))
(put-text-property (point) (1+ (point)) 'face nil)
(forward-char 1))))
通常,在while循环的最后一次迭代中,put-text-property
之前的点通常具有值(1- (point-max))
,放置text属性(不会更改 point ) ,然后调用forward-char
将点移动到(point-max)
,并停止while循环。
奇怪的是,在python源块中,put-text-property
将该点移动到(1+ (point))
。因此,在上一次迭代中,put-text-property
将该点移动到(1+ (point))
,因此该点已经在(point-max)
,因此调用forward-char
将失败并显示“缓冲区结束”错误。
我在 python-mode 中闻到鱼的味道;也许他们安装了一些钩子函数或什么东西使put-text-property
移动点?我不确定。对于猴子补丁,这里是上面代码块的脏补丁:
(save-excursion
(let ((beg (point-min))
(end (point-max)))
(goto-char beg)
(while (progn (end-of-line) (< (point) end))
(let ((oldpos (point)))
(put-text-property (point) (1+ (point)) 'face nil)
(goto-char oldpos))
(forward-char 1))))
对不起我的懒惰,但是有人可以将这个发布到org-mode / python-mode邮件列表吗?
答案 1 :(得分:0)
AFAIS在导出源代码时,不会查询语言模式。
这是出口商的问题。