SATySFiを,ファイル保存時にbuildしたい.

1. LaTeX

LaTeXの場合は,latexmk-pvcオプションをつけると,保存時に自動でlatexmkしてくれる.

例:

latexmk -pvc -pdfdvi main.tex

Makefileに以下のように書いておくと便利.

watch:
  latexmk -pvc -pdfdvi main.tex

2. SATySFi

SATySFiの場合は,現時点では監視オプションはないため,他の方法を考える必要がある.

2.1. entr

entrを使うと,ファイルの変更を検知してコマンドを実行できる.

ls *.saty | entr -c satysfi main.saty

Makefileに以下のように書いておくと便利.

all:
	satysfi slide/slide.saty

watch:
	ls slide/slide.saty | entr make

(こんな書き方しても許されるんだ.)

2.2 エディタの機能を使う

大抵のエディタには,ファイル保存時にコマンドを実行する機能がある.

例.Vimの場合:

autocmd bufWritePost *.saty :call AutoSATySFi()<CR>

function! AutoSATySFi()
    let targetName = expand('%t')
    let result = system('satysfi ' . targetName)
    if empty(matchlist(result, '\!', 1))
        call Echomsg("succ")
    else
        let error_message = split(result,'!')[1]
        echo error_message
        split test.txt
        call Echomsg("err")
    endif
endfunction

function! Echomsg(type)
    if a:type == "succ"
        echohl StatusLine | echo "autoSATy:" | echohl ModeMsg | echon " Compilation complete"  | echohl None
    endif
    if a:type == "err"
        echohl StatusLine | echon "autoSATy:" | echohl ErrorMsg | echon " Compilation failed!" | echohl None
    endif
endfunction

エラー時の処理はもっと凝ったほうが良い.(quickfixに流すなど.)

3. まとめ

VSCodeを使ったほうがいい.