我正在使用静态网站生成器Pelican来提供以.org
文件为基础的html个人wiki或知识库。 Pelican中内部内容的链接使用语法{filename}/path/to/file
。但是,由于我正在使用emacs org-mode,我还希望能够在org-mode中关注这些链接到相关文件。我希望我能编写一个简单的函数,允许org-mode遵循这样的链接并打开相关文件,而不会影响Pelican对内部链接语法的使用。我怀疑这可以通过org-add-link-type
和一个解析文件的正确绝对路径的函数来完成。但我的elisp-fu很弱,而且我不确定如何继续。帮助赞赏!
编辑:举个例子,我可能在组织文件中有[[file:{filename}/path/to/file.org]]
之类的链接。有没有办法让org打开文件通过替换(可能通过regexp?){filename}
的绝对文件路径,但也不会改变原始链接,以便Pelican仍然可以正确处理它?
答案 0 :(得分:1)
我想你想要这样的东西:
#+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>
答案 1 :(得分:1)
使用John Kitchen的原始答案作为构建的基础(以及this answer),我提出的最佳功能如下:
(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提供相对链接。