terminal.py: add tmux new window option
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. (From OE-Core rev: d7ef9e49b1c687279f6eb2c7abc32ff915714177) Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
b7d91d30a5
commit
7c3b9a9a9f
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue