@jx0/jmux 0.3.7 → 0.3.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.
package/config/core.conf CHANGED
@@ -12,6 +12,11 @@ set -g mouse on
12
12
  unbind n
13
13
  bind-key n display-popup -E -w 60% -h 70% -b heavy -S 'fg=#4f565d' "$JMUX_DIR/config/new-session.sh"
14
14
 
15
+ # Window naming — ignore application-set titles, show useful names
16
+ set -g allow-rename off
17
+ set -g automatic-rename on
18
+ set -g automatic-rename-format "#{b:pane_current_path}"
19
+
15
20
  # Status bar — session info is in the sidebar, keep status bar for windows only
16
21
  set -g status-left ""
17
22
  set -g status-left-length 0
@@ -13,7 +13,8 @@ set -g base-index 1
13
13
  set -g pane-base-index 1
14
14
  set -g renumber-windows on
15
15
  set -g automatic-rename on
16
- set -g automatic-rename-format "#{pane_current_command}"
16
+ set -g allow-rename off
17
+ set -g automatic-rename-format "#{b:pane_current_path}"
17
18
  bind c new-window -c ~
18
19
  bind -n C-Right next-window
19
20
  bind -n C-Left previous-window
@@ -44,7 +45,7 @@ set -g pane-border-lines heavy
44
45
  set -g pane-border-status off
45
46
  set -g pane-border-style 'fg=#3a4450'
46
47
  set -g pane-active-border-style 'fg=#4f565d'
47
- set -g pane-border-format "#{?pane_active, #[fg=#9fe8c3 bold]#{pane_title} #[fg=#b5bcc9 nobold]#{b:pane_current_path} #[fg=#4f565d]| #{pane_current_command} , #[fg=#4f565d]#{pane_title} #[fg=#3a4450]#{b:pane_current_path} | #{pane_current_command} }"
48
+ set -g pane-border-format "#{?pane_active, #[fg=#9fe8c3 bold]#{?#{m:*Claude*,#{pane_title}},claude,#{pane_current_command}} , #[fg=#4f565d]#{?#{m:*Claude*,#{pane_title}},claude,#{pane_current_command}} }"
48
49
 
49
50
  # Auto-show pane borders only when window has multiple panes
50
51
  set-hook -g window-layout-changed 'if -F "#{==:#{window_panes},1}" "set -w pane-border-status off" "set -w pane-border-status top"'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jx0/jmux",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "description": "The terminal workspace for agentic development",
5
5
  "type": "module",
6
6
  "bin": {
package/src/main.ts CHANGED
@@ -12,7 +12,7 @@ import { homedir } from "os";
12
12
 
13
13
  // --- CLI commands (run and exit before TUI) ---
14
14
 
15
- const VERSION = "0.3.7";
15
+ const VERSION = "0.3.9";
16
16
 
17
17
  const HELP = `jmux — a persistent session sidebar for tmux
18
18
 
@@ -179,19 +179,19 @@ function switchByOffset(offset: number): void {
179
179
  async function fetchSessions(): Promise<void> {
180
180
  try {
181
181
  const lines = await control.sendCommand(
182
- "list-sessions -F '#{session_id}:#{session_name}:#{session_activity}:#{session_attached}:#{session_windows}'",
182
+ "list-sessions -F '#{session_id}:#{session_name}:#{session_activity}:#{session_attached}:#{session_windows}:#{@jmux-attention}'",
183
183
  );
184
184
  const sessions: SessionInfo[] = lines
185
185
  .filter((l) => l.length > 0)
186
186
  .map((line) => {
187
- const [id, name, activity, attached, windows] = line.split(":");
187
+ const [id, name, activity, attached, windows, attn] = line.split(":");
188
188
  const cached = sessionDetailsCache.get(id);
189
189
  return {
190
190
  id,
191
191
  name,
192
192
  activity: parseInt(activity, 10) || 0,
193
193
  attached: attached === "1",
194
- attention: false,
194
+ attention: attn === "1",
195
195
  windowCount: parseInt(windows, 10) || 1,
196
196
  directory: cached?.directory,
197
197
  gitBranch: cached?.gitBranch,
@@ -421,16 +421,6 @@ control.onEvent((event: ControlEvent) => {
421
421
  break;
422
422
  case "subscription-changed":
423
423
  if (event.name === "attention") {
424
- const pairs = event.value.trim().split(/\s+/);
425
- for (const pair of pairs) {
426
- const eqIdx = pair.indexOf("=");
427
- if (eqIdx === -1) continue;
428
- const id = pair.slice(0, eqIdx);
429
- const val = pair.slice(eqIdx + 1);
430
- if (val === "1") {
431
- sidebar.setActivity(id, false);
432
- }
433
- }
434
424
  fetchSessions();
435
425
  }
436
426
  break;
@@ -495,6 +485,20 @@ async function start(): Promise<void> {
495
485
  // Set JMUX_DIR in tmux's global environment so config bindings can reference it
496
486
  await control.sendCommand(`set-environment -g JMUX_DIR ${jmuxDir}`);
497
487
  await control.sendCommand(`source-file ${configFile}`);
488
+ // Re-enable automatic-rename on all windows — clears any application-set names
489
+ try {
490
+ const windowLines = await control.sendCommand(
491
+ "list-windows -a -F '#{window_id}'"
492
+ );
493
+ for (const line of windowLines) {
494
+ const winId = line.trim();
495
+ if (winId) {
496
+ await control.sendCommand(`set-option -w -t ${winId} automatic-rename on`);
497
+ }
498
+ }
499
+ } catch {
500
+ // Non-critical — windows will rename on next command change
501
+ }
498
502
 
499
503
  // Fetch initial sessions, then resolve client name (needs sessions list)
500
504
  await fetchSessions();