Skip to content

Test against tmux 3.7c - #746

Open
tony wants to merge 2 commits into
masterfrom
tmux-3.7c-support
Open

Test against tmux 3.7c#746
tony wants to merge 2 commits into
masterfrom
tmux-3.7c-support

Conversation

@tony

@tony tony commented Aug 22, 2026

Copy link
Copy Markdown
Member

tmux 3.7c is the current 3.7 point release. libtmux supports it with no library change, so this swaps the CI matrix lane and refreshes two test docstrings that named 3.7b.

Why no library change is needed

libtmux.common.get_version() normalizes point releases — it strips the letter suffix, so "3.7c" parses as LooseVersion("3.7"). Every has_gte_version("3.7") gate already accepts it. The single caller that reads the raw suffix, libtmux.common.get_version_str(), feeds the Pane.break_pane() crash workaround, and that gate compares against the literal "3.7" — so 3.7c takes the fixed path.

Upstream changes assessed

Every entry in the 3.7c changelog, checked against libtmux's surface:

  • Build with jemalloc on macOS — build only.
  • Scrollbar initial state (window.c) — libtmux exposes no scrollbar API.
  • Periodic time checks in format loops (format.c) — performance only, identical output.
  • message-style as the message-format default (status.c) — message_format is a typed option field; libtmux never reads its default.
  • Unzoom before creating a floating pane (layout.c) — behavior note below, no libtmux change.

Two further deltas show up in the diff but not the changelog, and neither touches libtmux:

  • spawn.c restores empty window names.
  • cmd-split-window.c treats a lone empty command string as -E.

Behavior note for new_pane()

On 3.7c, creating a floating pane in a zoomed window unzooms it — window_zoomed_flag goes from 1 to 0. tmux 3.7 through 3.7b left the window zoomed. Measured against local builds of all four:

3.7:  window_zoomed_flag before=1 after new-pane=1
3.7a: window_zoomed_flag before=1 after new-pane=1
3.7b: window_zoomed_flag before=1 after new-pane=1
3.7c: window_zoomed_flag before=1 after new-pane=0

The upstream note says the fix avoids a crash. I could not reproduce a crash on 3.7, 3.7a, or 3.7b, either detached or with a client attached on a pty, so there is no libtmux-side guard to add.

Why the 3.7a lane stays

3.7a and 3.7b are the only releases where an empty -n name falls back to the command name instead of staying empty. Probed across every matrix version:

3.2a  -n "" -> []
3.3a  -n "" -> []
3.4   -n "" -> []
3.5   -n "" -> []
3.6   -n "" -> []
3.7   -n "" -> rejected, server refuses to start
3.7a  -n "" -> [sleep]
3.7b  -n "" -> [sleep]
3.7c  -n "" -> []

3.7a is the older of the two and still in the wild, so it keeps its lane.

Verification

Full suite against a locally built tmux 3.7c: 1455 passed, 1 skipped.

Pre-commit gate clean: ruff check, ruff format, mypy, pytest --reruns 0, just build-docs.

why: tmux 3.7c is the current 3.7 point release. libtmux needs no code
change to accept it -- get_version() strips the point-release suffix so
the existing 3.7 feature gates already match, and the break-pane crash
workaround keys on the raw "3.7" string via get_version_str().

what:
- Swap the 3.7b matrix lane for 3.7c
- Reword two test docstrings that named 3.7b as a tested point release,
  phrasing them so later point releases need no edit

Verified: full suite against a locally built tmux 3.7c, 1455 passed,
1 skipped.
@codecov

codecov Bot commented Aug 22, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 52.37%. Comparing base (4ced360) to head (2a603e9).

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #746   +/-   ##
=======================================
  Coverage   52.37%   52.37%           
=======================================
  Files          26       26           
  Lines        3729     3729           
  Branches      747      747           
=======================================
  Hits         1953     1953           
  Misses       1472     1472           
  Partials      304      304           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

why: Record the tested-version change and the one tmux-side behavior
shift users of new_pane() will notice.

what:
- Add a Development entry noting CI exercises tmux 3.7c and why the
  point release needs no library change
- Note that a floating pane created in a zoomed window unzooms it on
  3.7c, where 3.7 through 3.7b left the window zoomed
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