Emacs Org-Mode & Literate Haskell(英语:Literate Haskell)



在org模式下,以冒号开头的行被格式化为源代码。( http://orgmode.org/manual/Literal-examples.html )

在识字的 Haskell 中,源代码行以大于符号开头。

我想用组织模式的markdown写有文化的Haskell,这是我目前的首选格式。

由于我假设我无法更改Haskell编译器,我的问题是:

我可以以某种方式在组织模式下使大于签名的代码行标记吗?(我试图自己找到它,但由于org.el是一个865k文件,22k位置,我仍然迷路了。

不是你问题的确切答案,而是我如何使用org编写识字的Haskell的示例:https://github.com/haroldcarr/make-mp3-copies

README.org 是识字的Haskell,MakeMP3Copies.hs是从.org文件中"纠结"出来的Haskell文件。

我导出为 HTML 并发布在我的博客上:http://haroldcarr.com/posts/2013-09-11-flac-to-mp3-via-haskell-shelly-and-ffmpeg.html

该 README.org 也可以在 github 上自动渲染(尽管自动渲染中有一些仅用于 HTML 的内容,我没有花时间修复)。

我基本上有相同的动机,为我的Haskell(Bird风格)识字程序使用组织模式标记。我最终使用了多模式,它允许将多个 emacs 主要模式用于同一缓冲区中的不同区域(还有其他模式,但多模式适合我的要求)。我制作了 haskell-org,它允许通过多模式在单个缓冲区中使用 org-mode 和 haskell-mode。

此博客文章中的更多详细信息。该设置运行良好,我可以将其用于Haskell编码。

我有点晚了,但我最近开始研究 99 个 Haskell 问题,并决定在组织模式文件中收集我的工作。

识字编程的orgmode方式(据我所知)是将源代码块封装在BEGIN/END块中。例如

#+BEGIN_SRC hs :tangle yes
myReverse :: [a] -> [a]
myReverse l = myReverse' l []
myReverse' [] accu = accu
myReverse' (x:xs) accu = myReverse' xs (x:accu)
#+END_SRC

然后,这样的结构化组织模式文档可以是

  • 出口导出是通过后端将 orgmode 文件转换为其他几种文件格式之一。其中一些格式是PDF,LateX或HTML。

  • 纠结这朝着识字编程和编织的方向发展。代码块可以导出为纯源文件。这就是我在 99 个问题文件中所做的。

  • 执行可以执行源代码块,并且此执行的结果可以直接放置在 orgmode 文件中。我还没有为哈斯克尔尝试过这个。

你可以看看我在github上的尝试:https://github.com/dischoen/H99在那里,我将orgmode文件纠结为两个Haskell文件,一个模块和一个测试工具,然后可以在ghc或ghci中进行测试。

所以,显然这不是使用 org 的预期方法。

这样做的主要问题是,org-mode 和 haskell 模式都是主要模式。所以我不能并行使用它们。

尽管如此,这就是它的工作原理,它是一个黑客,我不确定副作用..:

在 emacs 中查看文件时,(a?) 代码触发器似乎位于 org-activate-code (org.el) 中,但这不用于导出。对于HTML导出,我也不得不触摸org-html.el。

我改变了:

在 org.el 第 5378 行中,函数 org-activate-code from

"^[ t]*\(:\(?: .*\|$\)n?\)"

"^[ t]*\([:>]\(?: .*\|$\)n?\)"

在 org-html.el 第 1508 和 1516 行中,函数 org-export-as-html 来自

(string-match "^[ t]*:\(\([ t]\|$\)\(.*\)\)" line)

(string-match "^[ t]*[:>]\(\([ t]\|$\)\(.*\)\)" line)

和(第 1516 行)

(string-match "^[ t]*[:>]\(\([ t]\|$\)\(.*\)\)"

看着它,我认为这必须适应人们打算使用的每个出口渠道。

最新更新