diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-08-20 18:13:43 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-08-22 14:24:42 +0900 |
commit | 3d4e649df8acffe3abbd27f393ef1cc981ea2580 (patch) | |
tree | ba2fafe6ca3d3797524aa36b551da140bba41f3b /buildstream/_frontend | |
parent | 81278f84dffd7e499c5fb5be1e1685300ac28387 (diff) | |
download | buildstream-3d4e649df8acffe3abbd27f393ef1cc981ea2580.tar.gz |
_frontend/linuxapp.py: Fix special casing around desktop notification escape sequence
Now we allow the notification to happen on any TERM
which starts with 'xterm' or 'vte', and we only do it
if the VTE_VERSION is >= 4600, where we know for sure that
VTE will not print garbage on the terminal.
Fixes #385
Diffstat (limited to 'buildstream/_frontend')
-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) |