clojure 的 org 模式 - 无法导出工作

org mode with clojure - can't get export to work

编辑 我也在 emacs.stackexchange

上问过这个问题

我是一个相对的 emacs 新手,并且已经按照 here.

的描述设置了我的 emacs (24.4.1) 来使用 clojure

要点是我现在使用 git 的最新 org-mode 并将其加载到我的 init.el 中(顺便说一句,我正在使用前奏),如下所示:

   (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)

我试图通过 (require-ing 各种 org 导出包来解决这个问题,这些包在 org git 仓库的克隆中,即来自我的 init.el。但没有骰子 - 事实上,这会产生更多问题。我试过调试但无法找出问题所在。我怀疑我需要要求一些东西但不知道是什么。

我的 init.el 在这里 - init.el gist

有人知道我做错了什么吗?

提前致谢。

在您制作此 post 时 org-mode 存在错误,因此问题可能已解决。但是,我注意到您的初始化文件存在一些问题。一些可能有帮助的事情

  • 使用 lisp 包管理器安装包 (ELPA)。这将使您的生活 轻松。组织人员维护一个 ELPA 存储库,该存储库会定期更新,并且可能比仅拉入存储库更稳定一些。他们有一个名为 org-plus-contrib 的版本,我使用并发现它非常好。只需添加

    (添加到列表 'package-archives '("org" . "http://orgmode.org/elpa/"))

  • 你说你的 运行 前奏,但我在你的 init 中看不到任何正在加载前奏的东西(只是调用一个关闭大师模式的函数) . Prelude 很好,也很流行,但是如果你要使用它,你需要'drink the cool aid' 也就是按照prelude 的方式来做事。例如prelude自带org-mode,使用ELPA安装。您需要注意不要混合使用 org 版本。我发现另一种非常好的前奏曲是 Steve Purcell 的 emacs.d。我发现使用 YMMV 更容易一些,但它可能值得一试,因为它对 mac 有很好的支持。参见 emacs.d

  • 将您的 emacs 初始化脚本分解成单独的文件是一个非常好的主意。这使您在尝试查找问题时可以轻松地注释掉很多东西,并让您只专注于您试图开始工作的关键部分。我将 init.el 文件维护为一个 org 文件,并使用 babel 生成所有 lisp 代码。您可以在 github 上查看它。我最初是从 Purcell 的 emacs.d 开始的,然后自豪地借用(窃取)了其中的大部分用于我自己的配置。这不是如何配置 emacs 的好例子,但可能有助于您的设置

  • 我注意到您试图使用 cider 作为 clojure 代码的后端 'evaluator'。请注意,如果您想要在您的 org 文件中包含要评估然后使用结果的 clojure 块,则只需要执行此操作。如果您只想从您的组织代码生成 *.clj 文件,则无需执行此操作。相反,您只想 'tangle' 您的 org 文件,它将生成更新的 clj 源文件,然后您可以处理这些文件。这使事情变得更简单,并避免了当您尝试使用您的 org 文件执行尝试评估 clojure 代码但失败的操作时出现的问题。另请注意,我希望您需要做的不仅仅是将 cider 设置为后端评估器——cide 只是一个 repl 的接口。你也需要一个repl。