diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2018-08-22 06:24:12 +0000 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2018-08-22 06:24:12 +0000 |
commit | c8bafb687e1ac2c2692f69c0e6f0bb80a2cb7565 (patch) | |
tree | ba2fafe6ca3d3797524aa36b551da140bba41f3b | |
parent | 81278f84dffd7e499c5fb5be1e1685300ac28387 (diff) | |
parent | 3d4e649df8acffe3abbd27f393ef1cc981ea2580 (diff) | |
download | buildstream-c8bafb687e1ac2c2692f69c0e6f0bb80a2cb7565.tar.gz |
Merge branch 'tristan/notifications' into 'master'
_frontend/linuxapp.py: Fix special casing around desktop notification escape sequence
Closes #385
See merge request BuildStream/buildstream!692
-rw-r--r-- | buildstream/_frontend/linuxapp.py | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/buildstream/_frontend/linuxapp.py b/buildstream/_frontend/linuxapp.py index 176c5d052..667ce5c2b 100644 --- a/buildstream/_frontend/linuxapp.py +++ b/buildstream/_frontend/linuxapp.py @@ -22,12 +22,43 @@ import click from .app import App +# This trick is currently only supported on some terminals, +# avoid using it where it can cause garbage to be printed +# to the terminal. +# +def _osc_777_supported(): + + term = os.environ['TERM'] + + if term.startswith('xterm') or term.startswith('vte'): + + # Since vte version 4600, upstream silently ignores + # the OSC 777 without printing garbage to the terminal. + # + # For distros like Fedora who have patched vte, this + # will trigger a desktop notification and bring attention + # to the terminal. + # + vte_version = os.environ['VTE_VERSION'] + try: + vte_version_int = int(vte_version) + except ValueError: + return False + + if vte_version_int >= 4600: + return True + + return False + + # A linux specific App implementation # class LinuxApp(App): def notify(self, title, text): - term = os.environ['TERM'] - if term in ('xterm', 'vte'): - click.echo("\033]777;notify;{};{}\007".format(title, text)) + # Currently we only try this notification method + # of sending an escape sequence to the terminal + # + if _osc_777_supported(): + click.echo("\033]777;notify;{};{}\007".format(title, text), err=True) |