8000 Browser-style tab cycling: make Ctrl+Tab / Ctrl+Shift+Tab bindable (and the default) · Issue #249 · amirlehmam/wmux · GitHub
[go: up one dir, main page]

Skip to content

Browser-style tab cycling: make Ctrl+Tab / Ctrl+Shift+Tab bindable (and the default) #249

Closed

Description

@Mattheinrichs

What are you trying to do?

Cycle between tabs (surfaces) with browser muscle memory: Ctrl+Tab forward, Ctrl+Shift+Tab back.

What would you like wmux to do?

Bind nextSurface / prevSurface to Ctrl+Tab / Ctrl+Shift+Tab by default, or at minimum make Ctrl+Tab bindable.

Today it can't be, even by hand. useKeyboardShortcuts.ts bails on !isSafeToIntercept(e), and Tab is not in SAFE_CTRL_KEYS ('b', 'd', 'n', 't', 'w', 'f', ','). The terminal side shares the same predicate, so a Ctrl+Tab binding is dead in both places: over a terminal it falls through to xterm, whose Tab case cancels and bubbles (only Shift+Tab carries meaning for TUIs). Ctrl+Shift+Tab is claimable, so a hand-rolled pair is asymmetric today: back works, forward does not. I currently use Ctrl+Shift+] / Ctrl+Shift+[.

Worth weighing the counterargument: the bare-Ctrl whitelist is deliberate, because Ctrl+A/E/R/U/K must reach the shell. Ctrl+Tab is not one of those; xterm does not consume it, and TUIs use Shift+Tab, not Ctrl+Tab. Whether it is right to widen the whitelist is your call; making it bindable (even non-default, via the existing recorder) would already fix the asymmetry.

Unrelated but adjacent: Ctrl+PageUp/PageDown are workspaces, not tabs, so there is no browser-style key cycling tabs at all today.

What do you do today instead?

Ctrl+Shift+] / Ctrl+Shift+[. Ctrl+1..9 selects workspaces; tabs are Ctrl+Alt+1..9, or the index families can be swapped in Settings.

Activity

  1. amirlehmam commented on Sep 29, 2026

    @amirlehmam
    Owner

    Shipped in v2.14.0: Ctrl+Tab / Ctrl+Shift+Tab are the defaults for next/previous tab and are claimed over a focused terminal too, through the same single predicate. If you still had the old Ctrl+Shift+] / [ defaults they're moved over once; a custom binding is never touched. Plain Tab / Shift+Tab are never claimed, even if bound.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      0