summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-08-20 18:13:43 +0900
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2018-08-21 22:43:27 +0900
commit1be685a7f3a8e0e01a2fd18e1efcee0393abd8f8 (patch)
tree33a5c072296f1595722f698c144d242e27a7cf82
parentbe7533abf18211a37b1895e9cea0bb31401926ff (diff)
downloadbuildstream-tristan/notifications-1.2.tar.gz
_frontend/linuxapp.py: Fix special casing around desktop notification escape sequencetristan/notifications-1.2
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
-rw-r--r--buildstream/_frontend/linuxapp.py37
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)