Skip to content

Commit 1dba131

Browse files
committed
neo(feat[fields]): Re-expose 8 version-gated tokens added after tmux 3.2a
why: with the scope+version gating in place, the format string sent to older tmux versions automatically excludes tokens that those versions don't recognize. The 8 tokens below first registered in tmux 3.4-3.6 — tagging them with FIELD_VERSION makes them appear on supported tmux releases that include them, and absent on older tmux without sending unknown tokens that bloat the format string or trigger crashes. what: - src/libtmux/neo.py: - Re-add 8 fields to Obj alphabetically: pane_key_mode, pane_unseen_changes, session_active, session_activity_flag, session_alert, session_bell_flag, session_silence_flag, client_theme. - Populate FIELD_VERSION with each token's minimum tmux release (3.4 for pane_unseen_changes, 3.5 for pane_key_mode, 3.6 for the five session_* tokens and client_theme). - tests/test_pane.py: restore pane_key_mode and pane_unseen_changes in PANE_FORMAT_FIELDS (the parametrized declaration+hydration test). - tests/test_session.py: restore the 5 new session_* entries in SESSION_FORMAT_FIELDS. Verification: - On tmux 3.6a (local), all 8 tokens hydrate via refresh(); 1182 tests pass. - On tmux 3.2a, FIELD_VERSION skips all 8 — the -F template stays at its pre-PR-#672-rollback shape for that version. Version anchors verified via: rg '"<token>"' ~/study/c/tmux-3.<N>a/format.c across 3.2a, 3.3a, 3.4, 3.5, 3.5a, 3.6, 3.6a.
1 parent 35cd656 commit 1dba131

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

src/libtmux/neo.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,17 @@
4242
"""
4343

4444

45-
FIELD_VERSION: dict[str, str] = {}
45+
FIELD_VERSION: dict[str, str] = {
46+
# Post-3.2a additions (verified via ~/study/c/tmux-3.<N>a/format.c).
47+
"pane_unseen_changes": "3.4",
48+
"pane_key_mode": "3.5",
49+
"session_active": "3.6",
50+
"session_activity_flag": "3.6",
51+
"session_alert": "3.6",
52+
"session_bell_flag": "3.6",
53+
"session_silence_flag": "3.6",
54+
"client_theme": "3.6",
55+
}
4656
"""Minimum tmux version that registers each format token.
4757
4858
Field names absent from this dict default to ``"3.2a"`` (always-safe within
@@ -186,6 +196,7 @@ class Obj:
186196
client_termfeatures: str | None = None
187197
client_termname: str | None = None
188198
client_termtype: str | None = None
199+
client_theme: str | None = None
189200
client_tty: str | None = None
190201
client_uid: str | None = None
191202
client_user: str | None = None
@@ -240,6 +251,7 @@ class Obj:
240251
pane_in_mode: str | None = None
241252
pane_index: str | None = None
242253
pane_input_off: str | None = None
254+
pane_key_mode: str | None = None
243255
pane_last: str | None = None
244256
pane_left: str | None = None
245257
pane_marked: str | None = None
@@ -257,6 +269,7 @@ class Obj:
257269
pane_title: str | None = None
258270
pane_top: str | None = None
259271
pane_tty: str | None = None
272+
pane_unseen_changes: str | None = None
260273
pane_width: str | None = None
261274
pid: str | None = None
262275
scroll_position: str | None = None
@@ -267,10 +280,14 @@ class Obj:
267280
selection_end_y: str | None = None
268281
selection_start_x: str | None = None
269282
selection_start_y: str | None = None
283+
session_active: str | None = None
270284
session_activity: str | None = None
285+
session_activity_flag: str | None = None
286+
session_alert: str | None = None
271287
session_alerts: str | None = None
272288
session_attached: str | None = None
273289
session_attached_list: str | None = None
290+
session_bell_flag: str | None = None
274291
session_created: str | None = None
275292
session_format: str | None = None
276293
session_group: str | None = None
@@ -286,6 +303,7 @@ class Obj:
286303
session_marked: str | None = None
287304
session_name: str | None = None
288305
session_path: str | None = None
306+
session_silence_flag: str | None = None
289307
session_stack: str | None = None
290308
session_windows: str | None = None
291309
socket_path: str | None = None

tests/test_pane.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,13 +612,15 @@ def test_send_keys_flag_only_requires_a_flag(session: Session) -> None:
612612
"pane_format",
613613
"pane_in_mode",
614614
"pane_input_off",
615+
"pane_key_mode",
615616
"pane_last",
616617
"pane_marked",
617618
"pane_marked_set",
618619
"pane_mode",
619620
"pane_path",
620621
"pane_pipe",
621622
"pane_synchronized",
623+
"pane_unseen_changes",
622624
)
623625

624626

tests/test_session.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,12 +709,17 @@ def test_session_search_panes_filter_by_id(session: Session) -> None:
709709

710710

711711
SESSION_FORMAT_FIELDS = (
712+
"session_active",
713+
"session_activity_flag",
714+
"session_alert",
715+
"session_bell_flag",
712716
"session_format",
713717
"session_group_attached_list",
714718
"session_group_many_attached",
715719
"session_grouped",
716720
"session_many_attached",
717721
"session_marked",
722+
"session_silence_flag",
718723
)
719724

720725

0 commit comments

Comments
 (0)