fix(compiler): defer open until successful compile, close viewer on :bd (#38)
* fix(compiler): defer open until successful compile, close viewer on :bd Problem: For long-running providers (e.g. `typst watch`), the viewer was opened immediately on toggle start by checking if the output file existed on disk. A stale PDF from a prior session satisfied that check, so a failed compile still opened the viewer. Additionally, viewer processes spawned via a table `open` command were untracked, so `:bd` killed the compiler but left the viewer running. Solution: Replace the immediate open with a `vim.uv.new_fs_event` directory watcher that fires only when the output file's `mtime` advances past its pre-compile value, proving the current session wrote it. Add `viewer_procs` and `open_watchers` tables with `close_viewer` and `stop_open_watcher` helpers; all `BufUnload` paths and `stop_all` now tear down both. Extract `do_open` to deduplicate the open branching logic across three call sites. * docs: document viewer auto-close behaviour and limitations in `open` field * ci: format
This commit is contained in:
parent
df0765a27f
commit
239f8a4769
2 changed files with 93 additions and 29 deletions
|
|
@ -93,7 +93,12 @@ Provider fields:~
|
|||
successful compilation in toggle/watch
|
||||
mode. `true` uses |vim.ui.open()|. A
|
||||
string[] is run as a command with the
|
||||
output path appended.
|
||||
output path appended. When a string[]
|
||||
is used the viewer process is tracked
|
||||
and sent SIGTERM when the buffer is
|
||||
deleted. `true` and single-instance
|
||||
apps (e.g. Chrome) do not support
|
||||
auto-close.
|
||||
|
||||
`reload` boolean|string[]|function
|
||||
Reload the output after recompilation.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue