Org mode与Clojure - 无法进行导出

4

编辑 我也在emacs.stackexchange上提出了这个问题

我是一个相对新手,已经设置好我的emacs(24.4.1)以按照此处所述的方式与clojure一起工作。

大致意思是我现在正在使用来自git的最新org-mode,并将其加载到我的init.el中(顺便说一句,我正在使用prelude),如下所示:

   (add-to-list 'load-path "~/repos/org-mode/lisp")
   (require 'org)
   (require 'ob-clojure)

我想使用org来编写一个可导出为markdown的文学式clojure程序。Clojure和Babel已经能够良好地工作,评估也正常运行,但当我尝试导出我的org文件时会出现错误。
    load-with-code-conversion: Symbol's value as variable is void: p

当我设置 toggle-debug-on-error 时的堆栈跟踪如下:

    Debugger entered--Lisp error: (void-variable p)
        eval-buffer(#<buffer  *load*> nil
             "/Users/krisfoster/repos/org-mode/lisp/ox.el" nil t)
             ; Reading at buffer position 229233
        load-with-code-conversion("/Users/krisfoster/repos/org-mode/lisp/ox.el"
             "/Users/krisfoster/repos/org-mode/lisp/ox.el" nil t)
        autoload-do-load((autoload "ox" "Export dispatcher for Org mode.\n
            \nIt provides an access to common export related tasks in a         
            buffer.\nIts interface comes in two flavors: standard and 
            expert.\n\nWhile both share the same set of bindings, only the 
            former\ndisplays the valid keys associations in a dedicated 
            buffer.\nScrolling (resp. line-wise motion) in this buffer is done 
            with\nSPC and DEL (resp. C-n and C-p) keys.\n\nSet variable `org-
            export-dispatch-use-expert-ui' to switch to one\nflavor or the 
            other.\n\nWhen ARG is \\[universal-argument], repeat the last 
            export action, with the same set\nof options used back then, on 
            the current buffer.\n\nWhen ARG is \\[universal-argument] \\
            [universal-argument], display the asynchronous export 
            stack.\n\n(fn &optional ARG)" t nil) org-export-dispatch)
        command-execute(org-export-dispatch)

我试图通过在我的init.elrequire各种org导出包(也就是从org git repo的克隆中),来解决这个问题。但是没有用 - 实际上,这引发了更多的问题。我已经尝试过调试,但是无法找出问题在哪里。我怀疑我需要引入一些东西,但不知道是什么。
我的init.el在这里 - init.el gist 有人有任何想法我做错了什么吗?
提前感谢。

你可以考虑在http://emacs.stackexchange.com/上发布这个问题,更多的Emacs专家会看到它 :) - Shlomi
哦!多好的主意。会去做的。 - Kris
我已经在 emacs.stackexchange 上发布了。但如果有人看到并知道答案,请随时告诉我。谢谢。 - Kris
1个回答

1

在您发布此帖子的时候,org-mode存在一个错误,因此可能已经解决了该问题。但是,我注意到您的init文件存在一些问题。以下是一些可能有用的内容:

使用lisp包管理器(ELPA)来安装你的软件包,这将使你的生活变得更加轻松。org维护了一个ELPA仓库,该仓库定期更新,比仅拉取repo要稳定一些。他们有一个称为org-plus-contrib的版本,我使用并且觉得非常好。只需添加(add-to-list 'package-archives'("org" . "http://orgmode.org/elpa/"))。
你说你正在运行prelude,但我在你的init文件中没有看到任何加载prelude的内容(只有调用关闭guru-mode的函数)。Prelude相当不错且很流行,但如果你要使用它,你需要按照prelude的方式去做。例如,prelude带有org-mode并使用ELPA安装它。你需要小心,以免混淆org版本。我发现另一种替代prelude非常好,那就是Steve Purcell的emacs.d。我发现它更容易使用,但可能值得一试,因为它对Mac的支持非常好。请参见emacs.d
将你的emacs初始化脚本分解成单独的文件是一个非常好的主意。这样可以在你尝试跟踪问题时轻松地注释掉大量内容,并允许你专注于你想要工作的关键部分。我将我的init.el文件维护为一个org文件,并使用babel生成所有的lisp代码。你可以在github上查看它。我最初是从Purcell的emacs.d开始的,然后借鉴了很多内容去制作我的配置。虽然它不是如何配置emacs的好例子,但可能有助于你的设置。
我注意到你正在尝试将cider用作clojure代码的后端“评估器”。请注意,只有在你想要在org文件中有一些clojure块需要评估并使用结果时才需要这样做。如果你只想从你的org代码生成*.clj文件,则不需要这样做。相反,你只需要“tangle”你的org文件,这将生成更新的clj源文件,然后你可以继续工作。这使事情变得简单,并避免了当你尝试对你的org文件进行评估clojure代码并失败时出现的问题。还要注意,我认为你需要比仅仅将cider设置为后端评估器更多的东西-cide只是一个repl接口。你还需要一个repl。

非常好的回答 :) 谢谢您抽出时间来查看这个问题,尤其是它已经很久了! - Kris

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