[英]Emacs org-mode Python source blocks don't export with python-mode.el
我最近将Emacs设置配置为使用python-mode.el而不是python.el。 这种变化显然导致组织模式不再能够导出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
在我的配置中
我也有同样的问题。 当我跟踪导致此错误的原因时,我发现ox-html.el
中的org-html-fontifiy-code
导致了此错误。 特别是下面的代码块:
(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
将失败,并显示“ End of buffer”错误。
我以蟒蛇模式闻到鱼味; 也许他们安装了一些钩子函数或一些使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邮件列表中吗?
导出源代码时使用AFAIS,不会查询语言模式。
这是出口商的事。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.