Skip to content

Add an opt-in compact pane tab bar setting - #17400

Closed
teamleaderleo wants to merge 1 commit into
mainfrom
compact-tab-bar-setting
Closed

teamleaderleo wants to merge 1 commit into
mainfrom
compact-tab-bar-setting

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Try it

  • Settings: Settings > App > Compact Pane Tab Bar (toggle on). Takes effect immediately in open windows.
  • cmux.json: { "app": { "compactPaneTabBar": true } }
  • Remove any ui.surfaceTabBar.buttons list first; a configured list overrides the setting.
  • Build: fleet build in progress; link to follow.

What changes

#17395 reverted the compact pane tab bar (#17360) to restore the 0.64.25 pane tab bar. This PR keeps that default and brings the compact bar back as an opt-in setting for Leo to try out.

  • Default unchanged from the revert. The new setting app.compactPaneTabBar is off by default. With it off, the pane tab bar shows the 0.64.25 buttons: New Terminal, New Browser, Split Right, Split Down. They keep the same order, icons and click behavior, and there are no per-pane overrides.
  • Opt-in. The setting is under Settings > App > Compact Pane Tab Bar, and "app": { "compactPaneTabBar": true } in cmux.json. Turning it on brings back the Compact pane tab bar actions by tab kind #17360 cluster:
    • Standard panes: "+" (click opens a terminal like Cmd-T; right-click or press and hold lists Agent Chat, Terminal, Browser), one split button (click splits right, Option-click splits down), and "..." (Files, Open Folder, New Window).
    • Agent chat panes: "+" and "...", with the splits moved into "...".
    • A ui.surfaceTabBar.buttons list in cmux.json still takes precedence either way.
    • Toggling takes effect live in open workspaces.
  • CodeRabbit finding from Compact pane tab bar actions by tab kind #17360. The button and menu policy now lives on Workspace instance methods instead of static methods on CompactSurfaceTabBarCluster. The enum keeps only the identifiers, row values, and the pure agent-chat URL matcher.
  • vendor/bonsplit moves forward from 8bc81c8 (Add wall of love and screenshot to homepage #273) to bddc73d, bonsplit main. bddc73d contains both Add wall of love and screenshot to homepage #273 and Follow up PR 242: refresh browser under-page background on theme updates #272 (e52609f, the menu and Option-click support the compact bar needs). It is a fast-forward of both, not a rollback.
  • A configured button list bypasses the setting. If ui.surfaceTabBar.buttons (or the older surfaceTabBarButtons) is set in any cmux.json, the pane tab bar shows exactly that list, whether the setting is on or off. To try the compact bar, remove that list first. The seven-icon bar that prompted Compact pane tab bar actions by tab kind #17360 came from such a list in a terminal-kit cmux.json, which terminal-kit Release v0.46.0 #75 has since removed.
  • The drag-and-drop UI test (BonsplitTabDragUITests) still targets paneTabBarControl.newTerminal, since the setting is off there.

Tests

cmuxTests/CompactSurfaceTabBarClusterTests.swift:

  • CompactPaneTabBarSettingTests:
    • default off: the setting defaults to false, and an applied workspace shows exactly the 0.64.25 actions with no menus, alternates or pane overrides;
    • on: at most 4 symbols, chosen by pane kind;
    • off again: the baseline comes back;
    • a configured button list wins over the setting.
  • CompactSurfaceTabBarClusterTests: the Compact pane tab bar actions by tab kind #17360 policy tests, now against Workspace. Standard panes show +, split and ...; agent chat panes show + and ....

Settings plumbing: catalog key, cmux.json path and parser mapping, settings template, web/data/cmux.schema.json plus the regenerated embedded schema, the all-keys.md row, the Settings row and curated search entry, and the row-anchor test path.

Checked locally with the Python checks (test_cmux_schema_parity, test_cmux_settings_supported_paths, test_cmux_config_schema_embed, test_settings_configuration_review_paths, test_localization_defaults, test_localizable_xcstrings_structure, test_localization_catalog) and sync-test-wiring --check. The Swift tests run in CI.

Localization audit: the two new strings (settings.app.compactPaneTabBar and .subtitle) are translated in all 9 app locales. The cluster strings from #17360 were never removed from the catalog. The schema description has no descriptionKey, matching other app booleans such as equalizeSplitsOnCreate.

Screenshots

Dark theme, from the fleet build of this head on a capture mini: off and on for a terminal pane, and off and on for an agent chat pane (agent chat flag on).

Capturing from the fleet build; stills will be added here.

🤖 Generated with Claude Code

Re-lands the compact pane tab bar from #17360 behind app.compactPaneTabBar
(Settings > App > Compact Pane Tab Bar), off by default. With it off the
pane tab bar keeps the 0.64.25 buttons: New Terminal, New Browser, Split
Right, Split Down. A ui.surfaceTabBar.buttons list still wins.

The button and menu policy moves from static methods on
CompactSurfaceTabBarCluster onto Workspace instance methods.

vendor/bonsplit moves forward to bddc73d (bonsplit main, #272 and #273).
With no menus or per-pane overrides configured, its tab bar takes the
unchanged render and click paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Closing: cancelled. Leo's call is that with only four pane tab bar buttons, hiding them in menus makes no sense, so the compact bar will not come back as an option. main keeps Austin's revert (#17395) and the current vendor/bonsplit pin; nothing here was merged.

@teamleaderleo
teamleaderleo deleted the compact-tab-bar-setting branch October 5, 2026 15:43
@coderabbitai

coderabbitai Bot commented Oct 5, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: d87a0779-bc0c-4480-821d-29703a67b78c
📥 Commits

Reviewing files that changed from the base of the PR and between 26a1a29 and f1d4e61.

⛔ Files ignored due to path filters (1)
  • Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift is excluded by !**/*.generated.*
📒 Files selected for processing (21)
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/Keys/AppCatalogSection.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/AppSection.swift
  • Packages/macOS/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift
  • Resources/Localizable.xcstrings
  • Sources/BonsplitConfiguration+RemoteTmuxEmbedded.swift
  • Sources/CmuxConfig.swift
  • Sources/CmuxSettingsFileStore+SupportedPaths.swift
  • Sources/CmuxSettingsJSONPathSupport.swift
  • Sources/CompactSurfaceTabBarCluster.swift
  • Sources/KeyboardShortcutSettingsFileStore+Template.swift
  • Sources/SurfaceTabBarButtonConfiguration.swift
  • Sources/TabManager.swift
  • Sources/Workspace+AgentChat.swift
  • Sources/Workspace+CompactSurfaceTabBar.swift
  • Sources/Workspace.swift
  • cmux.xcodeproj/project.pbxproj
  • cmuxTests/CompactSurfaceTabBarClusterTests.swift
  • skills/cmux-settings/references/all-keys.md
  • vendor/bonsplit
  • web/data/cmux.schema.json
 ________________________________________________________________
< First, solve the problem. Then, write the code. - John Johnson >
 ----------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@teamleaderleo
teamleaderleo restored the compact-tab-bar-setting branch October 5, 2026 15:50
@teamleaderleo teamleaderleo reopened this Oct 5, 2026
@teamleaderleo teamleaderleo added the default call Merged opt-in; team decides whether it becomes the default (see the gallery in #15427) label Oct 5, 2026
@cursor

cursor Bot commented Oct 5, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@teamleaderleo
teamleaderleo removed the request for review from austinywang October 5, 2026 15:51
@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Dogfood tours of f1d4e616

sidebar-and-chrome-tour at f1d4e616: not run

skipped: the tour dispatcher failed (exit 1); see the run log

Tours are picked by the paths globs in dogfood/scenarios/*.json; a Dogfood-tours: a, b line in the description picks them instead (none turns this off). Look at every frame before merging: a green tour only means no step failed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

default call Merged opt-in; team decides whether it becomes the default (see the gallery in #15427)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant