最近,我将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发布于 2014-10-10 11:55:34
在我的配置中,
我也有同样的问题。当我跟踪导致这个错误的原因时,我发现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)),将文本属性(不改变点)放入文本属性,然后调用forward-char将点移动到(point-max),并停止then循环。
奇怪的是,在python源代码块中,put-text-property将点移动到(1+ (point))。因此,在最后一次迭代中,put-text-property将点移动到(1+ (point)),因此点已经位于(point-max),因此调用forward-char时会出现“缓冲区结束”错误。
我在python模式下嗅到了鱼的味道;也许它们安装了一些钩子函数或者什么东西来使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模式/python模式的邮件列表吗?
发布于 2014-03-21 19:59:21
导出源代码时,不查询语言模式.
这是出口商的事。
https://stackoverflow.com/questions/22565379
复制相似问题