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

[Fluent UX] Shortcut Guide v2 #890

Open
crutkas opened this issue Dec 6, 2019 · 46 comments
Open

[Fluent UX] Shortcut Guide v2 #890

crutkas opened this issue Dec 6, 2019 · 46 comments
Assignees
Labels
Area-Localization issues regarding to Localization the application Area-User Interface things that regard UX for PowerToys Cost-Large Large work item - 3+ days worth of work (chances are needs to be broken down) External Dependency-WinUI 3 Dependency on WinUI Product-Shortcut Guide Refers to the Shortcut Guide PowerToy Status-In progress This issue or work-item is under development UI refresh Tracker tag for module specific UI refresh

Comments

@crutkas
Copy link
Member

crutkas commented Dec 6, 2019

PowerToys should do its best to look like a system level integration. Shortcut guide is a great example of where we can be but needs a little bit more polish.

Current screen

image

Update: Possible Proposed adjustments

Here is one idea we've been working with the shell team with. It would allow for contextual hooks for applications, popular items can be included in, teaching moments for 'popular' and

image

image

image

image

In context of full screen:
contextualForPowershell

@crutkas crutkas added Product-Shortcut Guide Refers to the Shortcut Guide PowerToy Area-User Interface things that regard UX for PowerToys labels Dec 7, 2019
@hawkerm
Copy link

hawkerm commented Jan 30, 2020

Would it be helpful to have a keyboard showing where these keys are?

This is a bit busy, but wondering if adding it as some sort of addition could be helpful:
Keyboard Highlighted/Annotated

@crutkas
Copy link
Member Author

crutkas commented Jan 31, 2020

@hawkerm

Would it be helpful to have a keyboard showing where these keys are?

This is a bit busy, but wondering if adding it as some sort of addition could be helpful:

interesting idea few things come to mind.

  1. the layout then is dependent on the keyboard itself. different countries have different keyboards.
  2. a lot of info to put down in a small space so we have a info density issue

@hawkerm
Copy link

hawkerm commented Jan 31, 2020

@crutkas yeah, not sure the best solution. First time using it I was like awesome, now I can remember all the shortcuts... Then I was like OMG wall of text... How do I find what I need...

Maybe this integrates somehow with the fancy search overlay mockup I saw elsewhere and you can search for keyboard shortcuts to learn about them???

@niels9001
Copy link
Contributor

Here's a UX mock-up using WinUI 2.3.

A couple of things that are new:

  • Shortcuts are now clickable, and would trigger the action (.
  • Reveal effect to indicate that shortcuts can be clicked.
  • App icons in the taskbar are color sampled. Using the dominating color as the background of the tooltip, so they are easier to distinguish and recognize.
  • Composition animations for a more fluent look & feel.

ShortCuts

(Source: https://github.com/niels9001/PowerToysUX)

@crutkas
Copy link
Member Author

crutkas commented Mar 5, 2020

how to execute this with WinUI and xaml island

  1. take screenshot of target desktop.
  2. Island XAML will be the following
  • root
  • grid
  • image (screenshot)
  • grid w/ acrylic or transparent (setting for acrylic vs transparent)
  • controls inside grid

we fade in the XAML island quickly (33ms?), then kick off the fade in animation for the control grid
when dismissed, we do a short fade out animation

Do work against WinUI 2.x and we'll migrate to WinUI 3 once we have a stable drop in a bit.

Dismiss action:

  • If a user executes a keystroke
  • if user lifts off Window Key

Why the smoke and mirror for the fade effect:
A user will only notice this if movement is happening in the background since this dialog is up for seconds, I believe this is acceptable. This is how we can get the WinUI controls due to ask for transparency to make this look like it is part of the shell for right now.

@niels9001
Copy link
Contributor

Yeah let's try that out. For any animations, we can leverage the ImplicitAnimations in the Windows Community Toolkit?

@crutkas
Copy link
Member Author

crutkas commented Mar 5, 2020

those ... should work.

@crutkas crutkas added the External Dependency-WinUI 3 Dependency on WinUI label Mar 12, 2020
@crutkas crutkas modified the milestones: Build 2020, v1.0 Release May 19, 2020
@crutkas crutkas pinned this issue Jun 16, 2020
@crutkas crutkas added the Needs-Community Feedback We need additional help with how something should act / look label Jun 16, 2020
@crutkas
Copy link
Member Author

crutkas commented Jun 16, 2020

Just added in the main body an update with possible layout adjustment to shortcut guide. We'd love your thoughts.

@niels9001
Copy link
Contributor

Just added in the main body an update with possible layout adjustment to shortcut guide. We'd love your thoughts.

That looks amazing. So long-pressing the Windows key would bring out the app specific shortcuts for the active app, right?

@crutkas
Copy link
Member Author

crutkas commented Jun 16, 2020

one idea was to see if we could do Win+? to work.

@AnuthaDev
Copy link

AnuthaDev commented Jun 17, 2020

one idea was to see if we could do Win+? to work.

How feasible would it be to allow shortcuts to be double press instead of a key combo or long press? For e.g. double press shift to enable caps lock. And in this instance something like double press alt or any other key to bringup the guide...

@crutkas
Copy link
Member Author

crutkas commented Jun 17, 2020

@AnuthaDev file a new issue for that. That would be an enhancement for Keyboard manager. (which would pipe into the functionality you're seeing)

@Aaron-Junker
Copy link
Collaborator

Aaron-Junker commented Sep 6, 2023

I like the idea of different files for the various programs from @BetterWorld-Liuser. An idea would be to create a repository like the winget manifest one with different files for different programs. PowerToys then could identify downloaded programs and install the needed files.

For example a manifest for notepad could look like this:

{
	"AppName": "notepad.exe",
	"Shortcuts": [
		{
			"SectionName": "Notepad",
			"Properties": [
				{"Name": "Show menu indicators", "Win": false, "Ctrl": false, "Shift": false, "Alt": true, "Keys": []},
				{"Name": "File menu", "Win": false, "Ctrl": false, "Shift": false, "Alt": true, "Keys": ["F"]},
				{"Name": "Edit menu", "Win": false, "Ctrl": false, "Shift": false, "Alt": true, "Keys": ["E"]},
				{"Name": "View menu", "Win": false, "Ctrl": false, "Shift": false, "Alt": true, "Keys": ["V"]},
				{"Name": "Open Notepad settings", "Win": false, "Ctrl": false, "Shift": false, "Alt": true, "Keys": ["S"]}
			]
		},
		{
			"SectionName": "File",
			"Properties": [
				{"Name": "New tab", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["N"]},
				{"Name": "New window", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["N"]},
				{"Name": "Open", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["O"]},
				{"Name": "Save", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["S"]},
				{"Name": "Save as", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["S"]},
				{"Name": "Save all", "Win": false, "Ctrl": true, "Shift": false, "Alt": true, "Keys": ["S"]},
				{"Name": "Print", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["P"]},
				{"Name": "Close tab", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["W"]},
				{"Name": "Close window", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["W"]}
			]
		},
		{
			"SectionName": "Edit",
			"Properties": [
				{"Name": "Undo", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["Z"]},
				{"Name": "Cut", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["X"]},
				{"Name": "Copy", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["C"]},
				{"Name": "Paste", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["V"]},
				{"Name": "Delete", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["DEL"]},
				{"Name": "Find", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["F"]},
				{"Name": "Find next", "Win": false, "Ctrl": false, "Shift": false, "Alt": false, "Keys": ["F3"]},
				{"Name": "Find previous", "Win": false, "Ctrl": false, "Shift": true, "Alt": false, "Keys": ["F3"]},
				{"Name": "Replace", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["H"]},
				{"Name": "Go to", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["G"]},
				{"Name": "Select all", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["A"]},
				{"Name": "Time/Date", "Win": false, "Ctrl": false, "Shift": false, "Alt": false, "Keys": ["F5"]}
			]
		},
		{
			"SectionName": "View",
			"Properties": [
				{"Name": "Zoom in", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["PLUS"]},
				{"Name": "Zoom out", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["MINUS"]},
				{"Name": "Restore default zoom", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["0"]}
			]
		}
	]
}

Or another example for Whatsapp:

{
	"AppName": "WhatsApp.exe",
	"Shortcuts": [
		{
			"SectionName": "WhatsApp",
			"Properties": [
				{"Name": "New chat", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["N"]},
				{"Name": "New group", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["N"]},
				{"Name": "Search", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["F"]},
				{"Name": "Profile", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["P"]},
				{"Name": "Decrease text size", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["-"]},
				{"Name": "Increase text size", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["+"]},
				{"Name": "Reset text size", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["0"]}
			]
		},
		{
			"SectionName": "Chat",
			"Properties": [
				{"Name": "Edit last message", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["UP"]},
				{"Name": "Emoji panel", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["E"]},
				{"Name": "GIF panel", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["G"]},
				{"Name": "Search in chat", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["F"]}
				
			]
		},
		{
			"SectionName": "Chat navigation",
			"Properties": [
				{"Name": "Toggle read", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["U"]},
				{"Name": "Mute chat", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["M"]},
				{"Name": "Close chat", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["W"]},
				{"Name": "Close chat", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["F4"]},
				{"Name": "Previous chat", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["TAB"]},
				{"Name": "Previous chat", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["["]},
				{"Name": "Next chat", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["Tab"]},
				{"Name": "Next chat", "Win": false, "Ctrl": true, "Shift": true, "Alt": false, "Keys": ["]"]},
				{"Name": "Open chat", "Win": false, "Ctrl": true, "Shift": false, "Alt": false, "Keys": ["1-9"]}
			]
		}
	]
}

@Aaron-Junker
Copy link
Collaborator

The JSON scheme for this would be:

{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "title": "PowerToys Shortcut Guide shortcuts manifest",
  "type": "object",
  "properties": {
    "AppName": {
      "type": "string",
      "description": "Name of the app where these shortcuts are shown. Value always to always show the shortcuts.",
      "pattern": "^.*.exe$|^powertoys:windowsdefault$|^powertoys:always$",
      "required": true
    },
    "Shortcuts": {
      "type": "array",
      "description": "Array of sections containing shortcuts for the current app",
      "required": true,
      "items": {
        "type": "object",
        "properties": {
          "SectionName": {
            "type": "string",
            "description": "The title of the section.",
            "required": true
          },
          "Properties": {
            "type": "array",
            "description": "Array of shortcuts",
            "required": true,
            "items": {
              "type": "object",
              "properties": {
                "Name": {
                  "type": "string",
                  "description": "Identifier of the shortcut"
                },
                "Win": {
                  "type": "boolean"
                },
                "Ctrl": {
                  "type": "boolean"
                },
                "Shift": {
                  "type": "boolean"
                },
                "Alt": {
                  "type": "boolean"
                },
                "Keys": {
                  "type": "array",
                  "required": true,
                  "description": "Array of strings represnting keys. There are no restrctions, but some keys will get localised (like \"PAGE DOWN\" or \"DELETE\") or will get displayed with a special icon (for instance \"UP\").",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

@LucasOe
Copy link

LucasOe commented Nov 27, 2023

I'm not sure if it has already been mentioned, but the Shortcut Guide shouldn't show shortcuts that have been disabled in the keyboard manager.

@aaronliu0130
Copy link

I wonder what the status of this is?

@Do7and
Copy link

Do7and commented Sep 4, 2024

@Aaron-Junker How is DIY shortcuts guide now? Is the feature you mentioned now available? There are too many shortcuts, I truly need it.

@Aaron-Junker
Copy link
Collaborator

@Aaron-Junker How is DIY shortcuts guide now? Is the feature you mentioned now available? There are too many shortcuts, I truly need it.

@Do7and Sorry to disappoint you. This was just a concept. This is still in our backlog, but there was no progress on this.

@sba923
Copy link

sba923 commented Sep 4, 2024

@Aaron-Junker How is DIY shortcuts guide now? Is the feature you mentioned now available? There are too many shortcuts, I truly need it.

@Do7and Sorry to disappoint you. This was just a concept. This is still in our backlog, but there was no progress on this.

I understand there are other priorities.

TBH the current shortcut guide is pretty useless (to me, at least).

@Aaron-Junker Aaron-Junker self-assigned this Oct 9, 2024
@Aaron-Junker Aaron-Junker added the Status-In progress This issue or work-item is under development label Oct 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Localization issues regarding to Localization the application Area-User Interface things that regard UX for PowerToys Cost-Large Large work item - 3+ days worth of work (chances are needs to be broken down) External Dependency-WinUI 3 Dependency on WinUI Product-Shortcut Guide Refers to the Shortcut Guide PowerToy Status-In progress This issue or work-item is under development UI refresh Tracker tag for module specific UI refresh
Projects
Status: ⚒️In progress
Development

No branches or pull requests