flan-watch-ghost-mode paints each watched value inline, after the line holding the call that wrote it. An addition to the watch buffer and not a replacement: both can be on at once, and turning either off leaves the other running. The earlier note said ghost text was gated on a (watch ...) form in check.ml, because nothing in the table carries a source location. That is true of the table and the conclusion did not follow. The call site is in the buffer, and the name in the table is the string literal in it, so the anchor is searched for rather than reported. Nothing new is asked of the daemon. The head of the call is a defcustom regexp, because watch-i64 is a name the program's author chose in their own declare-c and only the C symbol behind it is fixed. Both pictures are painted from one reply in flan-watch--absorb, so they cannot disagree and there is no second watch request in flight. That meant the watch buffer could no longer be the subscription: arming and the timer now hang off flan-watch--consumers, and only the last consumer out disarms the table. Overlays are replaced wholesale on every repaint rather than followed through edits, which is the whole answer to invalidating one whose line moved. Only buffers shown in a window are scanned. Settled and written down: two sites of one name both show it and say so, because the table has one slot and the last writer wins; a watch in a loop shows the last value written, as the buffer does, because every better answer is the query UI this design exists to avoid; a stopped program's values say "last frame" and change face, since inline they sit in code that looks live; a site with no row is annotated only when the table reports overflow. syntax-ppss moves point and clobbers the match data, so calling it inside a re-search-forward loop and then reading match-string restarts the scan and the loop never ends. Everything is read out before the check now. emacs/test-flan-watch.el covers it, loaded from test-flan-cider.el the way test-flan-mode.el is, so no build change is needed. 203 checks, 0 failures.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%