All notable changes to Repio, version by version.
$varname instead of $_varname_; the old syntax is still accepted for backward compatibilityscript action (e.g. $result) to run the command blocking and store its stdout in a variable; leaving the field empty keeps the previous non-blocking fire-and-forget behaviour|$varname to the arguments of a run_program / run action to capture the program’s stdout: e.g. --flag value|$out; blocking when a variable is specified, non-blocking otherwise$varname now expands in the run_program / run file path field, not only in argumentsset_var string values — assigning a non-numeric value (e.g. dir=C:\Scripts) was silently coerced to 0.0; values are now stored as strings when they cannot be evaluated as a number; arithmetic expressions still work correctlylike() returns count — like("needle", $text) now returns the number of non-overlapping occurrences (integer) instead of boolean; backward-compatible: 0 is falsy, 1+ is truthy; enables expressions like like("err", $log) > 1Ctrl+F / F3 now searches across every visible column (type, coordinates, key, comment, etc.) instead of comment only; also works in the Logs tabstop_all() ranCtrl+/ or right-click menu toggles rows as commented; commented rows shown as gray overstrike text and skipped during playbackinclude row → “Open in New Tab” opens the referenced filerepio/platform/ abstraction layer; Windows uses Windows.Media.Ocr API (zero external install); macOS Vision framework plannedscreenshot action comment "label|$varname" triggers text recognition after capture and stores result in a variablelike() function in if_var conditions — like("needle", $text) performs case-insensitive substring match; works with string literals and variablesis_commented); backward-compatible with older filesVariableStore module with $varname interpolation syntax; variables shared across all nested loops and includesloop_start Comment field accepts a variable name; that variable is set to the 1-based iteration index before each iteration body executesset_var action — Comment = name=expression; evaluates the right-hand side as an arithmetic expression (supports + - * / ** % and $var references), stores result; not yielded to player (pure side-effect)if_var action — Comment = boolean condition (e.g. $i > 3, $counter == 5); conditionally executes a block using the same else / end_if markers as if_color; supports all Python comparison operators$name substitution applied in: type text, delay_ms expressions, script shell commands, run_program argumentslabel & goto actions — named position markers and jump instructions; goto propagates through any nesting depth via exception mechanism and restarts the iterator from the target label; variable store preserved across goto restartsgoto type switches Comment field to a Combobox listing all label names in the current scenarioset_var rows in purple, if_var in green (same as if_color), label in gray italicif_color / else / end_if structured blocks; checks pixel color at (x, y) with per-channel tolerance; executes if-body or else-body depending on resultbreak action — exits the innermost loop_start/loop_end block immediatelyexit action — stops all macro playback completely (equivalent to pressing Esc)if_color rows: reads pixel at (x, y) and fills the color field automaticallydx) for if_color: per-channel tolerance 0–255if_color/end_if blockif_color/else/end_if in green, break/exit in orangewait action type — synonym for pause, same timing behaviour and visual stylinginclude files for all subsequent rows.repio file; fires even when Repio is minimizedMacroHotkeyRunner — zero tkinter, constructor-injected callbacks, fully unit-tested.repio files simultaneously. Tab bar sits between toolbar and table; shows filename with * if modified and [+] new-tab buttonrepio-dev-pro.py → repio-dev-enterprise.py; compiled binary is Repio-Enterprise.exe%APPDATA%\Repio\license.key; startup verification + Help > License Infoscript action — inline shell command (in Comment field) executed non-blocking via shell=True; Insert > Shell Script…run action — alias for run_program; file_path = executable, comment = argumentssettings.json; empty = current working directorytype action — types a full string in one step (unicode-safe, including Cyrillic). Text set in the Comment fieldscreenshot action — captures the screen as a macro step; label used in filename; output path via --output-dir--run FILE — headless playback without GUI: repio.exe --run morning.repio. Useful for Task Scheduler, CI/CD, macro chains--output-dir PATH — sets screenshot save directory (pairs with --run for visual test logs).repio file extension — new branded extension; Open/Save dialogs default to .repio (existing .csv files work as-is).repio opens Repio. Registered in HKCU (no admin required), auto-updates to exe after compilationtype actionscreenshot actiontype bold purple, screenshot brown*.repio *.csvbuild_index.jsonCtrl+Shift+S)calc_total_duration_ms() rewritten with recursion for includes and loopsIncludeCache.load() now supports URLs with TTL-based cachingadd_include() offers choice between local file and URLperf_counter timestampsis_breakpoint, is_bookmark fields