2014-01-14 79 views
0

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

+0

一般来说,GraphViz不会自动重绘更改后的'.dot'文件,而不会自动运行任何程序。必须有一些其他程序检查,以查看任何图像文件是否过时了.dot文件。一个经常运行的'make'和一个合适的'makefile'就可以做到这一点。我自己并不使用Textmate,但我怀疑它可能是Textmate为您做的。我在标签列表中添加了“Textmate”,以查看Textmate专家是否可以提供帮助。 – Simon

回答

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