使用Org-Mode时,我正在寻找一种自动生成格式良好的组织模式链接的解决方案。
例如,要创建指向目录下所有c ++文件的链接,我需要以下内容:
更新:我刚试过@DamianChrzanowski建议,org-fstree包。但是我对结果感到有点失望:
html导出结果甚至更糟:
我的结论是包装无法满足我的需求。无论如何,感谢@DamianChrzanowski的回答。
答案 0 :(得分:3)
安装了linux tree command后,我附带了满足我所有需求的以下脚本:
#+NAME: createTree
#+BEGIN_SRC sh :results drawer :var toInclude="*.org" :var toExclude="" :var directory="./" :var createLink="true" :exports none
set -e
buffer=$(mktemp /tmp/buffer.XXXXXXXXX)
current_directory=$(pwd)
cd $(eval echo "$directory")
tree -a -P "$toInclude" -I "$toExclude" -if --noreport --prune \
| sed "s/.//" | sed "s/^\///" > "$buffer"
if [ $(grep --regexp="$" --count "$buffer") -eq 0 ]; then
echo "**ERROR empty list**"
else
for f in $(cat "$buffer")
do
filename=$(basename $f)
ext="${filename##*.}"
baseFilename="${filename%.*}"
if [ -f $f ]; then
# removes org extension (only)
if [ "$ext" = "org" ]; then
filename="$baseFilename"
fi
# creates org link (or not)
if [ "$createLink" = true ]; then
echo "$(echo "$f" | tr -cd / | tr / \\t)+ [[file:"$directory/$f"][$filename]]"
else
echo "$(echo "$f" | tr -cd / | tr / \\t)+ $filename"
fi
else
echo "$(echo "$f" | tr -cd / | tr / \\t)+ $filename/"
fi
done
fi
rm "$buffer"
cd "$current_directory"
#+END_SRC
如果要创建C ++代码的文件树,只需使用以下内容:
#+CALL: createTree(toInclude="*.[hc]pp",toExclude="*test*",directory="~/MyProject")
另请注意,导出/发布组织模式文档时,可以将其用作站点地图的替代方法。只需使用:
* My site content
#+CALL: createTree(toInclude="*.org",toExclude="Setup")
以前的#+CALL
命令会生成类似我在问题中发布的树。在Org HTML导出之后,您将获得如下内容:
命令参数/选项是:
注1:您可以将脚本存储在任何.org文件中,并通过Library-of-Babel加载它:
在init.el
文件中:
(org-babel-lob-ingest "~/path/to/your/scripts.org")
注2:我回答了我自己的问题,但我仍然接受纯粹的Emacs-Lisp解决方案。
答案 1 :(得分:1)
通常有一个包裹:-) org-fstree
答案 2 :(得分:1)
我刚刚尝试了 org-fs-tree,它似乎很好地完成了这项工作。这是一个较新的包,看起来 .container {
display: flex;
}
.container:nth-of-type(even) {
flex-direction: row-reverse;
}
是孤立的。