Epic: Introduce Actions page to the Settings UI #9601

Open
opened 2026-01-31 01:58:55 +00:00 by claunia · 3 comments
Owner

Originally created by @zadjii-msft on GitHub (Jul 13, 2020).

Originally assigned to: @carlos-zamora on GitHub.

written and maintained by @carlos-zamora

Description

A largely missing part of the Settings UI is actions. This will allow the user to customize their command palette and key bindings without the need to go into the JSON.

Much like the implementation plan for the Settings UI, there are many moving pieces to this that are outside of the TerminalSettingsEditor project:

Some follow-up work items:

  • Key chord editor/listener
    • Instead of parsing key chord text, it'd be nice if we could listen for key chords.
    • Inspiration: We should take a look at how PowerToys got around this problem.
    • Inspiration: An old version of SUI also had this implemented (back during the hackathon).
    • PR Portable tabs between windows. (#10652)
  • "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)

Bugs:

  • Settings Model:
    • #10365: not serializing top-level "iterateOn" commands! (PR #10373)
    • GetKeyBindingForAction doesn't always find the given action (PR #10341)
  • Settings UI:
    • #10406: Edit button on actions page is invisible with light theme

References

#7175 should be kept in mind during this design.

Originally created by @zadjii-msft on GitHub (Jul 13, 2020). Originally assigned to: @carlos-zamora on GitHub. _written and maintained by @carlos-zamora_ ## Description A largely missing part of the Settings UI is actions. This will allow the user to customize their command palette and key bindings without the need to go into the JSON. Much like the implementation plan for the Settings UI, there are many moving pieces to this that are outside of the `TerminalSettingsEditor` project: - [x] #8100: Inheritance for actions - enables ability to track where an action came from - PR #9621 - [x] serialization for actions - step 1: general serialization - step 2: only serialize meaningful changes into settings.json (don't serialize the whole thing) - PR #9926 - [x] Design Settings UI representation - PR #9427 - [x] Implement proposed design - Foundation (PR #9949) - delete a key binding - set the key chord for a key binding - miscellaneous work (i.e. keyboard navigation, accessibility, etc...) - Set Action - change the action for a key binding (PR #10220) - add a new key binding (PR #10550) Some follow-up work items: - [x] Key chord editor/listener - Instead of parsing key chord text, it'd be nice if we could listen for key chords. - Inspiration: We should take a look at how PowerToys got around this problem. - Inspiration: An old version of SUI also had this implemented (back during the hackathon). - PR #10652 - [ ] "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 Bugs: - Settings Model: - [X] #10365: not serializing top-level "iterateOn" commands! (PR #10373) - [x] `GetKeyBindingForAction` doesn't always find the given action (PR #10341) - Settings UI: - [x] #10406: Edit button on actions page is invisible with light theme ## References #7175 should be kept in mind during this design.
claunia added the Product-TerminalIssue-ScenarioArea-SettingsUI labels 2026-01-31 01:58:55 +00:00
Author
Owner

@gpotter2 commented on GitHub (May 27, 2021):

You can add your feedback as comments in this issue

Here are some personal suggestions regarding the UI. Sorry if I missed something, I didn't try out https://github.com/microsoft/terminal/pull/10220 yet

  • Group the actions by category (e.g. Keybinds that handle tabs, keybinds that handle panes, custom keybinds...). This will make it infinetly more user friendly. Alphabetical sorting (current) isn't really useful, when even the default order of ALL_SHORTCUT_ACTIONS is better.
  • (I personally thought it would have been fancier if simply clicking on the key combo allowed to replace it instead of having to click on the pencil that only appears once the cursor is already on said key combo)

Also massive +1 on follow-up - Key chord editor/listener. That would be pretty life-changing

Thanks again for this amazing work

@gpotter2 commented on GitHub (May 27, 2021): > You can add your feedback as comments in [this issue](https://github.com/microsoft/terminal/issues/6900) Here are some personal suggestions regarding the UI. Sorry if I missed something, I didn't try out https://github.com/microsoft/terminal/pull/10220 yet - Group the actions by category (e.g. Keybinds that handle tabs, keybinds that handle panes, custom keybinds...). This will make it infinetly more user friendly. Alphabetical sorting (current) isn't really useful, when even the default order of `ALL_SHORTCUT_ACTIONS` is better. - (I personally thought it would have been fancier if simply clicking on the key combo allowed to replace it instead of having to click on the pencil that only appears once the cursor is already on said key combo) Also massive +1 on `follow-up - Key chord editor/listener`. That would be pretty life-changing Thanks again for this amazing work
Author
Owner

@zadjii-msft commented on GitHub (Nov 16, 2021):

@carlos-zamora This is in main now, and enabled by default. Should we close this one out?

@zadjii-msft commented on GitHub (Nov 16, 2021): @carlos-zamora This is in main now, and enabled by default. Should we close this one out?
Author
Owner

@carlos-zamora commented on GitHub (Nov 17, 2021):

@carlos-zamora This is in main now, and enabled by default. Should we close this one out?

Oh, good call. I'll handle that today. I just want to promote some of the unfinished work items to issues for tracking.

@carlos-zamora commented on GitHub (Nov 17, 2021): > @carlos-zamora This is in main now, and enabled by default. Should we close this one out? Oh, good call. I'll handle that today. I just want to promote some of the unfinished work items to issues for tracking.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#9601