Epic: Settings UI v2 #13677

Open
opened 2026-01-31 03:49:20 +00:00 by claunia · 3 comments
Owner

Originally created by @zadjii-msft on GitHub (Apr 29, 2021).

Originally assigned to: @carlos-zamora on GitHub.

The goal of this issue is to track work on the settings UI to achieve (1) parity with the JSON experience and (2) experiences that are generally expected of a standard settings UI. Work items included here are not final, and can be removed/added at any time.

JSON Parity

All of these settings exist in the JSON, but not the SUI. For the most part, these require some kind of design to make it a good experience. A few notes I want to point out...

  • we can iterate on these designs. For example, "launch position" would be cool if we had a control that let you place the window in a specific position, but that's a bit costly to commit to at the moment. We should prioritize having a (good) experience over having "the best" experience.
  • settings that interact with each other can be exposed differently from the JSON.
  • some settings don't make sense to be in the SUI (i.e. unstable or better experience without cluttering SUI). That's fine, let's just have a discussion about it to track it

Startup page

Interaction page

Appearance page

  • experimental.useBackgroundImageForWindow

Appearance > Themes page

  • What do we even want from this page??

Extensions page

  • Make the page at all
  • disable dynamic profiles
  • List fragments, profiles from fragments?

Compatibility page

  • Make the page at all (PR #17895)
    • experimental.input.forceVT
    • experimental.rendering settings
    • experimental.useBackgroundImageForWindow

Profile settings

  • font features
  • font axes
  • padding (support for #,# or #,#,#,#) (PR #17909)
  • adjustIndistinguishableColors
  • experimental.pixelShaderPath
  • bellSound (supports one or multiple sound file paths)
  • experimental.connection.passthroughMode
  • experimental.showMarksInScrollbar
  • experimental.autoMarkPrompts
  • The icon setting should have a cool emoji picker OR file picker OR some preset icons OR whatever, you get it. Dustin has ~ t h o u g h t s ~ on this
  • nullable colors (PR #17870)
    • selection background (design: nullable color)
    • foreground color (design: nullable color)
    • background color (design: nullable color)
    • tab color (design: nullable color)
    • cursor color (design: nullable color)

Warnings

  • Add warnings to the SUI (PR #17933)
    - [ ] largePasteWarning
    - [ ] multiLinePasteWarning
    - [ ] confirmCloseAllTabs (see also #14413)
  • idea: add a checkbox to the warnings saying "don't show this again"
    • flow should probably update warning setting and add it to the state to block it from popping up again. Problem is that when we change the settings, it triggers a setting reload which could interrupt flow.

Actions

Profile reordering / Dropdown Menu

Command palette

  • (is this different from the actions page? probably not, yea?)
  • rename a command
  • add an icon to the command
  • nested commands
  • iterable commands

Features

These are SUI features that just make sense to have. They're experiences that are kind of expected in any SUI.

Tasks

  • Remove experimental from...
    • experimental.detectUrls
    • experimental.retroTerminalEffects
    • experimental.pixelShaderPath
    • experimental.showMarksInScrollbar
    • experimental.autoMarkPrompts
  • code health

Follow-ups from actions page...

  • "the unbound bug"
    • Edit switchToTab to win+shift+q. Save. Edit switchToTab to ctrl+shift+t.
    • "unbound": "win+shift+q" appears but doesn't need to exist.
  • Actions::_GetContainerIndexByKeyChord optimization
    • We're just doing a O(n) search for a matching key chord, but we could technically do this much faster.
    • The list is already sorted by command name, so if we...
      1. use GetActionByKeyChord() to get the Command
      2. perform a binary search on the list using Command::Name() (assuming it has a name)
    • we should be able to accomplish this search in O(log n) time (usually)'
  • Performance
    • Clicking Actions in the left bar of Settings takes about 3 seconds to load and doesn't cache/keep it
  • "Touch Keyboard and Handwriting Panel Service" isn't running (#11341)
Originally created by @zadjii-msft on GitHub (Apr 29, 2021). Originally assigned to: @carlos-zamora on GitHub. The goal of this issue is to track work on the settings UI to achieve (1) parity with the JSON experience and (2) experiences that are generally expected of a standard settings UI. Work items included here are not final, and can be removed/added at any time. ## JSON Parity All of these settings exist in the JSON, but not the SUI. For the most part, these require some kind of design to make it a good experience. A few notes I want to point out... - we _can_ iterate on these designs. For example, "launch position" would be cool if we had a control that let you place the window in a specific position, but that's a bit costly to commit to at the moment. We should prioritize having a (good) experience over having "the best" experience. - settings that interact with each other can be exposed differently from the JSON. - some settings don't make sense to be in the SUI (i.e. unstable or better experience without cluttering SUI). That's fine, let's just have a discussion about it to track it ### Startup page - [x] launch position (#9075) - [ ] #14156 - [x] #17210 - [x] center on launch (#9075) - [ ] startup actions (#8802) ### Interaction page - [x] `minimizeToNotificationArea` - [x] `alwaysShowNotificationIcon` - [x] `focusFollowMouse` - [x] #14413 ### Appearance page - [ ] `experimental.useBackgroundImageForWindow` ### Appearance > Themes page - [ ] _What do we even want from this page??_ ### Extensions page - [ ] Make the page at all - [ ] disable dynamic profiles - [ ] List fragments, profiles from fragments? ### Compatibility page - [ ] Make the page at all (PR #17895) - [ ] `experimental.input.forceVT` - [ ] `experimental.rendering` settings - [ ] `experimental.useBackgroundImageForWindow` ### Profile settings - [x] font features - [x] font axes - [ ] padding (support for #,# or #,#,#,#) (PR #17909) - [x] `adjustIndistinguishableColors` - [ ] `experimental.pixelShaderPath` - [ ] `bellSound` (supports one or multiple sound file paths) - [ ] `experimental.connection.passthroughMode` - [ ] `experimental.showMarksInScrollbar` - [ ] `experimental.autoMarkPrompts` - [ ] The `icon` setting should have a cool emoji picker OR file picker OR some preset icons OR whatever, you get it. Dustin has ~ t h o u g h t s ~ on this - [ ] nullable colors (PR #17870) - [ ] selection background (design: nullable color) - [ ] foreground color (design: nullable color) - [ ] background color (design: nullable color) - [ ] tab color (design: nullable color) - [ ] cursor color (design: nullable color) ### Warnings - Add warnings to the SUI (PR #17933) - [ ] `largePasteWarning` - [ ] `multiLinePasteWarning` - [ ] `confirmCloseAllTabs` (see also #14413) - [ ] idea: add a checkbox to the warnings saying "don't show this again" - flow should probably update warning setting and add it to the state to block it from popping up again. Problem is that when we change the settings, it triggers a setting reload which could interrupt flow. ### Actions - [ ] needs UI update to match Win 11 styling (#12388) - [ ] #6900 (read:action arg support) - [ ] #11630 - [ ] #11341 ### Profile reordering / Dropdown Menu - [ ] #8914 - this should just be its own page. We can upgrade it to encompass new tab dropdown customization when that is supported. - See also #1571 - deprecate `hidden` - [ ] #19731 ### Command palette - (is this different from the actions page? probably not, yea?) - [ ] rename a command - [ ] add an icon to the command - [ ] nested commands - [ ] iterable commands ## Features These are SUI features that just make sense to have. They're experiences that are kind of expected in any SUI. - [ ] auto-save - we probably just want to close #12424? - [ ] Search - [ ] Home page (#9120) - Warnings - [ ] add a button to "reset all warnings" - Import JSON to... - [ ] replace cascadia settings entirely - [ ] add new profile - [ ] add new color scheme - [ ] import from iTerm2 scheme - [ ] Import "theme & appearance", and possibly apply appearance to profile(s) - #947 ## Tasks - Remove experimental from... - [ ] `experimental.detectUrls` - [ ] `experimental.retroTerminalEffects` - [ ] `experimental.pixelShaderPath` - [ ] `experimental.showMarksInScrollbar` - [ ] `experimental.autoMarkPrompts` - code health - [ ] Deduplicate Browse button logic - [x] #8452 - [ ] Remove visibility hacks (i.e. acrylic opacity slider), and use ProfileViewModel instead Follow-ups from actions page... - [ ] "the unbound bug" - Edit `switchToTab` to `win+shift+q`. Save. Edit `switchToTab` to `ctrl+shift+t`. - `"unbound": "win+shift+q"` appears but doesn't need to exist. - [ ] `Actions::_GetContainerIndexByKeyChord` optimization - We're just doing a O(n) search for a matching key chord, but we could technically do this much faster. - The list is already sorted by command name, so if we... 1. use `GetActionByKeyChord()` to get the `Command` 2. perform a binary search on the list using `Command::Name()` (assuming it has a name) - we should be able to accomplish this search in O(log n) time (usually)' - **Performance** - [ ] Clicking Actions in the left bar of Settings takes about 3 seconds to load and doesn't cache/keep it - [ ] #11341
claunia added the Product-TerminalIssue-ScenarioArea-SettingsUI labels 2026-01-31 03:49:21 +00:00
Author
Owner

@carlos-zamora commented on GitHub (Jun 27, 2022):

A few notes from sync today:

  • experimental.input.forceVT
    • move to Profiles > Advanced (docs too)
  • experimental.useBackgroundImageForWindow
    • hide behind a feature flag if we feel uncomfortable with the quality
  • font features and font axes
    • P2/3. Should be behind an "advanced" font button. Refer to Settings app for an idea of how they do it.
  • selectionBackground, foreground, and background
  • warnings
    • maybe delete settings from TSM. Should purely live in state.json.
@carlos-zamora commented on GitHub (Jun 27, 2022): A few notes from sync today: - `experimental.input.forceVT` - move to Profiles > Advanced (docs too) - `experimental.useBackgroundImageForWindow` - hide behind a feature flag if we feel uncomfortable with the quality - font features and font axes - P2/3. Should be behind an "advanced" font button. Refer to Settings app for an idea of how they do it. - `selectionBackground`, `foreground`, and `background` - warnings - maybe delete settings from TSM. Should purely live in state.json.
Author
Owner
@carlos-zamora commented on GitHub (Jun 27, 2022): Other SUI epics: - #6800 - #6900 and vaguely: - #12400
Author
Owner

@bennettnicholas commented on GitHub (Oct 3, 2022):

As requested from Carlos. We should consider updating Color Scheme in the profile appearance settings UI to now be two dropdown selections, "Dark Color Scheme" and "Light Color Scheme", to align with the changes made in PR #14064

This allows users to be able to configure their profiles to change when the application or system theme changes.

@bennettnicholas commented on GitHub (Oct 3, 2022): As requested from Carlos. We should consider updating Color Scheme in the profile appearance settings UI to now be two dropdown selections, "Dark Color Scheme" and "Light Color Scheme", to align with the changes made in PR #14064 This allows users to be able to configure their profiles to change when the application or system theme changes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#13677