]> code.ossystems Code Review - openembedded-core.git/commitdiff
terminal.py: add tmux new window option
authorDan McGregor <dan.mcgregor@usask.ca>
Wed, 4 Feb 2015 16:09:12 +0000 (10:09 -0600)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Sat, 7 Feb 2015 18:52:44 +0000 (18:52 +0000)
Add a new terminal type that makes a new window in the running tmux
session instead of splitting the window. 80x25 is not enough to run
menuconfig inside a split window, so add the option to create a new
window instead.

Use the new window option by default when the split window would be
less than 19 lines high.

Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca>
Signed-off-by: Ross Burton <ross.burton@intel.com>
meta/lib/oe/terminal.py

index 17d09045e432be85c0d7eed786d4bdfe4248e49d..54e3ffc1e84843179a8a2199b7863df2d1afcd8f 100644 (file)
@@ -109,6 +109,24 @@ class TmuxRunning(Terminal):
     command = 'tmux split-window "{command}"'
     priority = 2.75
 
+    def __init__(self, sh_cmd, title=None, env=None, d=None):
+        if not bb.utils.which(os.getenv('PATH'), 'tmux'):
+            raise UnsupportedTerminal('tmux is not installed')
+
+        if not os.getenv('TMUX'):
+            raise UnsupportedTerminal('tmux is not running')
+
+        if not check_tmux_pane_size('tmux'):
+            raise UnsupportedTerminal('tmux pane too small')
+
+        Terminal.__init__(self, sh_cmd, title, env, d)
+
+class TmuxNewWindow(Terminal):
+    """Open a new window in the current running tmux session"""
+    name = 'tmux-new-window'
+    command = 'tmux new-window -n "{title}" "{command}"'
+    priority = 2.70
+
     def __init__(self, sh_cmd, title=None, env=None, d=None):
         if not bb.utils.which(os.getenv('PATH'), 'tmux'):
             raise UnsupportedTerminal('tmux is not installed')
@@ -184,6 +202,23 @@ def spawn(name, sh_cmd, title=None, env=None, d=None):
     if pipe.returncode != 0:
         raise ExecutionError(sh_cmd, pipe.returncode, output)
 
+def check_tmux_pane_size(tmux):
+    import subprocess as sub
+    try:
+        p = sub.Popen('%s list-panes -F "#{?pane_active,#{pane_height},}"' % tmux,
+                shell=True,stdout=sub.PIPE,stderr=sub.PIPE)
+        out, err = p.communicate()
+        size = int(out.strip())
+    except OSError as exc:
+        import errno
+        if exc.errno == errno.ENOENT:
+            return None
+        else:
+            raise
+    if size/2 >= 19:
+        return True
+    return False
+
 def check_konsole_version(konsole):
     import subprocess as sub
     try: