Repository navigation
sessions: Add custom group icons and theme-aware colors - #343576
Merged
Cherry Wang (chryw) merged 2 commits intoOct 22, 2026
Merged
Cherry Wang (chryw) merged 2 commits into
Cherry Wang (chryw) merged 2 commits into
Conversation
Let session groups, workspaces, repositories, and remote environments use recognizable icons and terminal ANSI colors, with independent persisted appearance choices. Share a searchable icon picker with the terminal, add default reset, and improve keyboard navigation and empty-search handling. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Contributor
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
5 open issues
picker.onDidHidealways resolvesundefined`, which can race with (or overwrite in practice… · New At runtime thewidgetcapability is implemented on the sharedQuickInputbase class (so it… · New The test harness stub doesn’t match the productionSessionGroupsServicesemantics: it (1) never… · New Thetemplate.icon.className = ...andclassList.add(...ThemeIcon.asClassNameArray(groupIcon))… · New Thetemplate.icon.className = ...andclassList.add(...ThemeIcon.asClassNameArray(groupIcon))… · New
What changed in this PR
Adds per-group icon + theme-aware color customization to Sessions groups/sections, reusing a shared icon picker (also used by Terminal) and improving keyboard/a11y behavior in the picker stack.
Changes:
- Introduces a shared
IconPickerand updates Terminal to use it, including explicit reset vs cancel behavior. - Adds persistent appearance overrides (icon/color) for session groups and grouping sections, with new context menu entries and tests.
- Extends Quick Pick to support custom widget content and improves icon grid keyboard navigation/a11y semantics.
| File | Description |
|---|---|
| src/vs/workbench/services/userDataProfile/test/browser/iconPicker.test.ts | Adds coverage for shared picker behavior (select/reset/cancel, layout, accept-veto). |
| src/vs/workbench/services/userDataProfile/browser/iconSelectBox.ts | Updates focus/context handling and switches from bespoke keybindings to commands + widget focus tracking. |
| src/vs/workbench/services/userDataProfile/browser/iconPicker.ts | New shared icon picker built on standard Quick Pick + icon grid widget + resize/layout logic. |
| src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibilityHelp.ts | Documents new icon picker keyboard flow for screen readers. |
| src/vs/workbench/contrib/terminal/test/browser/terminalInstance.test.ts | Adds tests for icon reset (preserve color) and cancel behavior in shared picker. |
| src/vs/workbench/contrib/terminal/browser/terminalInstance.ts | Changes changeIcon to support null reset vs undefined cancel/open-picker. |
| src/vs/workbench/contrib/terminal/browser/terminalIconPicker.ts | Re-exports shared IconPicker for terminal usage. |
| src/vs/workbench/contrib/terminal/browser/terminalActions.ts | Updates multi-select change icon flow to propagate reset/cancel correctly. |
| src/vs/workbench/contrib/terminal/browser/terminal.ts | Updates ITerminalInstance.changeIcon contract docs/types for reset/cancel. |
| src/vs/sessions/services/sessions/test/browser/sessionGroupsService.test.ts | Adds tests for persistence and independent reset of group/section appearance. |
| src/vs/sessions/services/sessions/browser/sessionGroupsService.ts | Persists group/section icon+color overrides and exposes new appearance APIs. |
| src/vs/sessions/contrib/sessions/test/browser/sessionsListTestUtils.ts | Extends list harness stub to support section appearance overrides and events. |
| src/vs/sessions/contrib/sessions/test/browser/sessionsListContextMenu.test.ts | Updates expectations for new “Change Icon/Color” context menu entries. |
| src/vs/sessions/contrib/sessions/test/browser/sessionsList.test.ts | Adds rendering + context menu tests for appearance overrides and unread/status precedence. |
| src/vs/sessions/contrib/sessions/test/browser/sessionGroupAppearancePicker.test.ts | Adds unit tests for icon/color pickers (reset vs cancel semantics). |
| src/vs/sessions/contrib/sessions/browser/views/sessionsList.ts | Renders appearance overrides and wires new context menu actions to picker + service APIs. |
| src/vs/sessions/contrib/sessions/browser/views/sessionGroupAppearancePicker.ts | New helper to pick icon (shared picker) and ANSI theme color list. |
| src/vs/sessions/contrib/chat/browser/sessionsChatAccessibilityHelp.ts | Documents group appearance customization and keyboard usage in accessibility help. |
| src/vs/sessions/SESSIONS_LIST.md | Updates spec to include ownership/persistence rules for grouping-section appearance. |
| src/vs/platform/quickinput/test/browser/quickinput.test.ts | Adds tests for custom widget placement, retention on reopen, and keybinding isolation. |
| src/vs/platform/quickinput/common/quickInput.ts | Adds widget support to IQuickPick interface. |
| src/vs/platform/quickinput/browser/quickInput.ts | Implements widget plumbing in base QuickInput and focus behavior with custom widgets. |
| src/vs/platform/quickinput/browser/media/quickInput.css | Adjusts separator border styling when no custom widget is present. |
| src/vs/base/test/browser/ui/icons/iconSelectBox.test.ts | Adds tests for icon grid navigation, ARIA state, and key event isolation. |
| src/vs/base/browser/ui/icons/iconSelectBox.ts | Improves keyboard handling, ARIA roles/labels, focus model, and empty-search robustness. |
| src/vs/base/browser/ui/icons/iconSelectBox.css | Adds focus-visible outline for the focused icon within the grid. |
Review effort: Lite
Register Quick Input in the shared sessions-list fixture harness so fixtures render and dispose instead of failing during construction. Align the widget contract and section-appearance mock with production, keep header icon rendering in one place, and explicitly settle picker selection, reset, and cancellation only once. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cherry Wang (chryw)
marked this pull request as ready for review
October 22, 2026 19:44
Contributor
📬 CODENOTIFYThe following users are being notified based on files changed in this PR: TylerLeonhardtMatched files:
Sandeep Somavarapu (@sandy081)Matched files:
Ladislau Szomoru (@lszomoru)Matched files:
Anthony Kim (@anthonykim1)Matched files:
|
roblourens
approved these changes
Oct 22, 2026
Cherry Wang (chryw)
deleted the
dev/cherwan/agents/custom-group-icon-color-session-list
branch
October 22, 2026 20:59
This was referenced Oct 24, 2026
This was referenced Oct 30, 2026
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.



Session groups currently rely on their names to stand out. Custom icons and colors make it easier to recognize projects, distinguish remote environments, and find the right group in a busy session list.
This adds Change Icon… and Change Color… to custom groups and subgroups, workspace and repository groups, and environment groups, including remote hosts.
The terminal icon picker gains the same reset option, and keyboard navigation is improved for both experiences.
Visual walkthrough
Native Code OSS. The session-list screenshots and clips use Dark 2026; the color-picker screenshot uses Light 2026.
Make a group recognizable — 5 seconds.
pr-01-customize-group.mp4
Choose and reset an icon with the keyboard — 4 seconds. Resetting the icon keeps the chosen color.
pr-02-keyboard-and-reset.mp4
Recognizable groups in a populated session list.
Personalize a group from its context menu.
Choose a color that follows your theme — Light 2026.
Search for an icon or return to the default.
How to test
Validation
Automated regression tests: 630 passed; 2 pending. Type, layer, and lint checks passed. Group customization, keyboard navigation, and independent reset were exercised in native Code OSS; colors were checked in Dark 2026 and Light 2026.
VoiceOver and a complete native high-contrast walkthrough were not exercised.