2014-01-14 2 views
0

До недавнего времени, когда я сохранил изменение в .dot-файле в TextMate, Graphviz обнаружит изменение и перерисовку. Теперь это не так. Я пробовал переместить файл в разные места безрезультатно. Это относится ко всем файлам.Graphviz не обновляет

+0

В общем, GraphViz не будет автоматически перерисовывать измененный файл '.dot' больше, чем любая программа будет запускаться автоматически. Должна быть какая-то другая проверка программы, чтобы увидеть, устарел ли какой-либо из файлов изображений в отношении своих файлов '.dot'. Регулярное выполнение 'make' с соответствующим' makefile' будет делать это. Я сам не использую Textmate, но я подозреваю, что это может быть Textmate, который делает это за вас. Я добавил «Textmate» в список тегов, чтобы узнать, может ли помочь эксперт Textmate. – Simon

ответ

1

Я не использую TextMate, поэтому я не могу предоставить конкретный ответ TextMate (хотя я нашел this answer on SuperUser, что может быть полезно). Я думал, что, возможно, Folder Actions, но они работают только при добавлении файла в папку, а не при изменении существующего файла. Поэтому я решил искать ответ, основанный на bash. Я наткнулся на fswatch. Используя это, вы можете выполнить то, что хотите.

Создайте следующую структуру папок:

folder structure

Путь я осуществил это, fswatch и rundot.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.

Смежные вопросы