projmux 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,7 +37,7 @@
37
37
  actions, and `focus` dispatch diagnostics for session fallback, unresolved
38
38
  targets, window fallback, pane fallback, explicit id failures, and
39
39
  notify-only fallback.
40
- - Picker focused unit coverage includes backend-neutral picker item/action mapping, fzf adapter output, native title-focused filtering, numeric selection, shared close actions, saved picker backend config, Settings Labs backend switching, environment override precedence, compact multi-line metadata gutters aligned to the project-name column, proportional native scrollbar thumb rendering, fixed split-preview and sidebar list viewports with scrollbar tracks, preview tab/control normalization before width clipping, optional native frame titlebars, titled native Alt-1 sidebar chrome, statusbar-preserving sidebar popup height, native-only compact project sidebar popup sizing, and notify sidebar popup sizing that preserves the fzf minimum/ratio baseline.
40
+ - Picker focused unit coverage includes backend-neutral picker item/action mapping, fzf adapter output, native title-focused filtering, numeric selection, shared close actions including raw and CSI-u Ctrl-X native custom actions, saved picker backend config, AI picker title chrome and stable search-key ordering, Settings title chrome and root section order, Settings Labs backend switching, environment override precedence, compact multi-line metadata gutters aligned to the project-name column, proportional native scrollbar thumb rendering, multiline partial next-item row rendering with rendered-row scrollbar units, fixed split-preview and sidebar list viewports with scrollbar tracks, native mouse down/follow-drag/release behavior, preview tab/control normalization before width clipping, optional native frame titlebars without same-line rule fill, titled native Alt-1 sidebar chrome, statusbar-preserving sidebar popup height, native-only compact project sidebar popup sizing, and notify sidebar title/popup sizing that preserves the fzf minimum/ratio baseline.
41
41
  - `make test-integration`: Docker-backed Linux integration smoke with real `tmux`, `fzf`, `git`, and `stty`; covers `doctor`, tmux config print/install/apply, and notify queue CRUD against isolated HOME/XDG paths.
42
42
  - `make test-install-smoke`: Docker-backed source install smoke; covers `make install`, atomic binary replacement, `tmux apply` against a live `projmux` socket, and post-install notify queue initialization.
43
43
  - `make test-e2e`: Docker-backed real-tmux workflow smoke for session/pane setup, app config sourcing, reply-state notify reconciliation, focus notify fallback, and status notify rendering with contextual project/state/agent badges. Host-only terminal, WSL, macOS, and GUI notification behavior remains outside Docker; see [docs/testing.md](testing.md).
package/docs/cli.md CHANGED
@@ -403,7 +403,7 @@ flags with the top-level `switch` UX:
403
403
  - `attach auto [--keep=N] [--fallback=home|ephemeral]` — auto-attach to
404
404
  the most recent session, with bounded retention and a fallback policy.
405
405
  - `settings` — interactive configuration UI for the project picker, AI
406
- splits, Icons & Decorations mode, Project Root management, the
406
+ splits, Appearance mode, Project Root management, the
407
407
  switcher's saved workdirs list, Labs, and About/Update status. In Project
408
408
  Picker, `Project Root` manages the saved
409
409
  primary root (`~/.config/projmux/projdir`) and displays whether the effective
@@ -411,7 +411,7 @@ flags with the top-level `switch` UX:
411
411
  no configured source. When no source is configured, the direct-set prompt
412
412
  starts with `$HOME` as an editable fallback, but `$HOME` is not used as the
413
413
  effective root unless saved. `Workdirs` remains separate: those entries are
414
- additional search roots, not the primary root. Icons & Decorations stores
414
+ additional search roots, not the primary root. Appearance stores
415
415
  `~/.config/projmux/statusbar-decoration` as `off` (default), `symbol`, or
416
416
  `emoji` and updates the live tmux option when available. Labs stores
417
417
  `~/.config/projmux/picker-backend` as `native` (default) or `fzf` and updates
@@ -102,7 +102,7 @@ failure handling.
102
102
 
103
103
  ## Decoration Mode
104
104
 
105
- Settings > Icons & Decorations controls optional status and picker decoration:
105
+ Settings > Appearance controls optional status and picker decoration:
106
106
 
107
107
  - `off` is the default and avoids icon-font assumptions.
108
108
  - `symbol` restores the Nerd Font-style folder, GitHub, and bell icons.
@@ -80,8 +80,10 @@ The fzf compatibility surface for the native engine is tracked in
80
80
  separators reach the right border like fzf.
81
81
  - Native frames can render an optional picker-owned titlebar row below the top
82
82
  border when `picker.Options.Title` is set; empty titles keep the default frame
83
- unchanged. The native Alt-1 project sidebar uses this for a `Projects`
84
- titlebar.
83
+ unchanged. Non-empty titles use a distinct neutral titlebar surface with rule
84
+ fill and a divider row separating the title section from the search/content
85
+ section. The native Alt-1 project sidebar uses this for a
86
+ `Projects` titlebar.
85
87
  - Native width/truncation uses terminal cell width for Korean/CJK text, emoji,
86
88
  and combining marks instead of raw rune count, so localized project names and
87
89
  decorated notify headers do not push the right frame border out of alignment.
@@ -91,9 +93,9 @@ The fzf compatibility surface for the native engine is tracked in
91
93
  multi-line card gaps share the same `projmuxpicker` separator primitive for a
92
94
  more consistent native surface.
93
95
  - Native interactive mode enables SGR mouse reporting while the alternate screen
94
- is active. Primary click applies the clicked row, release events are ignored,
95
- mouse wheel moves selection up/down, and reporting is disabled again during
96
- screen restore.
96
+ is active. Primary mouse down focuses the row under the cursor, primary mouse
97
+ up applies it, mouse wheel moves selection up/down, and reporting is disabled
98
+ again during screen restore.
97
99
  - When terminal size detection is unavailable, native picker falls back to a
98
100
  conservative 80x24 terminal instead of assuming a wider surface. Interactive
99
101
  tmux popups still use the detected popup size when `stty size` is available.
@@ -42,12 +42,12 @@ native picker engine and is not a public dependency-policy change.
42
42
  | `--print-query` accept-query mode | typed settings path prompts | Covered | `Options.AcceptQuery`; `TestNativeRunnerAcceptsTypedQuery` |
43
43
  | query cursor editing | typed settings path prompts | Covered | Left/Right, Ctrl-A/E, Delete, Backspace, Ctrl-U/W query editing plus visible prompt cursor; `TestNativeInteractiveEditsTypedQueryAtCursor`; `TestNativeInteractiveSupportsQueryLineEditingKeys`; `TestNativeInteractiveCtrlUDeletesBeforeCursor`; `TestNativePromptLineRendersQueryCursor` |
44
44
  | terminal arrow key variants | interactive selection in tmux/docker | Covered | CSI, SS3/application cursor, modified CSI tests; app TTY `/dev/tty` fallback; raw TTY EOF polling keeps split ESC sequences from leaking into the query |
45
- | mouse support | optional fzf mouse picker interaction | Partially covered | native enables SGR mouse reporting in interactive alternate-screen mode, primary click applies the clicked row, release events are ignored, and wheel input moves selection; drag gestures remain outside this POC; `TestNativeInteractiveSupportsMouseClickSelection`; `TestNativeInteractiveIgnoresMouseReleaseBeforeClick`; `TestNativeInteractiveSupportsMouseWheelSelection`; Docker no-fzf e2e clicks the AI settings row under a PTY |
45
+ | mouse support | optional fzf mouse picker interaction | Partially covered | native enables SGR mouse reporting in interactive alternate-screen mode, primary mouse down focuses the clicked row, primary mouse up applies it, and wheel input moves selection; drag gestures remain outside this POC; `TestNativeInteractiveSelectsOnMouseRelease`; `TestNativeInteractiveMouseDownOnlyFocuses`; `TestNativeInteractiveIgnoresMouseReleaseBeforeDown`; `TestNativeInteractiveSupportsMouseWheelSelection`; Docker no-fzf e2e clicks the AI settings row under a PTY |
46
46
  | fzf navigation keys | interactive selection in searchable lists | Covered | native maps CSI-u `Ctrl-J` plus `Ctrl-N` to down and `Ctrl-P`/`Ctrl-K` to up when not claimed by a custom action; raw LF remains Enter for PTY compatibility; `TestNativeInteractiveSupportsFZFNavigationKeys` |
47
47
  | alternate-screen lifecycle | fzf fullscreen picker screen restore | Covered | native frame updates and screen exit return to column 0 before terminal control sequences, screen exit resets styles plus clears the alternate buffer from the home cursor before restore, and real TTY restores get a short settle window before caller handoff; `nativeScreenEnter`; `TestNativeInteractiveUsesAlternateScreen`; `TestRenderFullFrameUpdateAlwaysHomesAndWritesFrame` |
48
48
  | frame content width | fzf border inner width | Covered | `ContentLayout` uses the frame inner width so separators and rows reach the right border; `TestRendererContentLayoutUsesFrameInnerWidth` |
49
49
  | tmux popup frame interaction | native picker popups launched through `popup-toggle` | Covered for native backend popups | `popup-toggle` passes tmux `display-popup -B` when `PROJMUX_PICKER_BACKEND=native`, so the native picker owns the visible frame instead of double-drawing with the tmux popup border; native Alt-1 uses a compact native-only minimum while fzf keeps the previous project sidebar minimum; Alt-1/Alt-2 sidebar heights reserve two bottom statusbar rows; Alt-2 notify sidebar keeps the fzf-like `24%` / min `64` baseline; `TestAppRunTmuxPopupToggleUsesBorderlessPopupForNativeBackend`; `TestSessionizerSidebarWidthKeepsFZFMinimum`; `TestSidebarPopupHeightLeavesStatusbarRows`; `TestNotifySidebarWidthMatchesFZFBaseline`; `TestAppRunTmuxPopupToggleKeepsNotifySidebarFZFSizingForNative` |
50
- | optional native titlebar | native picker popup frame | Covered for empty-title compatibility and opt-in titles | `picker.Options.Title`; `RenderFrameWithTitle`; `ContentLayoutWithTitle`; empty titles keep the prior frame unchanged, non-empty titles render in a picker-owned row below the top border, and the native Alt-1 project sidebar opts into `Projects`; `TestRendererRenderFrameWithTitleKeepsDefaultWhenTitleEmpty`; `TestRendererRenderFrameWithTitleUsesTitlebarRow`; `TestRendererContentLayoutWithTitleReservesTitlebarRow`; `TestNativeInteractiveRendersOptionalTitlebar`; `TestSwitchCommandNativeSidebarSetsTitle` |
50
+ | optional native titlebar | native picker popup frame | Covered for empty-title compatibility and opt-in titles | `picker.Options.Title`; `RenderFrameWithTitle`; `ContentLayoutWithTitle`; empty titles keep the prior frame unchanged, non-empty titles render in a picker-owned section below the top border with neutral titlebar background, rule fill, and a divider above search/content, and the native Alt-1 project sidebar opts into `Projects`; `TestRendererRenderFrameWithTitleKeepsDefaultWhenTitleEmpty`; `TestRendererRenderFrameWithTitleUsesTitlebarRow`; `TestRendererContentLayoutWithTitleReservesTitlebarRow`; `TestNativeInteractiveRendersOptionalTitlebar`; `TestSwitchCommandNativeSidebarSetsTitle` |
51
51
  | redraw flicker/top clipping | keyboard navigation in exact-height tmux popup | Partially covered | native redraws use synchronized updates plus coalesced row diffs after the first frame, skip unchanged frames, render frame diffs before sidebar focus commands, frame rendering avoids trailing bottom-border CRLF, and screen exit clears the alternate buffer before restore; `TestNativeInteractiveWrapsRedrawsInSynchronizedUpdates`; `TestFrameUpdateRendererSkipsUnchangedFrame`; `TestFrameUpdateRendererCoalescesEachFrameUpdate`; `TestRendererRenderFrameUsesCRLFRowsForRawTTY`; `TestNativeInteractiveUsesAlternateScreen` |
52
52
 
53
53
  ## Native Surface Architecture
@@ -118,8 +118,8 @@ native picker engine and is not a public dependency-policy change.
118
118
  gap, and consecutive bonuses. Very large `query * row` matrices intentionally
119
119
  fall back to the greedy scorer to avoid pathological memory use. Search-keyed
120
120
  app pickers preserve fzf's `--disabled` reload order instead of score-sorting.
121
- - Mouse support is intentionally narrow in this POC: primary click applies the
122
- clicked row, release events are ignored, and wheel input moves selection.
121
+ - Mouse support is intentionally narrow in this POC: primary mouse down focuses
122
+ the clicked row, primary mouse up applies it, and wheel input moves selection.
123
123
  Drag gestures and the full fzf mouse grammar are follow-up work.
124
124
  - The public doctor/docs dependency policy is tracked separately from picker
125
125
  backend selection. Native is the default picker backend, while fzf remains an
package/docs/statusbar.md CHANGED
@@ -134,7 +134,7 @@ emits a deterministic block per segment), regenerate, and re-apply:
134
134
  projmux tmux apply
135
135
  ```
136
136
 
137
- Settings > Icons & Decorations controls the optional decoration mode used by
137
+ Settings > Appearance controls the optional decoration mode used by
138
138
  the path, git branch, and notification sidebar header. The persisted enum lives at
139
139
  `~/.config/projmux/statusbar-decoration`; valid values are `off` (default,
140
140
  font-safe), `symbol` (Nerd Font-style folder/GitHub/bell icons), and `emoji`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projmux",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "description": "tmux project session manager",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/crevissepartners/projmux#readme",
@@ -24,10 +24,10 @@
24
24
  "LICENSE"
25
25
  ],
26
26
  "optionalDependencies": {
27
- "@projmux/darwin-arm64": "0.4.7",
28
- "@projmux/darwin-x64": "0.4.7",
29
- "@projmux/linux-arm64": "0.4.7",
30
- "@projmux/linux-x64": "0.4.7"
27
+ "@projmux/darwin-arm64": "0.4.9",
28
+ "@projmux/darwin-x64": "0.4.9",
29
+ "@projmux/linux-arm64": "0.4.9",
30
+ "@projmux/linux-x64": "0.4.9"
31
31
  },
32
32
  "scripts": {
33
33
  "package:npm": "scripts/package-npm.sh",