Skip to content

feat: see-through window, theme order and Most recent tab switching (#156, #157, #158) - #161

Open
Maxaubert wants to merge 6 commits into
feat/154-full-stylefrom
feat/look-mru
Open

Maxaubert wants to merge 6 commits into
feat/154-full-stylefrom
feat/look-mru

Conversation

@Maxaubert

Copy link
Copy Markdown
Owner

Closes #156, #157, #158. Stacked on #155 (the Full style rework); retarget to main once #155 merges.

The owner asked for all three on 2026-10-10 and was away, so every decision below was made without them. Spec: docs/superpowers/specs/2026-10-10-look-and-mru-design.md.

#156 See-through window. PT already had the switch ("Acrylic terminal background"). It seemed to do nothing because every preset paints a fully opaque ground. Now in PT:

  • The row is named "See-through window" ("The desktop shows behind every surface."), like Prism's, and sits right under the theme wall.
  • Turning it on makes a solid theme see-through at Prism's levels: alpha 0xB9 on a dark ground, 0xD1 on a light one.
  • Background Alpha stops at 95% while the switch is on.
  • High Contrast stays solid, and its row is greyed out.
  • PT only. Prism's terminal row is unchanged.
  • Who notices on update: any profile that already had the switch on becomes see-through.

#157 Theme order (core: Prism's terminal theme wall gets the same order).

  • Custom, PT Default and Follow style (Prism) still lead.
  • Then the neutral themes from black to white, then the coloured themes from black to white.
  • Neutral means the ground's colourfulness (OKLab chroma) is under 0.0125, the widest gap among the 40 themes. That gives 12 neutrals; Cinder counts as coloured.
  • Computed by core/renderer/lib/themeOrder.ts, with unit tests.

#158 Most recent tab switching. A new setting under Appearance > Window > Tab switching: In order (default) or Most recent.

  • In Most recent, one Ctrl+Tab goes to the previous tab, and holding Ctrl walks further back.
  • The order updates when Ctrl is released or the window loses focus.
  • A click, a new tab or a closed tab during the walk ends it.
  • Logic in src/renderer/src/lib/tabMru.ts, with unit tests.

Versions: core 0.31.0, app 0.37.0.

Gates:

  • Unit tests: 1696 passed. Typecheck clean. Lint: 0 errors.
  • Three independent reviews; their findings are fixed.
  • Full e2e: 54 scenarios, 1114 checks, 1 failure: quitManyShells, which also fails about 1 run in 3 on the base. That is the node-pty 1.1.0 crash, fixed separately by fix: pin node-pty 1.2.0-beta.15 again, and test the pin (#159) #160.
  • New scenarios seeThrough (15 checks) and tabSwitch (19) pass.

Installed as normal PT 0.37.0 for the owner to test.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t

Maxaubert and others added 6 commits October 10, 2026 07:59
The acrylic row is the see-through window. Where the terminal owns the
window acrylic (Prism Terminal) it reads "See-through window" / "The desktop
shows behind every surface.", sits right under the theme wall, and the
switch alone makes the window see-through: an opaque ground under it paints
Prism's own levels (0xb9 dark, 0xd1 light, light by luminance > 0.4). Before,
it changed the material and left every preset opaque, so it looked broken.

- core/renderer/lib/seeThrough.ts: SEE_THROUGH_ALPHA, SEE_THROUGH_MAX (95%),
  seeThroughAlpha.
- termLook: paintsAlpha (one rule for the window and the dirty check),
  termAcrylicInForce / seeThroughBlocked (High Contrast stays solid).
- The Background picker and the theme editor cap Alpha at 95% under the
  switch and show the alpha in force.
- Prism: unchanged (gated on acrylic.kind 'window'; its row keeps its label).
- opacityMigration tests: three asserted an opaque window under acrylic on;
  that is the bug fixed here, so they now expect the default see-through.
- Versions: core 0.31.0, app 0.37.0.
- e2e: new seeThrough scenario, settingsLook row order (not run here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
The owner, 2026-10-10: "first black to white then coloured". After the
leading cards (Custom, the host's default, Follow style in Prism) the
presets now come in one fixed, computed order: the neutral grounds black
to white, then the coloured ones black to white, by OKLab L. It replaces
the light-first flip, which ran the wall either way by the theme worn.

- core/renderer/lib/themeOrder.ts: oklch, NEUTRAL_CHROMA (0.0125, measured
  in the widest gap of the forty grounds: Monokai 0.0109, Sage 0.0147),
  orderTermThemes (stable on ties).
- themeOrder.test.ts: permutation, neutrals first, L non-decreasing per
  group, the twelve measured neutrals, no ground within 0.001 of the
  threshold, ties, and the whole order as a snapshot.
- Prism: its terminal theme wall takes the same order (the same forty
  themes); nothing else changes there.
- e2e: themeCards checks the wall's DOM order against the unit snapshot
  (not run here).
- Docs: two-apps.md (FORTY THEMES), core/README.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
A Tab switching setting in Settings > Appearance > Window, after Tab style:
In order (the default, Ctrl+Tab along the strip as before) or Most recent.
In Most recent, Ctrl+Tab walks a snapshot of the most-recently-used list
taken at the hold's first press; the order changes only when Ctrl is
released, the window loses focus or another Ctrl chord is pressed, so one
press flips to the last tab and repeated presses walk further back instead
of ping-ponging. Closed tabs leave the list, new tabs enter at the front.

- lib/tabMru.ts (pure, tested) and lib/tabSwitchPrefs.ts (prism.window.tabSwitch)
- App.tsx holds the list and the walk in refs; keyup of Control and blur commit
- appOptions/settingsIndex/AppearancePage: the tab-switch row
- e2e: new tabSwitch scenario, PREF_PAGE and settingsLook rows (not run here)
- README keys row, docs/regression-rules.md "Most recent commits on Ctrl release"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
- Save changes judges and saves the see-through switch IN FORCE: under
  High Contrast a stored on (from before #156) no longer lights it, and a
  save stays solid instead of escaping into a see-through Custom. The
  colour editor's save goes through the same saveAsCustom.
- The dirty check measures the default level from the ground the window
  measures from, so an opaque picked Background does not light Save
  changes by its lightness; withGroundAlpha measures from the palette's
  own ground, so a save keeps the Custom's own level.
- Most recent: a click on another tab, or a tab opened or closed, while
  Ctrl is still held ends the walk (walkHolds), so it counts as a use.
- Save changes' tooltip and the theme switch question say "see-through
  window" in Prism Terminal, not "acrylic".
- The spec and comments no longer claim the stored switch survives a
  theme pick (a pick resets it, "the theme is the whole setup"); the
  spec's Tab switching wording matches what was built.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
…tches (#156)

- accent: the see-through window sits between the theme wall and
  Background/Accent since #156 moved it there.
- settingsSearch: Prism Terminal names the row "See-through window"
  (acrylicLabel), so the gate searches by that; "acrylic" joins the row's
  keywords so the old name still finds it.
- settingsLook: an on switch wears the accent on purpose since #138/#139;
  the check failed on the base (#154) too, now it allows on switches and
  still catches any other accent-filled button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHHaWKR4M5QtW7Wecyuk4t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant