在 emacs org-mode 中打开 Pelican 相对路径
Open Pelican relative path in emacs org-mode
我正在使用静态站点生成器 Pelican 以 .org
文件作为基础来提供 html 个人 wiki 或知识库。 Pelican 中指向内部内容的链接使用语法 {filename}/path/to/file
。但是,由于我使用的是 emacs org-mode,我也希望能够在 org-mode 中跟随 links 到它们的相关文件。我希望我可以编写一个简单的函数,它允许 org-mode 遵循这样的 link 并打开相关文件,而不会影响 Pelican 对内部 link 语法的使用。我怀疑这可能是通过 org-add-link-type
和一个解析文件正确绝对路径的函数来完成的。但是我的 elisp-fu 很弱,我不确定如何进行。感谢帮助!
编辑:举个例子,我可能在 org 文件中有一个像 [[file:{filename}/path/to/file.org]]
这样的 link。有没有办法通过替换(可能通过正则表达式?){filename}
的绝对文件路径来让 org 打开文件,但也不会改变原始 link,以便 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
Link 到内部内容鹈鹕:/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 的原始答案作为基础(以及 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 提供相关链接。
我正在使用静态站点生成器 Pelican 以 .org
文件作为基础来提供 html 个人 wiki 或知识库。 Pelican 中指向内部内容的链接使用语法 {filename}/path/to/file
。但是,由于我使用的是 emacs org-mode,我也希望能够在 org-mode 中跟随 links 到它们的相关文件。我希望我可以编写一个简单的函数,它允许 org-mode 遵循这样的 link 并打开相关文件,而不会影响 Pelican 对内部 link 语法的使用。我怀疑这可能是通过 org-add-link-type
和一个解析文件正确绝对路径的函数来完成的。但是我的 elisp-fu 很弱,我不确定如何进行。感谢帮助!
编辑:举个例子,我可能在 org 文件中有一个像 [[file:{filename}/path/to/file.org]]
这样的 link。有没有办法通过替换(可能通过正则表达式?){filename}
的绝对文件路径来让 org 打开文件,但也不会改变原始 link,以便 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
Link 到内部内容鹈鹕:/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 的原始答案作为基础(以及 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 提供相关链接。