Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Epic: Settings UI v2 #10000

Open
11 of 65 tasks
zadjii-msft opened this issue Apr 29, 2021 · 3 comments
Open
11 of 65 tasks

Epic: Settings UI v2 #10000

zadjii-msft opened this issue Apr 29, 2021 · 3 comments
Assignees
Labels
Area-Settings UI Anything specific to the SUI Issue-Scenario Product-Terminal The new Windows Terminal.

Comments

@zadjii-msft
Copy link
Member

zadjii-msft commented Apr 29, 2021

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

Profile settings

  • font features
  • font axes
  • padding (support for #,# or #,#,#,#) (PR Add separate padding settings for left, top, right and bottom #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 Add nullable colors to settings UI #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 Add Warnings to Settings UI #17933)
    - [ ] largePasteWarning
    - [ ] multiLinePasteWarning
    - [ ] confirmCloseAllTabs (see also Add the setting "confirmCloseAllTabs" to the UI #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
    • Deduplicate Browse button logic
    • Polish TabBase #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
  • Keybinding editor could be clearer #11341
@zadjii-msft zadjii-msft added the ⛺ Reserved For future use label Apr 29, 2021
@carlos-zamora carlos-zamora added Product-Terminal The new Windows Terminal. Issue-Scenario Area-Settings UI Anything specific to the SUI and removed ⛺ Reserved For future use labels Jun 27, 2022
@carlos-zamora carlos-zamora changed the title <reserved> Epic: Settings UI v2 Jun 27, 2022
@carlos-zamora
Copy link
Member

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
Copy link
Member

carlos-zamora commented Jun 27, 2022

@carlos-zamora carlos-zamora self-assigned this Jun 27, 2022
@carlos-zamora carlos-zamora added the Needs-Discussion Something that requires a team discussion before we can proceed label Jul 6, 2022
@zadjii-msft zadjii-msft removed the Needs-Discussion Something that requires a team discussion before we can proceed label Jul 11, 2022
@bennettnicholas
Copy link
Contributor

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.

microsoft-github-policy-service bot pushed a commit that referenced this issue Feb 29, 2024
## Summary of the Pull Request
Allow editing of font features and axes in the SUI to get the UI closer
towards JSON parity

The allowed font axes are obtained directly from the currently selected
font, and their display names are presented to the user in the user's
current locale (if it exists). Otherwise, we just display the axis tag
to the user.

## References and Relevant Issues
#10000 

## Validation Steps Performed

- [x] Font Axes can be added/changed/removed from the Settings UI


![image](https://github.com/microsoft/terminal/assets/26824113/b1c3ed57-e329-4893-9f15-7b60154b5ea0)

![image](https://github.com/microsoft/terminal/assets/26824113/e1f1ea22-857d-4392-8a15-f81539fe9257)

## PR Checklist
- [ ] Closes #xxx
- [ ] Tests added/passed
- [ ] Documentation updated
- If checked, please file a pull request on [our docs
repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx
- [ ] Schema updated (if necessary)
microsoft-github-policy-service bot pushed a commit that referenced this issue Feb 29, 2024
## Summary of the Pull Request
**Targets #16104** 

Same as #16104, but for font features

## References and Relevant Issues
#10000 

## Validation Steps Performed
Font features are detected correctly and can be set in the settings UI

![image](https://github.com/microsoft/terminal/assets/26824113/054c30fa-c584-4b71-872d-d956526c373b)

![image](https://github.com/microsoft/terminal/assets/26824113/484a20eb-abe9-478c-99cf-f63939ab4c5b)

## PR Checklist
- [ ] Closes #xxx
- [ ] Tests added/passed
- [ ] Documentation updated
- If checked, please file a pull request on [our docs
repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx
- [ ] Schema updated (if necessary)
DHowett pushed a commit that referenced this issue Aug 23, 2024
Adds functionality throughout the settings model to keep track of which
settings have been set.

There are two entry points:
- AppLogic.cpp: this is where we perform a settings reload by loading
the JSON
- MainPage.cpp: this is where the Save button is clicked in the settings
UI

Both of these entry points call into
`CascadiaSettings::LogSettingChanges()` where we aggregate the list of
changes (specifically, _which_ settings changed, not _what_ their value
is).

Just about all of the settings model objects now have a
`LogSettingChanges(std::set& changes, std::string_view context)` on
them.
- `changes` is where we aggregate all of the changes to. In it being a
set, we don't need to worry about duplicates and can do things like
iterate across all of the profiles.
- `context` prepends a string to the setting. This'll allow us to better
identify where a setting was changes (i.e. "global.X" are global
settings). We also use this to distinguish between settings set in the
~base layer~ profile defaults vs individual profiles.

The change log in each object is modified via two ways:
- `LayerJson()` changes: this is useful for detecting JSON changes! All
we're doing is checking if the setting has a value (due to inheritance,
just about everything is an optional here!). If the value is set, we add
the json key to the change log
- `INHERITABLE_SETTING_WITH_LOGGING` in IInheritable.h: we already use
this macro to define getters and setters. This new macro updates the
setter to check if the value was set to something different. If so, log
it!

 Other notes:
- We're not distinguishing between `defaultAppearance` and
`unfocusedAppearance`
- We are distinguishing between `profileDefaults` and `profile` (any
other profile)
- New Tab Menu Customization:
- we really just care about the entry types. Handled in
`GlobalAppSettings`
- Font:
- We still have support for legacy values here. We still want to track
them, but just use the modern keys.
- `Theme`:
- We don't do inheritance here, so we have to approach it differently.
During the JSON load, we log each setting. However, we don't have
`LayerJson`! So instead, do the work in `CascadiaSettings` and store the
changes there. Note that we don't track any changes made via setters.
This is fine for now since themes aren't even in the settings UI, so we
wouldn't get much use out of it anyways.
- Actions:
- Actions are weird because we can have nested and iterable actions too,
but `ActionsAndArgs` as a whole add a ton of functionality. I handled it
over in `Command::LogSettingChanges` and we generally just serialize it
to JSON to get the keys. It's a lot easier than dealing with the object
model.

Epic: #10000
Auto-Save (ish): #12424
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Settings UI Anything specific to the SUI Issue-Scenario Product-Terminal The new Windows Terminal.
Projects
None yet
Development

No branches or pull requests

3 participants