Skip to content

feature: add option to show launcher tabs vertically - #2765

Open
ara-hwang wants to merge 1 commit into
sourcegit-scm:developfrom
ara-hwang:feature/vertical-tabs-upstream
Open

ara-hwang wants to merge 1 commit into
sourcegit-scm:developfrom
ara-hwang:feature/vertical-tabs-upstream

Conversation

@ara-hwang

Copy link
Copy Markdown

Title: feature: add option to show launcher tabs vertically

Base: sourcegit-scm/sourcegit:develop ← Head: ara-hwang/sourcegit:feature/vertical-tabs-upstream


Description

This PR adds a new appearance option: Preferences › Appearance › Show tabs vertically.

When it is enabled, the page tabs are removed from the titlebar and shown as a vertical list on the left side of the main window. This is similar to the vertical tabs layout found in browsers and editors.

The option is disabled by default, so nothing changes for existing users.

Motivation

  • When many repositories are open, the horizontal tabs either shrink or overflow and need scrolling (see the first screenshot). A vertical list shows many more tabs at once.
  • Long repository names are easier to read, because a vertical tab can be much wider than a horizontal one.
  • Wide screens usually have spare horizontal space, while vertical space is limited.

Screenshots

Default (unchanged): horizontal tabs overflow with 7 repositories open

1-horizontal-default

Vertical tabs

2-vertical

Vertical tabs (dark theme)

3-vertical-dark
New option in Preferences › Appearance Context menu in vertical mode
4-preferences 5-context-menu

Changes

  • ViewModels/Preferences.cs: adds the persisted property UseVerticalTabs (default false).

  • ViewModels/LayoutInfo.cs: adds LauncherVerticalTabsWidth (default 200), which stores the width of the vertical tab bar.

  • Views/Preferences.axaml: adds a checkbox to the Appearance tab, below Use fixed tab width in titlebar.

  • Views/LauncherVerticalTabBar.axaml(.cs) (new): the vertical tab bar.

    • Each tab shows the same information as a horizontal tab: bookmark color, repository name, dirty-state dot and close button. Long names are trimmed, and the tooltip shows the full path.
    • A Create New Tab button sits at the bottom. It reuses the existing Text.PageTabBar.New string.
  • Views/LauncherTabBarBase.cs (new): the shared tab behaviors moved here from LauncherTabBar without logic changes, so both tab bars use the same code. These behaviors are:

    • middle-click to close
    • drag to reorder
    • the tab context menu
    • the close button

    The only difference is the context menu item that closes the following tabs. In vertical mode it reads Close Tabs Below instead of Close Tabs to the Right.

  • Views/Launcher.axaml(.cs): when the option is enabled, hides the titlebar tabs and shows the vertical tab bar in a left column. The workspace and page-switcher buttons stay in the titlebar.

    • The column is resized with a GridSplitter (min 120 / max 480) and the width is persisted.
    • This works the same way as the repository sidebar: IsVerticalTabsVisible / VerticalTabsWidth mirror IsNormalSidebarVisible / SidebarWidth in Repository.axaml.cs.
  • Resources/Locales: adds Text.Preferences.Appearance.UseVerticalTabs and Text.PageTabBar.Tab.CloseBelow to all 16 locales. Only en_US and ko_KR were written by native speakers, so translators are welcome to improve the others.

Test

  • dotnet build -c Release: 0 errors and 0 warnings.
  • dotnet format --verify-no-changes src/SourceGit.csproj passes.
  • Checked on Linux (Xvfb) with several repositories open:
    • Clicking a vertical tab switches the active page.
    • Drag to reorder works in both vertical and horizontal mode, which checks that the refactor did not break it.
    • Dragging the splitter resizes the bar, and the width is restored after a restart.
    • The context menu shows Close Tabs Below in vertical mode.
    • Turning the option off brings back the existing titlebar tabs unchanged.
  • Windows: tested on Windows 11 x64
  • macOS: not tested.

Add `Preferences > Appearance > Show tabs vertically`. When enabled, the
page tabs in the titlebar are hidden and shown as a vertical list on the
left side of the main window instead.

- The vertical tab bar supports the same features as the horizontal one
  (bookmark, dirty state, close button, middle-click to close, drag to
  reorder and the context menu). In vertical mode the context menu says
  `Close Tabs Below` instead of `Close Tabs to the Right`.
- The shared tab behaviors are moved from `LauncherTabBar` into
  `LauncherTabBarBase` without logic changes, so both tab bars use the
  same implementation.
- The vertical tab bar can be resized with a `GridSplitter` (the same way
  as the repository sidebar) and its width is persisted in layout.
- Add translations of the new strings for all supported locales.
@ara-hwang
ara-hwang force-pushed the feature/vertical-tabs-upstream branch from 89eee69 to 79a0e95 Compare October 8, 2026 08:38

This branch has not been deployed

No deployments
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