在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提供相关链接。

链接地址: http://www.djcxy.com/p/30647.html

上一篇: Open Pelican relative path in emacs org

下一篇: Copy links from image