我想插入目录下所有视频文件的org 链接形式的结果。
代码如下:
#+begin_src emacs-lisp :results value raw
(mapcar
(lambda (f) (format "[[%s]]\n\n" f))
(directory-files "赌博默示录/赌博默示录 第1季" nil ".flv"))
#+end_src
但是输出的结果带有elisp object represent的双引号。
#+RESULTS[(2020-11-03 08:45:22) ed17b1785bc832862173e211d54574ee45238bce]:
("[[第02话 火盖.flv]]
" "[[第03话 胜负.flv]]
" "[[第04话 破绽.flv]]
" "[[第05话 决死.flv]]
我只想要org的 [[file_link]]
这样的形式。应该怎么做?
mapcar 生成的是一个 list,你应该需要的是生成一个包含若干个 org link 的字符串,而不是列表。
参考:
#+begin_src emacs-lisp :exports results :results value replace raw
(let ((pictures (directory-files "~/Pictures/" t ".jpg"))
(link-str ""))
(dolist (pic pictures)
(setq link-str (concat link-str (format "[[%s]]\n\n" pic))))
link-str)
#+end_src
另外,如果你不想在 org 文档中显式的包含生成 video links 的代码,可以用 “Org Macro Replacement”。
用法可以参考我的 这篇文章。
在文档开头定义宏: #+MACRO: video-links (eval (format-videos-org-link))
在需要插入链接的位置调用宏: {{{video-links}}}
其中 format-videos-org-link
函数就是上面的函数,可以写在你的配置中,让org文档更加简洁。
(defun format-videos-org-link ()
(let ((pictures (directory-files "~/Pictures/" t ".jpg"))
(link-str ""))
(dolist (pic pictures)
(setq link-str (concat link-str (format "[[%s]]\n\n" pic))))
link-str))
感谢,elisp babel结果的 ""
最后还是有,不过这次只有最外层了。删掉比较容易。
Org Macro Replacement 方法也不错。挺好用的。
我查了下,是我的配置里含有这个的缘故。
(add-to-list 'org-babel-default-header-args:emacs-lisp
'(:results . "verbatim"))