繁体   English   中英

Emacs组织模式的Python源代码块无法与python-mode.el一起导出

[英]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

在我的配置中

  • GNU Emacs 24.3.1,
  • python-mode 6.1.3,
  • 组织20141006

我也有同样的问题。 当我跟踪导致此错误的原因时,我发现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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM