Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
"""
sformats = formats.SESSION_FORMATS
tmux_formats = ['#{%s}' % f for f in sformats]
tmux_args = (
'-F%s' % '\t'.join(tmux_formats), # output
)
proc = self.cmd(
'list-sessions',
*tmux_args
)
if proc.stderr:
raise exc.TmuxpException(proc.stderr)
else:
session_info = proc.stdout[0]
if proc.stderr:
raise exc.TmuxpException(proc.stderr)
sformats = formats.SESSION_FORMATS
tmux_formats = ['#{%s}' % format for format in sformats]
sessions = proc.stdout
# combine format keys with values returned from ``tmux list-windows``
sessions = [dict(zip(
sformats, session.split('\t'))) for session in sessions]
# clear up empty dict
sessions = [
tmux_args = (
'-s%s' % session_name,
'-P', '-F%s' % '\t'.join(tmux_formats), # output
)
if not attach:
tmux_args += ('-d',)
proc = self.cmd(
'new-session',
*tmux_args
)
if proc.stderr:
raise exc.TmuxpException(proc.stderr)
session = proc.stdout[0]
if env:
os.environ['TMUX'] = env
# combine format keys with values returned from ``tmux list-windows``
session = dict(zip(sformats, session.split('\t')))
# clear up empty dict
session = dict((k, v) for k, v in session.items() if v)
session = Session(server=self, **session)
return session
window_args += (
'-F"%s"' % '\t'.join(tmux_formats), # output
)
if window_name:
window_args += ('-n%s' % window_name,)
window_args += (
# empty string for window_index will use the first one available
'-t%s:%s' % (self.get('session_id'), window_index),
)
proc = self.cmd('new-window', *window_args)
if proc.stderr:
raise exc.TmuxpException(proc.stderr)
window = proc.stdout[0]
window = dict(zip(wformats, window.split('\t')))
# clear up empty dict
window = dict((k, v) for k, v in window.items() if v)
window = Window(session=self, **window)
self.server._update_windows()
return window
set_layout_hook(builder.session, 'client-attached')
set_layout_hook(builder.session, 'client-session-changed')
sys.exit('Session created in detached state.')
else: # tmuxp ran from inside tmux
if has_gte_version('2.6'):
# if attaching for first time
set_layout_hook(builder.session, 'client-attached')
# for cases where user switches client for first time
set_layout_hook(builder.session, 'client-session-changed')
if not detached:
builder.session.attach_session()
except exc.TmuxpException as e:
import traceback
click.echo(traceback.format_exc(), err=True)
click.echo(e, err=True)
choice = click.prompt(
'Error loading workspace. (k)ill, (a)ttach, (d)etach?',
value_proc=_validate_choices(['k', 'a', 'd']),
default='k',
)
if choice == 'k':
builder.session.kill_session()
click.echo('Session killed.')
elif choice == 'a':
if 'TMUX' in os.environ:
def build(self, session=None):
"""Build tmux workspace in session.
Optionally accepts ``session`` to build with only session object.
Without ``session``, it will use :class:`Server` at ``self.server``
passed in on initialization to create a new Session object.
:param session: - session to build workspace in
:type session: :class:`Session`
"""
if not session:
if not self.server:
raise exc.TmuxpException(
'WorkspaceBuilder.build requires server to be passed ' +
'on initialization, or pass in session object to here.'
)
if self.server.has_session(self.sconf['session_name']):
self.session = self.server.findWhere(
{
'session_name': self.sconf['session_name']
}
)
raise exc.TmuxSessionExists(
'Session name %s is already running.' %
self.sconf['session_name']
)
else:
session = self.server.new_session(
def attach_session(self, target_session=None):
"""``$ tmux attach-session`` aka alias: ``$ tmux attach``.
:param: target_session: str. name of the session. fnmatch(3) works.
"""
tmux_args = tuple()
if target_session:
tmux_args += ('-t%s' % target_session,)
proc = self.cmd('attach-session', *tmux_args)
if proc.stderr:
raise exc.TmuxpException(proc.stderr)