以编程方式生成组织模式对象

时间:2014-03-14 17:14:51

标签: emacs elisp org-mode

我想生成包含组织模式文本的字符串,而不实际硬编码语法。例如,我想运行诸如(org-generate (org-generate-heading "heading" (org-generate-plain-list '("foo" "bar" "baz")))之类的函数,它将返回:

* heading
  - foo
  - bar
  - baz

换句话说,我想创建具有任意复杂性的组织模式文档,而不需要对星号和缩进等语法特征进行微观管理,只需通过调用带有参数的函数来返回一些Org对象。有可能吗?也许通过org-element

1 个答案:

答案 0 :(得分:3)

INITIAL (2014年3月14日):第一份草稿。

编辑(2014年3月15日):创建并修订了名为example的函数。 let-bound变量org-file的路径必须与现有的org-mode文件一致。由于使用以main-heading开头的列表中的变量存在明显的限制,因此此时未使用let-bound变量sub-heading'( - 即,这两个变量是在这种情况下不被承认。来自org-capture的{​​{1}}函数已被修改为包含 函数org-capture.el的内容,而后者又被修改为消除{的前两个元素{1}}(又名org-capture-set-plist) - 两个条目(即org-capture-entryorg-capture-templates)用于从用户界面手动选择模板,在生成时不需要org buffer以编程方式执行此:key。此外,已删除与手动选择模板相关的函数:description部分。

编辑(2014年3月16日):根据@sds和@lunaryorn在以下主题中提供的课程修改变量和列表处理:https://stackoverflow.com/a/22440518/2112489添加了四个可选< / em>传入变量 - (1) example; (2) org-capture; (3) main-heading;和(4) sub-heading-headline。该示例现在可以交互方式工作,也可以使用以下格式评估函数:sub-heading-complete

编辑(2014年3月19日):plain-list现在是一个需要传入变量的非交互式函数 - 文档字符串已更新。创建了一个名为(org-generate "PROJECT" "Thesis" "** Thesis\n:PROPERTIES:\n:END:" '("a" "b" "c"))的函数,该函数使用org-generate的新格式。


  
example

  
org-generate

Example http://www.lawlist.com/images/programmatic_org_file.png