在emacs组织中打开Pelican相对路径
我使用一个静态站点生成器Pelican来提供一个使用.org
文件作为其基础的html个人wiki或知识库。 Pelican中内部内容的链接使用语法{filename}/path/to/file
。 但是,由于我使用的是emacs组织模式,因此我也希望能够按照组织模式跟踪这些链接。 我希望有一个简单的函数可以编写,这样可以让组织模式遵循这样的链接并打开相关文件,而不会影响Pelican使用内部链接语法。 我怀疑这可能是通过org-add-link-type
和一个解析文件正确绝对路径的函数来完成的。 但是我的elisp-fu很薄弱,我不确定如何继续。 帮助赞赏!
编辑 :举个例子,我可能在一个组织文件中有一个像[[file:{filename}/path/to/file.org]]
的链接。 有没有办法让组织打开文件,通过替换{filename}
的绝对文件路径(也许通过regexp?),但也不会改变原始链接,以便Pelican仍然可以正确处理它?
我想你想要的东西是这样的:
#+BEGIN_SRC emacs-lisp
(org-add-link-type
"pelican"
(lambda (path) (org-open-file path))
;; ; export
(lambda (path desc backend)
(cond
((eq backend 'html)
(format "{filename}/%s" (file-relative-name path))))))
#+END_SRC
链接到内部内容鹈鹕:/Users/jkitchin/blogofile-jkitchin.github.com/_blog/blog.org
#+BEGIN_SRC sh
pwd
#+END_SRC
#+RESULTS:
: /Users/jkitchin/blogofile-jkitchin.github.com/_blog
出口到:
<p>
Link to internal content {filename}/blog.org
</p>
以John Kitchen的原始答案为基础(与此答案一起),我提出的最佳功能如下:
(org-add-link-type
"pelican"
(lambda (path) (org-open-file path))
;; ; export
(lambda (path desc backend)
(cond
((eq backend 'org)
(format "[[file:{filename}/%s][%s]]" path (or desc "")))
((eq backend 'html)
(format "<a href="%s">%s</a>" path (or desc "")))
((eq backend 'md)
(format "[{filename}/%s](%s)" path (or desc ""))))))
取决于用于org-publish
的后端,该功能将为org,html或markdown提供相关链接。