2014-01-14 120 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