-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
Feature Request: Taskbar progress indicator #3004
Comments
I could have sworn we had an internal issue for this feature, but it never got migrated to github it appears.... FOUND IT! MSFT:18258406. Here are the relevant notes:
Also related documentation: ITaskbarList3::SetProgressValue We should probably also make sure that we support the In conpty mode, we should just pass these sequences through. There's a good amount of precedent for such sequences in the code already. EDIT:
|
Would this make a good "starter" issue? |
@SamuelEnglard Perhaps! Anyone’s free to have a crack at any issue they find here unless the team’s actively assigned, and even then they just have to ask. It’s got a couple moving parts, but nothing impossible. For anyone coming from Windows land: the reason the existing solution (calling GetConsoleWindow and using the Shell APIs directly to set progress on the window) doesn’t work is that GetConsoleWindow is an absolute abomination of an API and we never should have let a windowless application access the window it just happened to be hosted in. Circumventing the console and telling the shell to paint progress isn’t even something we can detect; we need applications to move to a standards-compliant or, at the least, quasi- standards-compliant, mechanism for setting progress. |
More to the point, the work that I think is involved here is roughly:
This is kinda the bottom-up approach I'd take to implementing this myself for the Terminal. I'd probably want to start by looking at the last bullet point, actually. That way I'd know what shape the event that's going to get bubbled all the way through all these layers would need. I'd reckon that will line up pretty close with the VT sequence we'll be parsing at the start. This would probably be a lot easier if you just wanted to implement it for conhost. Not nearly as much bubbling (but not no bubbling). The events for setting the title will be really similar actually. There's a bit of extra logic for handling the title, depending on if the user has |
Note that ConEmu does already support the indeterminate state, by setting the st parameter to 3. It's just not documented. |
Why would the "green" and "red" options be supported but not the "yellow"? |
The best place to ask this would be on on the ConEmu repo. |
Thanks for the quick reply @Maximus5! |
… Windows TaskBar). ANSI sequence `ESC ] 9 ; 4 ; 4 ; pr ST` or GuiMacro `Progress(4, pr)` where `pr` is a percentage 0 .. 100. ref: microsoft/terminal#3004
This commit implements the OSC 9;4 sequence per the [ConEmu style]. | sequence | description | | ------------ | ------------ | | `ESC ] 9 ; 4 ; st ; pr ST` | Set progress state on taskbar and tab. | | | When `st` is: | | | | | | `0`: remove progress. | | | `1`: set progress value to `pr` (number, 0-100). | | | `2`: set the taskbar to the "Error" state | | | `3`: set the taskbar to the "Indeterminate" state | | | `4`: set the taskbar to the "Warning" state | We've also extended this with: * st 3: set indeterminate state * st 4: set paused state We handle multiple tabs sending the sequence by using the the last focused control's taskbar state/progress. Upon receiving the sequence in `TerminalApi`, we send an event that gets caught by `TerminalPage`. `TerminalPage` then fires another event that gets caught by `AppHost` and that's where we set the taskbar progress. Closes #3004 [ConEmu style]: https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC
This unfortunately conflicts with iterm2 and kitty use of OSC 9. Not the end of the world since neither supports the others notification, but definitely problematic. |
Both could coexist as long as messages do not begin with "4;"... |
This was discussed in the PR and the terminal-wg issue that you linked. We reached the conclusion that WT probably wouldn't need to support iterm2's use of |
Ok, but what about from the app developer's point of view? I just implemented the progress reporting in my library, and it's nice, thanks. However, when I run my python script on kitty (and presumably iterm and others?) I get a ton of bogus desktop notifications "4;0;10", "4;0;20", etc.... instead. I had to put this BS in my code to work around it:
The least bad solution was probably using another number. As I read the discussion I realized Mr. Kovid is difficult, but I think he was right, we're not running out of integers any time soon. It's a shame that iterm and conemu chose conflicting sequences ~ten years ago, and there's nothing we can do about that. But now that folks are at least in some communication there's no reason to double down on them. ;-) |
If he really cared about the conflict, though, he didn't have to implement OSC 9 as a notification sequence - kitty already supports notification through another OSC sequence. And while I can sympathise with iTerm2, gnachman didn't seem particular attached to OSC 9 when the subject of notifications was being discussed, so it's quite possible he might drop it one day. |
This comment has been minimized.
This comment has been minimized.
mintty also implementes |
As an application developer, I'd like one sequence that works as many places as possible without conflicts… |
If you want consistency, I don't think the interpretation of escape sequences is a good place to be 😆 There's just already so much fragmentation in this space, especially with OSC sequences. No one really standardized them in the first place, so everyone just went wild west claiming whatever they wanted. Not much we can do about it now unfortunately. Curious to me that iTerm2 chose OSC 9. Looks like the sequence must be very old in iTerm2: kovidgoyal/kitty#1474 (comment). Plus, ConEmu has been using OSC 9 as their prefix for years. So it really doesn't make sense to me to double down on OSC9 -> notification. It seems like it was an oversight when it was authored, the current author isn't attached to it, and there are better (non-conflicting alternatives). We could also support the mintty version of the sequence if that doesn't conflict too bad. Don't see why not. |
If the point is to have a sequence that won't break kitty, then that probably isn't going to help. The last version I tested had issues with intermediates (at least some of them), which caused the sequences to be misinterpreted as something else. You may not get a notification popup, but you'll probably get some other weird breakage. |
When in doubt, offer the option to change which OSC is used in settings? |
That only complicates the feature matrix, though. For @mixmastamyk's "application developer" case, now it's just unreliable rather than "consistently different from iTerm2." |
That is true, would need a way to tell Terminal "this application uses OSC 9 for notifications, please do..." |
Man if only there was some sort of database that an app could use to look up "this is how you emit progress bar updates, this is how you send notifications, this is how you set the colors" for various different terminals 😝 |
Description of the new feature/enhancement
Add a taskbar progress indicator for displaying the status of the current long running process (when possible).
For example, this can be helpful to users unpacking files with 7z or running python scripts with tqdm.
ConEmu's documentation.
The text was updated successfully, but these errors were encountered: