Graphviz不刷新

时间:2014-01-14 17:37:28

标签: textmate graphviz

直到最近,当我在TextMate中保存对.dot文件的更改时,Graphviz会检测到更改并重绘。现在它没有。我已经尝试将文件移动到不同的位置无济于事。现在所有文件都是如此。

1 个答案:

答案 0 :(得分:1)

我不使用TextMate,因此我无法提供特定于TextMate的答案(尽管我确实找到了可能有用的this answer on SuperUser)。我想也许是文件夹操作,但它们似乎只在将文件添加到文件夹时起作用,而不是在更改现有文件时。所以我决定寻找一个特定于bash的答案。我遇到了fswatch。使用它,你可以完成你想要的。

创建以下文件夹结构:

folder structure

我实施此方式的方式,fswatchrundot.sh必须与您的Graphviz文件位于同一文件夹中。

rundot.sh遍历您的Graphviz文件并在必要时编译它们:

#!/bin/sh

graphvizExtension=gv #Change "gv" to the extension you use for your Graphviz files
graphicFormat=png #Change "png" to the file format you are using

for gvfile in *.$graphvizExtension
do
    filename=$(basename "$gvfile")
    outfile="../output/${filename%.*}.$graphicFormat" #build output file name
    if [[ ! -f $outfile || $gvfile -nt $outfile ]]; then
        #output file doesn't exist or Graphviz file is newer than output file
        echo "compiling" $gvfile "to" $outfile
        dot -T$graphicFormat "$gvfile" -o"$outfile"
    else
        #This is mainly for testing. You can delete the else clause if you want
        echo "not necessary to compile" $gvfile
    fi
done

转到终端中的gv文件夹并输入以下命令:

./fswatch . "./rundot.sh"

现在,只要gv文件夹发生更改,就会编译任何比相应输出文件更新的Graphviz文件,并将其输出存储在output文件夹中。您可以将输出文件存储在gv文件夹中,但是当输出文件更改时,它会再次触发rundot.sh。我的原始版本每次编译每个Graphviz文件,因此卷入无限循环。这个检查时间戳的版本将再次被触发,但不会在第二次更改任何输出文件,因此不会陷入无限循环。

提取基本文件名的代码来自from this answer