Skip to content

v0.2.0

Choose a tag to compare

@bmmmm bmmmm released this 19 Jun 09:52

Added

  • pt entry point — bare pt opens an fzf action menu listing every
    command (with a live description in the preview pane); selecting one runs it.
    The menu loops: display-only actions (list, preview, contrast) pause
    afterwards — q quits the hub, any other key (including arrow keys) returns to
    the menu. ESC steps back one level: out of the family picker into the menu,
    out of the menu to the shell. The header shows the current family/shade, and
    flags a stale shell when the plugin file has changed on disk since it was
    sourced (pt help notes it too). pt <cmd> dispatches directly: pick,
    list, auto, reload, preview, contrast, help. Without fzf, bare
    pt prints a cheat-sheet.
  • bin/pwdtintii actions / describe-action expose the action catalog — the
    single source of truth the shell dispatcher re-runs, so menu and dispatch
    cannot drift (guarded by a test).
  • pwdtintii_pick --auto clears a pinned family and returns to auto mode.
  • bats test harness (tests/) coupling the bash and zsh plugins, plus a
    Forgejo CI workflow (shellcheck, zsh -n, bats).

Changed

  • The pt alias now points at the dispatcher (was pwdtintii_apply, a
    visual no-op); ptpick/ptlist/… remain as direct accelerators.
  • Steady-state prompts (same directory) skip all subprocess work and only
    re-emit, cutting ~6 forks per prompt down to the key lookup.
  • README rewritten compact, with screenshots of the action hub and the live
    family picker (docs/).

Fixed

  • fzf preview height — the family preview now stretches to fill the pane
    (FZF_PREVIEW_LINES) instead of a fixed ~18 lines that left the lower half
    empty and pushed the fourth shade behind a scrollbar.
  • live focus tone — hovering a family in the picker emitted shade2 as the
    background, so the shade2 swatch vanished into it; it now emits a dimmed
    family tone (shade0 × 50%), darker than all four shades, so each stays
    distinct.
  • emit under set -eemit-family no longer aborts when there is no
    controlling /dev/tty (the failed redirect is fully contained).
  • CLI help leakpwdtintii help (the CLI) printed set -euo pipefail
    from the source below the doc block; it now stops at the first blank line.
  • fzf picker cancel — pressing ESC no longer captured the restore OSC
    sequence into a variable; the picker now returns only the family and the
    caller restores the background, so cancel correctly reverts the tint.
  • zsh sha1sum fallback — the zsh plugin hardcoded shasum and broke on
    Linux systems that only ship sha1sum; it now detects either at load (and
    fails loudly if neither is present), matching the bash plugin and the docs.
  • bash key drift — directories outside $HOME collapsed to the whole path
    in bash but the first component in zsh; bash now also uses the first
    component, so both shells tint the same directory identically.
  • cross-shell registry hash — zsh hashed the key with a trailing newline
    (print -r) while bash did not (printf), so the two never shared a shade
    registry; zsh now uses print -rn.
  • empty palette — a palette with no families caused a division-by-zero on
    every prompt; apply is now a no-op and load warns once.
  • menu bounds — choice 0 in the numbered picker selected the last family
    via bash negative indexing; out-of-range input is now rejected, and a
    leading-zero choice (08, 09) no longer trips bash octal parsing.
  • root path — applying at the filesystem root (/, empty project name) no
    longer leaks a bad array subscript error to the bash prompt.
  • registry race — the read-modify-write is now guarded by a mkdir lock
    (bounded, fail-open) so shells starting concurrently in the same dir don't
    clobber each other's shade.
  • bash symlink resolution_pwdtintii_self now follows symlinks, so the
    plugin works when sourced via a symlink.
  • registry .t temp files are cleaned up and emptied registries removed.
  • OSC 11 emission validates the hex before emitting (no escape injection from a
    malformed palette).