Skip to content

Releases

0.3.2.10085

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 22 Oct 03:39

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 .cmd file, 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-points rows 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 / --bounds now 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.
  • --colors with 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 0 now 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-points are no longer kept in memory. They were never drawn, so the plot looks the same.

Win32 Signed Thumbprint

  • 1dddd32ca1ec85b6e676c66b8ceaa626ec905908

0.3.1.10084

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 01 Aug 15:46

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-range walks 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 nan or inf are 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

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 28 Jul 10:24

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-proportion covers 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 the PID: 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-stacks assigns 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,V gives 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

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 19 May 09:21
09b9205
  • 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 2 y, 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 y value 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

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 11 Apr 15:35
  • 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-names is omitted.

  • Fixed: app no longer requires vcruntime140.dll in clean environments (such as Windows Sandbox) - c979080

  • Win32 Signed Thumbprint: 1dddd32ca1ec85b6e676c66b8ceaa626ec905908

0.1.3.10058

Choose a tag to compare

@hanacryo-bot hanacryo-bot released this 10 Mar 09:14
  • New command line argument: --x-time-scale <NAME> - d53db29

  • Migrated to higher versions of rust & egui - afe971c

  • Fancy and informative legend and tooltip for crosshair point - 4e4676c

  • Win32 Signed Fingerprint : 1dddd32ca1ec85b6e676c66b8ceaa626ec905908