terminal: support tabs on top and bottom - #337729
Open
Alex Stockwell (astockwell) wants to merge 7 commits into
Open
Alex Stockwell (astockwell) wants to merge 7 commits into
Alex Stockwell (astockwell) wants to merge 7 commits into
Conversation
Add a horizontal terminal tab strip with shared actions, accessible keyboard navigation, live layout switching, and regression coverage for microsoft#252647. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot started reviewing on behalf of
Alex Stockwell (astockwell)
September 24, 2026 15:32
View session
Contributor
📬 CODENOTIFYThe following users are being notified based on files changed in this PR: Anthony Kim (@anthonykim1)Matched files:
|
Author
|
@microsoft-github-policy-service agree company="GitHub" |
Contributor
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Configuration changes can lose keyboard focus, and vertical native drops can leave stale focus that targets the wrong terminal.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 2
Open (2)
What changed in this PR
Adds horizontal terminal tabs at the top or bottom while preserving existing side-list behavior.
Changes:
- Adds configurable horizontal tab rendering, navigation, actions, and drag-and-drop.
- Extends accessibility help and command targeting.
- Adds broad unit, automation, and smoke coverage.
| File | Description |
|---|---|
test/smoke/src/areas/terminal/terminal-tabs.test.ts |
Tests horizontal tabs end-to-end. |
test/automation/src/terminal.ts |
Adds horizontal-tab selectors and assertions. |
src/vs/workbench/test/browser/workbenchTestServices.ts |
Updates the terminal service test double. |
terminalAccessibilityHelp.ts |
Documents tab locations. |
terminal.accessibility.contribution.ts |
Adds tab-specific accessibility help. |
terminalTabs.test.ts |
Covers layout, navigation, actions, DnD, and performance. |
terminalConfiguration.ts |
Registers top and bottom settings. |
common/terminal.ts |
Extends the location type. |
terminalTabsWidget.ts |
Defines the shared tabs-widget interface. |
terminalTabsList.ts |
Shares rendering, actions, and DnD behavior. |
terminalTabsChatEntry.ts |
Prevents handled keys from bubbling. |
terminalTabsBar.ts |
Implements the horizontal tab row. |
terminalTabbedView.ts |
Switches layouts dynamically. |
terminalGroupService.ts |
Exposes selected tab instances. |
terminalActions.ts |
Decouples actions from the vertical list. |
browser/terminal.ts |
Extends the group-service contract. |
terminalTabsBar.css |
Styles horizontal tabs and states. |
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Restore terminal focus when changing tab location also hides the tabs. Keep vertical drop selection, focus, and command targets aligned, with regressions for both PR review findings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Handle keyboard context menus on keyup, honor configured multi-selection modifiers, and normalize Select All across keyboard layouts. Report failed drops once with explicit partial-transfer context while preserving core rejection semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Restore selected-terminal focusing for the explicit command while preserving focus across layout changes. Avoid duplicate and unchanged-state layouts, give tab help an independent provider identity, and expose the active terminal separately from selection. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Fixes #252647.
Summary
Add
topandbottomvalues toterminal.integrated.tabs.location. These locations display a single horizontally scrolling row inside the Terminal view, reclaiming terminal width in narrow panels and sidebars. The existingleft/rightlayouts andrightdefault are unchanged.aria-currentindependently of multi-selection.This does not add multiple independent Terminal views or change terminal-editor tabs.
Existing-behavior fixes
How to try it
"terminal.integrated.tabs.location": "top"and"terminal.integrated.tabs.hideCondition": "never"."bottom","left", and"right"while terminals are running. The empty tab-area context menu also exposes the location actions.Validation
Remaining coverage limits
Native Windows/Linux and spoken VoiceOver/NVDA behavior have not been manually verified. Tests exercise all three platform key-handling variants locally. Remote reconnection has mocked-backend coverage rather than an end-to-end remote-host run. Firefox could not start in the local macOS sandbox/graphics environment.
AI assistance: GitHub Copilot CLI, GPT-6 Astra (model ID/version:
gpt-6-astra).