Repository navigation
Releases
0.3.2.10085
tail-f_plot v0.3.2
A settings window for every option at runtime, an icon toolbar, and a reader that opens files like tail: a huge file opens at once and memory stays bounded.
Settings window
The new gear button on the toolbar (right of the legend-position button) opens a window that changes any command-line option while the plot keeps running.
- Display: X axis label and unit, Y unit and per-stack Y units, colors, line width, marker radius,
--max-points,--max-x-range, repaint interval, log Y, absolute X. - Files: the file groups in command-line order (add a copy, remove, reorder) and a form per file — path with Browse (the file does not have to exist yet), header and data rows, X column and its scale, delimiter, quote, fixed widths, merged delimiters, epoch column — plus a sheet of Y columns, each with a legend name and a stack. Columns can be picked by name from the file's header row, which is read in the background and refreshed while it is shown.
- Window:
--monitor(every monitor listed with its resolution) and--bounds. - Command line: the line that starts exactly these settings (the running executable, absolute file paths) with Copy. When the line holds
%, a second button copies it for a.cmdfile, where every%must be doubled.
How it applies:
- Every field is checked as you type. A field with a problem turns red with the reason, and so do its tab and its entry in the file list. OK is available while every field is valid; Apply only after a change.
- Applying goes through the command line: the window writes its settings as arguments and parses them like the real ones, so what is applied is exactly what the copied line starts.
- Files are read again only when what is read changes (file groups,
--max-points,--absolute-x). Everything else applies in place, and hidden series stay hidden as long as the series are the same. - The window is modal: owned by the main window and centered on its monitor. The main window keeps updating but takes no input until the settings window closes. Esc cancels (an open drop-down list closes first).
- Every label and field has a tooltip with its meaning and its command-line option.
Toolbar icons
The toolbar's text buttons and checkboxes are now icon buttons: Home (fit all), Zoom In, Zoom Out, Auto-X, Auto-Y, the Y scale, and Settings.
- Vector icons drawn every frame: sharp at any DPI, and they follow a live switch of the OS light/dark theme.
- Zoom In, Zoom Out, Auto-X and Auto-Y are filled while on. The Y scale button shows the current scale (linear or log) and switches to the other one on click.
- Hover a button for its tooltip.
A lone auto axis fits what is on screen
With both Auto-X and Auto-Y on (the default), nothing changes. With only one of them on, the auto axis now fits only the lines drawn inside the range the other, manual axis shows. Zoom Y to 3–5 K during a cool-down from 300 K and turn Auto-X on: the time axis trims to where the trace is inside that band instead of spanning the hours above it, and keeps growing as new rows land in the band. Auto-Y with a manual X works the same way.
- A line crossing the band counts over the part inside it, even when both of its points lie outside.
- Hidden series (legend click) no longer stretch the fit.
- When nothing is drawn inside the band, the axis keeps its last range.
- Turning Auto off before the first data no longer lets each stacked sub-plot fit itself, which made the linked X axes drift apart.
Files are read like tail
The file used to be held open, read from the top, and every row stayed in memory. Now:
- Only the newest
--max-pointsrows are read and kept, on the first load and for every appended burst. A 62 MB / 3 M-row file opened in 1.1 s instead of 6.5 s (debug build), memory stays bounded however long the plot runs, and what is drawn is unchanged. - The file is not held open between reads, so a logger can delete and re-create it.
- A file that is replaced, truncated or rewritten in place is detected (file identity, size, head/tail fingerprints) and read again from scratch. A file that disappears keeps its rows on screen until it comes back.
- File-change notifications now wake the window as soon as the file changes; polling stays as the fallback.
- Text that is not UTF-8 (e.g. a CP949 comment column) no longer drops the row, and a UTF-8 BOM is skipped.
- With
--fixed-width, leading spaces are kept, so right-aligned columns no longer shift.
--oneshot: render once, save a PNG
tail-f_plot.exe data.csv --y-cols 2 --oneshot view.png
For automated checks of the rendered view. The window waits until every file is read and the layout is stable, saves a screenshot, prints SCREENSHOT: <absolute path> and exits.
- Exit codes:
0= captured once the view settled,3= captured after a 15 s settle timeout (e.g. a file that never appeared),1= the PNG could not be written,4= no screenshot at all. - The window opens without taking focus and ignores the mouse, so a cursor over it cannot leave a crosshair or tooltip in the image.
--oneshot-settings <TAB>also saves the settings window on that tab (display,files,window,command-line) as<PNG stem>-settings.png.
Other
--monitor/--boundsnow place this instance's own window. The window used to be found by its title, which could move another instance showing the same files.- A window placed on a monitor with another DPI now ends up at the requested position and size.
- Hangul legend names and file paths render (Malgun Gothic fallback).
- The legend no longer shows empty parentheses after a value without a unit.
--colorswith no usable entry falls back to the default palette instead of crashing.- New resets for an option inherited from an earlier file group:
--y-names ""(back to default names) and--epochtime-proportion 0(back to following--x-proportion).--fixed-width 0now means delimiter mode in the first group too. - Non-finite Y values break the line instead of being drawn.
Compatibility notes
- With only one of Auto-X / Auto-Y on, the auto axis fits what is drawn inside the other axis' range, not every row. With both on (the default) the view is unchanged.
--y-names ""now means default names; it used to give one series an empty name.- Lines must end with LF or CRLF. A bare CR does not end a line.
- With
--fixed-width, columns are counted from the very start of the line; leading spaces are no longer trimmed first. - Rows older than the newest
--max-pointsare no longer kept in memory. They were never drawn, so the plot looks the same.
Win32 Signed Thumbprint
1dddd32ca1ec85b6e676c66b8ceaa626ec905908
0.3.1.10084
tail-f_plot v0.3.1
Bug-fix release: X columns that are not timestamps, and gestures inside a stack.
X axis collapsed when the X column is not sorted
Auto-fit took the first and last row of the visible window as the X min/max. That is true for a timestamp column, but not for an arbitrary X — plotting resistance against a sample temperature that ramps up and down, for example. With a first row at 338.9 K and a last row at 299.9 K the axis was handed a reversed range and shrank to a sliver around their midpoint, so --max-x-range looked ignored and the rightmost data was off-screen at the same time.
Every place that assumed a sorted X now checks whether the column actually is one:
- Auto-fit spans the column's real min/max.
--max-x-rangewalks back from the newest row to the first one outside the window. On a sorted X this is exactly the previous behaviour, so time-series plots are unaffected.- Hover snapping, the nearest-row lookup, and the "does this file draw a line here" test scan the visible range instead of binary-searching it.
Zoom inside a stack rescaled every sub-plot's Y
A wheel zoom, box zoom, click zoom-out, or pan re-applied the whole stack's previous bounds, so a gesture moved the Y range of sub-plots the cursor was nowhere near. With Auto-X/Auto-Y on (the default), the first gesture after opening a window was undone entirely.
X and Y are now pinned separately: the gesture's X goes to every sub-plot because the axis is linked, and only the sub-plot under the cursor changes its Y.
Two related fixes:
- Auto-X on its own (or Auto-Y on its own) forced the other axis back to its previous value every frame, which silently blocked zooming and panning that axis.
- Scrolling with the cursor over a legend zoomed the plot but was not recognised as a gesture, so the next frame's auto-fit erased the zoom.
Tooltip clipped at the sub-plot boundary
The tooltip was clipped to the hovered sub-plot's frame. A box near a stack boundary was cut off, which looked like it was being drawn underneath the neighbouring plot. It now overflows into the neighbouring sub-plots and is clamped to the stack area instead.
Other
- Rows whose X cell parses as
nanorinfare skipped. They cannot be plotted, and a non-finite X corrupted the sorted-X tracking and every range scan built on it.
Compatibility notes
None. Time-series plots render exactly as in v0.3.0; the changes only take effect for X columns that are not sorted, and for per-sub-plot Y behaviour inside a stack.
Win32 Signed Thumbprint
1dddd32ca1ec85b6e676c66b8ceaa626ec905908
0.3.0.10083
tail-f_plot v0.3.0
Multi-file overlay and vertically stacked sub-plots — plot several CSV files on one shared time axis, in one window.
Multiple files on one plot (--)
tail-f_plot.exe a.csv --y-cols 2,3 -- b.csv --y-cols 2 -- c.csv
--starts a new file group. Options omitted in a group — even the file path — inherit from the previous group; options given apply from that group onward.- Per-group options:
<CSV_PATH>,--x-col,--y-cols,--y-names,--y-stacks,--header-row,--data-start-row,--delimiter,--string-quote,--merge-delimiter,--fixed-width,--x-time-scale,--x-proportion,--epochtime-col,--epochtime-proportion.
Everything else is window-global and belongs to the first group. - X alignment: every file shares the first file's X origin (unless
--absolute-x). Files with different raw X units rescale per group via
--x-time-scale/--x-proportion. - Epoch-time alignment: when X columns are per-file elapsed times, give the epoch timestamp column via
--epochtime-col <N>(on the first file too — inheritance makes this automatic). Later files are then shifted by the wall-clock difference, so recordings that started at different times align exactly.--epochtime-proportioncovers epoch units that differ from the X column (e.g. epoch in ms, X in s). Files without the column fall back to the shared origin. - Resetting an inherited option:
--epochtime-col 0,--fixed-width 0,--merge-delimiter=false. - Duplicate series names are disambiguated automatically:
Temp,Temp(2),Temp(3), ... Default names get a file-stem prefix (a:Col2). - stdout status now prints one
WATCHING:/WAITING:line per file after thePID:line.
Vertical stacked sub-plots (--y-stacks)
tail-f_plot.exe temp.csv --y-cols 5 --y-stacks 1 --y-units K,A,V ^
-- current.csv --y-cols 5 --y-stacks 2 ^
-- voltage.csv --y-cols 4 --y-stacks 3
--y-stacksassigns each Y column a 1-based stack index; series with the same index share one sub-plot, different indices stack top-to-bottom.--y-units K,A,Vgives each stack its own Y unit (axis label, legend, tooltip), lifting the two-unit limit of a left/right dual axis.- The X axis is linked: dragging or zooming X in any sub-plot moves all of them together; Y stays independent per sub-plot. Auto-X fits the union of every stack's data.
- One hover drives everything: the vertical crosshair tracks the cursor's time position across all sub-plots, and the tooltip lists every visible
series (all stacks and files) at that time, each with its own unit. - Sub-plot frames are pixel-aligned — the y-axis strip is sized to the widest one, so gridlines and cursor positions match across stacks.
- The X axis (ticks + label) is drawn on the bottom sub-plot only; each sub-plot has its own legend.
Fixes and improvements
- Tooltip values are hidden where a file draws no line (before its first visible point or after its last) instead of reporting a stale nearest row.
- Axis ticks, legend values, and tooltip values now pick decimal places from the magnitude — 1e-4-scale readings no longer collapse to
0.0001. EXCEPTION:output no longer prints clap's misleading--escape tip (in tail-f_plot,--is the file-group separator).
Compatibility notes
--is now the file-group separator; it is no longer available as a bare argument escape.- The stdout status protocol emits N status lines for N files (previously always one). Single-file invocations are unchanged.
Win32 Signed Thumbprint
1dddd32ca1ec85b6e676c66b8ceaa626ec905908
0.2.2.10082
-
Multi-series tooltip and cursor crosshair - f91f8de
-
[feat] The hover tooltip now lists every visible series' value at the hovered row — row 1
x, row 2y, then one row per visible legend entry, sorted by value descending, each with a color swatch. -
[feat] When the cursor snaps to a plotted point, the crosshair and the row-2
yvalue follow that point's position and value. -
[feat] Faint dashed crosshair tracking the cursor across the plot.
-
[fix] Tooltip, legend, and crosshair colors now follow the active light/dark theme instead of being hardcoded for dark mode.
-
-
Dependency upgrade and API migration: egui/eframe 0.34, egui_plot 0.35, windows-sys 0.61 - f91f8de
-
Win32 Signed Thumbprint:
1dddd32ca1ec85b6e676c66b8ceaa626ec905908
0.2.1.10077
-
stdout status protocol, pipe-aware console detection, and UX improvements - 7661303
-
[feat] stdout status protocol: parent processes can parse the first line prefix (
PID:,HANA,EXCEPTION:) to determine launch outcome. -
[feat] Pipe-aware console detection: GUI help window is suppressed when stdout is piped by a parent application.
-
[fix] Window title no longer shows a leading
-when--y-namesis omitted.
-
-
Fixed: app no longer requires
vcruntime140.dllin clean environments (such as Windows Sandbox) - c979080 -
Win32 Signed Thumbprint:
1dddd32ca1ec85b6e676c66b8ceaa626ec905908