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

Send Desktop Notification via VT Sequence (OSC777) #7718

Open
skyline75489 opened this issue Sep 24, 2020 · 14 comments · May be fixed by #14425
Open

Send Desktop Notification via VT Sequence (OSC777) #7718

skyline75489 opened this issue Sep 24, 2020 · 14 comments · May be fixed by #14425
Labels
Area-VT Virtual Terminal sequence support Help Wanted We encourage anyone to jump in on these. In-PR This issue has a related PR Issue-Feature Complex enough to require an in depth planning process and actual budgeted, scheduled work. Product-Terminal The new Windows Terminal.
Milestone

Comments

@skyline75489
Copy link
Collaborator

skyline75489 commented Sep 24, 2020

Description of the new feature/enhancement

On macOS there's terminal-notifier. On Linux there's notify-send. But on Windows I don't think there's a similar tool. Adding the support for desktop notification in WT would help scripts/TUI apps to send notification without too much hassle.

Proposed technical implementation details (optional)

The terminal-wg has not finalized a spec for this feature. The issue is here. The implementation is leaning towards using OSC 9/99/777.

@skyline75489 skyline75489 added the Issue-Feature Complex enough to require an in depth planning process and actual budgeted, scheduled work. label Sep 24, 2020
@ghost ghost added Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting Needs-Tag-Fix Doesn't match tag requirements labels Sep 24, 2020
@WSLUser
Copy link
Contributor

WSLUser commented Sep 24, 2020

But on Windows I don't think there's a similar tool

You have Win-Toast (this is what provides Desktop notifications in Win 10) https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/scheduled-toast

@WSLUser
Copy link
Contributor

WSLUser commented Sep 24, 2020

Also see microsoft/WSL#2466 (comment)

@DHowett
Copy link
Member

DHowett commented Sep 25, 2020

I'd rather leave this as a gap to be filled by third parties than add support for notifications in Terminal. The world is awash with notifications -- websites ask, desktop apps have them, mobile apps spam you with ads even though they shouldn't -- and I don't want to contribute to that.

If a 3rd party wants to write a notifier, they're more than welcome to. 😄

@DHowett DHowett added the Resolution-Won't-Fix We're just really obstinate about this. There's probably a good reason. label Sep 25, 2020
@skyline75489
Copy link
Collaborator Author

Thansk @WSLUser for the very useful info. @DHowett That is actually a fair point. I'll close this. I think this thread is helpful for those who want the world to be even noisier (I'm not one of them. I'm just interested in those cool VT sequences 😄 )

@j4james
Copy link
Collaborator

j4james commented Oct 17, 2020

Just to be clear, if someone came up with a PR adding support for something like OSC 777, would that be rejected? I'm not sure what is meant when you say a 3rd party is welcome to write a notifier. Does that mean it would have to be via a WT extension?

I understand some people may not like notifications, but since Windows lets you disable them on a per-app basis, that doesn't seem like it should be a big deal.

Not that I'm that desperate for this functionality, but I can see how it would be useful. I was about to suggest this as a possible solution for #7955, but that's clearly not an option if it's a definite "wont-fix".

@skyline75489
Copy link
Collaborator Author

skyline75489 commented Oct 18, 2020 via email

@j4james
Copy link
Collaborator

j4james commented Oct 18, 2020

How would that work over a remote connection though? The use case for this is when you've ssh'ed onto a remote machine that's executing a long running job, and you want to be notified when the job completes. It may not even be a Windows machine. You need an interoperable way for your job to let the local machine know that it's done.

Personally I can get by with just outputting a BEL, but I can see the appeal of having something more explicit that lets you know exactly what happened. There are any number of reasons you might hear a BEL, and you could also have multiple jobs that you're waiting on. Anyway, not essential for me. It just seemed weird to outright ban the feature.

@zadjii-msft
Copy link
Member

How would that work over a remote connection though?

And that's all I needed to hear to justify this request IMO. I wouldn't reject a PR that implements that. It looks like there hasn't been a lot of progress in terminal-wg#13 unfortunately, and with Egmont out of the terminal game I doubt there will be any. Looks like kitty implemented OSC 9 and the in-progress OSC 99 (see kovidgoyal/kitty#1474 (comment)), though, since 99 was a spec in progress, I'd rather stick with the OSC777 / OSC9 implementations, to keep it simple.


aside: The Windows 10 notification system is fairly elaborate, and it allows apps to put fairly rich content into the notification. Maybe at some point in the future, we might want to design a sequence for something like letting a user encode an adaptive card in a notification. Adaptive Cards might be a good solution there for x-plat rendering of the notification. That's more of a 2025 dream though - let's focus on the basics for now.


This doc was also intriguing, had a good list of OSCs supported by hterm

@zadjii-msft zadjii-msft reopened this Oct 18, 2020
@zadjii-msft zadjii-msft changed the title Feature Request: Desktop Notification Send Desktop Notification via VT Sequence (OSC9 or OSC777) Oct 18, 2020
@zadjii-msft zadjii-msft added Area-VT Virtual Terminal sequence support Product-Terminal The new Windows Terminal. and removed Resolution-Won't-Fix We're just really obstinate about this. There's probably a good reason. labels Oct 18, 2020
@ghost ghost removed the Needs-Tag-Fix Doesn't match tag requirements label Oct 18, 2020
@zadjii-msft zadjii-msft added this to the Terminal Backlog milestone Oct 18, 2020
@zadjii-msft zadjii-msft added the Help Wanted We encourage anyone to jump in on these. label Oct 18, 2020
@j4james
Copy link
Collaborator

j4james commented Oct 18, 2020

I'd rather stick with the OSC777 / OSC9 implementations, to keep it simple.

+1 to this. And if we're just going to choose one, I'd have a slight preference for OSC 777, since iTerm2's OSC 9 conflicts with ConEmu, which uses OSC 9 for other purposes (see here). Also I think OSC 777 is a little more widely supported, although I'm not certain of that.

@WSLUser

This comment has been minimized.

@zadjii-msft zadjii-msft removed the Needs-Triage It's a new issue that the core contributor team needs to triage at the next triage meeting label Oct 21, 2020
@skyline75489
Copy link
Collaborator Author

I've done more research and found that OSC 777 is more complicated that I thought.

Per the documentation of urxvt, OSC 777 actually "call the perl extension with the given string, which should be of the form extension:parameters". So to make OSC 777;notify work, you actually need to write a perl script in /usr/lib/urxvt/perl/notify. Then urxvt will call the script once it receives the OSC 777;notify sequence.

I think this is more of a plugin sequence instead of just for notification. However I doubt that hterm would really support such level of extensibility because it only support "notify". But should we also limit 777 to notification? Is it just me, or it feels somewhat wasteful and not faithful to the original design of this sequence?

@j4james
Copy link
Collaborator

j4james commented Nov 6, 2020

I don't think you need to get too hung up on the implementation details of urxvt. We're not trying to implement their plugin system - just this particular sequence (much like we're doing the 9;4 command from Conemu's OSC 9). I think the main thing is to make sure we're compatible with the various shells that use the sequence for command completion notification, and to make sure we handle the notifications the same way as other terminals.

I haven't looked at this in much detail, but I believe the sequence is supported by quite a few terminals other than urxvt and hterm, including Terminology, Tilix, Contour, and at least some builds of Gnome Terminal (I know the Fedora/RedHat distribution patched their VTE to support it).

It's also worth mentioning that the notifications are only expected to be displayed when the terminal is in the background (at least that's my understanding). I think what happens is the shell generates a notification after every command, but you obviously don't want to see all of those notifications when you're just doing something like a directory listing. But if you execute a long running command, and switch to another window (or another tab), then you should get a notification when that command eventually completes.

@skyline75489 skyline75489 changed the title Send Desktop Notification via VT Sequence (OSC9 or OSC777) Send Desktop Notification via VT Sequence (OSC777) Nov 19, 2020
@zadjii-msft zadjii-msft added the good first issue This is a fix that might be easier for someone to do as a first contribution label Feb 9, 2021
@zadjii-msft
Copy link
Member

zadjii-msft commented Sep 23, 2022

quick notes:

  • The toast notification sample is definitely hard to read, but miles better than it was last time I checked. It works in the scratch app, without another dependency.
  • Clicking on a notification spawns a second Terminal instance. We'll have to communicate back to the sender.
  • Seems doable with the ToastNotificationActivatedEventArgs and getting the actual startup args the way I did in early Starting directory no longer respected #878 experiments.
  • We'll need a static method off WindowManager to call to a monarch if one exists, without creating one.

Cause this involves a bunch of Remoting work for trying to activate the original window, I'm pulling good first issue.

see dev/migrie/fhl/7718-notifications

@zadjii-msft zadjii-msft removed the good first issue This is a fix that might be easier for someone to do as a first contribution label Sep 23, 2022
@zadjii-msft
Copy link
Member

fhl-7718-prototype-000

fhl-7718-prototype-001

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-VT Virtual Terminal sequence support Help Wanted We encourage anyone to jump in on these. In-PR This issue has a related PR Issue-Feature Complex enough to require an in depth planning process and actual budgeted, scheduled work. Product-Terminal The new Windows Terminal.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants
@DHowett @j4james @skyline75489 @zadjii-msft @WSLUser and others