microsoft / terminal

The new Windows Terminal and the original Windows console host, all in the same place!
MIT License
95.26k stars 8.27k forks source link

[Scenario] Progress Bar Follow-ups #6700

Open zadjii-msft opened 4 years ago

zadjii-msft commented 4 years ago
[Original issue: #3004] [Initial PR: #8055] [Display the progress in the tab: #8133]

This is a list of tasks, bugs, etc, related to the "taskbar progress indicator", as first implemented in #8055. While not all of them are immediately relevant for the taskbar indicator, they're all related to the showing of progress state in the Terminal.

Sequence Description
`ESC ] 9 ; 4 ; st ; pr ST` Set progress state on Windows 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

### Follow-up work
- [ ] #7955
- [ ] #1620
- [ ] #8449
- [ ] #9481
- [x] #8910
- [x] #10090
- [x] #9743
- [ ] #3991

"Auto-detect output, display in tab/taskbar" (#7955) and #1620 are very closely related

Bell notifications

These cover some of the same areas of the above, so I'm including them because I feel they deserve a mention here:

Related?

ghost commented 4 years ago

Hi! Thanks for attempting to open an issue. Unfortunately, you didn't write anything in the body which makes it impossible to understand your concern. You are welcome to fix up the issue and try again by opening another issue with the body filled out.

qu1ck commented 3 years ago

Just some context on how conemu does autodetection of long running operations: if last line starts with [int]% it assumes that it's a progress indicator and sets tab name accordingly and also taskbar state:

image

I would love to see something like this in terminal.

sba923 commented 3 years ago

Just installed Preview v1.6.10272.0 and gave that great feature a shot.

Is it intentional that the taskbar (only) reflects the "progress state" of the active tab? I know that it's not possible to display multiple states there, but shouldn't it be possible to display the result of some combination? For instance, if any tab is "busy", then the taskbar says "busy", if tab 1 is at 50% and tab 2 is at 75%, then the taskbar shows 62.5%?

DHowett commented 3 years ago

It is intentional.

zadjii-msft commented 3 years ago

It doesn't seem like a bad idea to combine these states somehow (with a setting), but we'd want to make sure we're clear what happens in cases like:

etc.

sba923 commented 3 years ago

It doesn't seem like a bad idea to combine these states somehow (with a setting), but we'd want to make sure we're clear what happens in cases like:

  • one tab has progress=N%, another tab has no progress
  • one tab has progress=N%, another tab has progress=M%
  • one tab has progress=N%, another tab has progress=indeterminate
  • one tab has progress=N%, another tab has progress=M% AND is in the error state

etc.

Sure, we have to specify this exhaustively.

sba923 commented 3 years ago

I can't seem to see a visible difference between ESC ] 9 ; 4 ; 2 ST (Error) and ESC ] 9 ; 4 ; 4 ST (Warning or Pause, what's the official 'name'?).

Do I miss something?

zadjii-msft commented 3 years ago

"warning": ^[]9;4;4;100^G image

"error": ^[]9;4;2;100^G image

One is yellow, the other is red...

sba923 commented 3 years ago

"warning": ^[]9;4;4;100^G image

"error": ^[]9;4;2;100^G image

One is yellow, the other is red...

Oh... reading #8055 and experimenting, I had not guessed / understood that the pr argument must be present, even when useless. It doesn't seem needed for 0 and 3, but now I know that a dummy non-zero argument must be there for 2 and 4...

tringi commented 3 years ago

It doesn't seem like a bad idea to combine these states somehow (with a setting), but we'd want to make sure we're clear what happens in cases like:

  • one tab has progress=N%, another tab has no progress
  • one tab has progress=N%, another tab has progress=M%
  • one tab has progress=N%, another tab has progress=indeterminate
  • one tab has progress=N%, another tab has progress=M% AND is in the error state

etc.

Sure, we have to specify this exhaustively.

It is specified in Taskbar API here how progress bars are combined for multiple windows collapsed into single button. For consistency it would be good idea to duplicate the behavior.

zadjii-msft commented 3 years ago

It is specified in Taskbar API here how progress bars are combined for multiple windows collapsed into single button. For consistency it would be good idea to duplicate the behavior.

image

Thanks for that. We should do that.

WSLUser commented 3 years ago

FYI, this WinUI bug still exists: https://github.com/microsoft/microsoft-ui-xaml/issues/3787

sba923 commented 3 years ago

On at least two of my systems ESC ] 9 ; 4 ; 3 ; 100 BEL does cause the rotating symbol on the Windows Terminal tab, but doesn't trigger the animation on the taskbar button. Shall I open a separate issue for that?

sba923 commented 3 years ago

On at least two of my systems ESC ] 9 ; 4 ; 3 ; 100 BEL does cause the rotating symbol on the Windows Terminal tab, but doesn't trigger the animation on the taskbar button. Shall I open a separate issue for that?

Opened https://github.com/microsoft/terminal/issues/9374

tringi commented 3 years ago

A little off topic, but wouldn't it be trivial to add this also to Conhost? Just simply forward the command to ITaskbarList3?

Thinking about it... now that this is open, I might even try myself.

sba923 commented 3 years ago

On at least two of my systems ESC ] 9 ; 4 ; 3 ; 100 BEL does cause the rotating symbol on the Windows Terminal tab, but doesn't trigger the animation on the taskbar button. Shall I open a separate issue for that?

Opened #9374

9374 closed with solution by @DHowett: one must enable animations under Settings / Ease of Access / Display:

image

Without this, only OSC9;4;x;yST with x=1,2,4 are fully functional.

sba923 commented 2 years ago

On at least two of my systems ESC ] 9 ; 4 ; 3 ; 100 BEL does cause the rotating symbol on the Windows Terminal tab, but doesn't trigger the animation on the taskbar button. Shall I open a separate issue for that?

Opened #9374

9374 closed with solution by @DHowett: one must enable animations under Settings / Ease of Access / Display:

Here's the state of affairs on this issue:

  1. on one system, even with "Show Animations in Windows" set to "on", the animation's still missing
  2. on the same system, the "Show Animations in Windows" setting keeps turning itself off

This has been discussed in https://github.com/microsoft/terminal/issues/9374 up to the point where I created https://aka.ms/AAehwy4, and from there no progress has been made.

aetonsi commented 1 year ago

Hi, is there, anywhere, a clear documentation about all of these behaviors? If not, would it be possible to add a brief section in the Console Virtual Terminal Sequences page (if that's the correct location)?

I'm asking because i have a couple of quick questions but i can't find the answer anywhere, the information is pretty fragmented (it seems to me). I'm going to place them here in case anyone has an answer.

First question It's possible to switch from "progress" (green taskbar) status to "error"/"warning" status (red/yellow) without altering and without even knowing the current progress percentage. This is possible by using st=2/4 (error/warning) combined with pr=` (empty string). For example, if the status bar is currently 33% in "progress" (green) status, usingst=2andpr= i can go to 33% "error" (red) status. The question is: is it possible to do the same but in the opposite direction? meaning, for example, is it possible to go from 33% "error" status to _the same_ percentage but in "progress" status? I triedst=1andpr= /-1/0either do nothing or simply reset the taskbar (as ifstwas0`)

Second question In #8055 it is said:

We've also extended this with:

  • st 3: set indeterminate state
  • st 4: set paused state

What it is meant with "paused state"? is it referring to conemu's "warning" state? or is it some additional/custom WindowsTerminal's feature?


thank you everyone

j4james commented 1 year ago

The question is: is it possible to do the same but in the opposite direction? meaning, for example, is it possible to go from 33% "error" status to the same percentage but in "progress" status?

No. The default percent value for an error state is the whatever current percent is (that's why you can change from st=1 to st=2 without setting the percent), but the default percent value for the progress state is 0. In other words, if you set st=1 with no percent, you're getting 0%, which is the same as disabling the progress.

What it is meant with "paused state"? is it referring to conemu's "warning" state?

Yes. At the time this feature was being developed, ConEmu had only documented states 0, 1, and 2. I think state 3 may already have been implemented, but not yet documented. State 4 was then proposed by Windows Terminal, but it was discussed with the Maximus5 first, who agreed to add matching functionality to ConEmu. The ConEmu documentation now includes all 5 states (see ConEmu specific OSC).

aetonsi commented 1 year ago

No. The default percent value for an error state is the whatever current percent is (that's why you can change from st=1 to st=2 without setting the percent), but the default percent value for the progress state is 0. In other words, if you set st=1 with no percent, you're getting 0%, which is the same as disabling the progress.

Is this a Windows default?

Is there a system API to read the current progress percentage? Because if there is, it would nice if WindowsTerminal's behaviour was more consistent, maintaining the current percentage whenever pr=`, even when going fromst=2/4tost=1` (by first reading the current "error"/"warning" percentage, then applying the "progress" state with that percentage).

If you deem this to be too misleading, because it wouldn't match the OS' behaviour, i'd just like to know if a WT escape code/API/something to get the current percentage exists, so that i can use it in my utilities to achieve the aforementioned behaviour. Something like the ESC[6n escape code which "returns" the cursor position in the stdin stream (even though i don't know how to read the returned value...)

j4james commented 1 year ago

Is this a Windows default?

No. That's the way it was defined by ConEmu. We're just following their specification.

i'd just like to know if a WT escape code/API/something to get the current percentage exists

No. The simplest option would be for you to keep track of the last percentage value yourself, since I'm assuming you're the one that set it. But if that's not an option for you, then I don't have any other ideas.