Skip to content

sessions: Add custom group icons and theme-aware colors - #343576

Merged
Cherry Wang (chryw) merged 2 commits into
mainfrom
dev/cherwan/agents/custom-group-icon-color-session-list
Oct 22, 2026
Merged

Cherry Wang (chryw) merged 2 commits into
mainfrom
dev/cherwan/agents/custom-group-icon-color-session-list

Conversation

@chryw

@chryw Cherry Wang (chryw) commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

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.

  • Personalize each group independently, with choices remembered across reloads and host reconnections.
  • Choose colors that follow the active theme, using the same palette as terminal tabs.
  • Restore the default icon or color without losing the other choice. Unread and attention indicators remain visible when needed.

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.

Populated session list with distinct group icons and theme-aware colors

Personalize a group from its context menu.

Exploration group context menu showing Change Icon… and Change Color…

Choose a color that follows your theme — Light 2026.

Light 2026 group color picker showing all eight terminal ANSI colors and Reset to default

Search for an icon or return to the default.

Searchable icon picker with Reset to default

How to test

  1. In the Agents window, use a group's context menu to change its icon and color. Try a custom group, workspace, or remote host, then reload and verify the choices remain.
  2. Open the icon picker and use search, arrow keys, Tab, and Enter to choose an icon or reset it. Escape should cancel without changing the group.
  3. Reset the icon and color separately; each should preserve the other. Verify that a collapsed group still shows unread or attention indicators.
  4. Try the terminal's Change Icon command and reset its icon while keeping its color.

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.

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>
Copilot AI balanced review requested due to automatic review settings October 22, 2026 18:35
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Screenshot Changes

Base: f3e06972 Current: 6f39bb71

Changed (1)

sessions/sessionsList/SessionsList_NestedGroups_ContextMenu/Light
Before After
before after

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
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 IconPicker and 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>
@chryw
Cherry Wang (chryw) marked this pull request as ready for review October 22, 2026 19:44
@vs-code-engineering

Copy link
Copy Markdown
Contributor

📬 CODENOTIFY

The following users are being notified based on files changed in this PR:

TylerLeonhardt

Matched files:

  • src/vs/platform/quickinput/browser/media/quickInput.css
  • src/vs/platform/quickinput/browser/quickInput.ts
  • src/vs/platform/quickinput/common/quickInput.ts
  • src/vs/platform/quickinput/test/browser/quickinput.test.ts

Sandeep Somavarapu (@sandy081)

Matched files:

  • src/vs/sessions/services/sessions/browser/sessionGroupsService.ts
  • src/vs/sessions/services/sessions/test/browser/sessionGroupsService.test.ts

Ladislau Szomoru (@lszomoru)

Matched files:

  • src/vs/sessions/services/sessions/browser/sessionGroupsService.ts
  • src/vs/sessions/services/sessions/test/browser/sessionGroupsService.test.ts

Anthony Kim (@anthonykim1)

Matched files:

  • src/vs/workbench/contrib/terminal/browser/terminal.ts
  • src/vs/workbench/contrib/terminal/browser/terminalActions.ts
  • src/vs/workbench/contrib/terminal/browser/terminalIconPicker.ts
  • src/vs/workbench/contrib/terminal/browser/terminalInstance.ts
  • src/vs/workbench/contrib/terminal/test/browser/terminalInstance.test.ts
  • src/vs/workbench/contrib/terminalContrib/accessibility/browser/terminalAccessibilityHelp.ts

@chryw Cherry Wang (chryw) added feature-request Request for new features or functionality ux User experience issues modernization labels Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature-request Request for new features or functionality modernization ux User experience issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants