summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2018-08-22 06:24:12 +0000
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2018-08-22 06:24:12 +0000
commitc8bafb687e1ac2c2692f69c0e6f0bb80a2cb7565 (patch)
treeba2fafe6ca3d3797524aa36b551da140bba41f3b
parent81278f84dffd7e499c5fb5be1e1685300ac28387 (diff)
parent3d4e649df8acffe3abbd27f393ef1cc981ea2580 (diff)
downloadbuildstream-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.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)