Module jumpscale.core.executors.tmux
tmux module allows manipulation of tmux sessions, pane and launching background commands in it
Expand source code
"""tmux module allows manipulation of tmux sessions, pane and launching background commands in it"""
import libtmux
from jumpscale.core.logging import export_module_as as logger
from .command_builder import cmd_from_args
__all__ = ["execute_in_window"]
server = libtmux.Server()
JS_SESSION_NAME = "js-ng"
def create_session(session_name, kill_if_exists=False):
return server.new_session(session_name, kill_session=kill_if_exists)
def kill_session(session_name):
return server.kill_session(session_name)
def get_session(session_name):
try:
session = server.find_where({"session_name": session_name})
if not session:
return create_session(session_name)
except libtmux.exc.LibTmuxException:
return create_session(session_name)
return session
def get_js_session():
return get_session(JS_SESSION_NAME)
def get_js_window(window_name):
return get_window(session_name=JS_SESSION_NAME, window_name=window_name)
def get_window(session_name, window_name):
session = get_session(session_name)
window = session.find_where({"window_name": window_name})
if not window:
window = session.new_window(window_name)
return window
@cmd_from_args
def execute_in_window(cmd, window_name, session_name=None):
"""
execute a command in a new tmux window
Args:
cmd (str or list): command as a string or an argument list, e.g. `"ls -la"` or `["ls", "la"]`
window_name (str): window name
"""
if session_name:
window = get_window(session_name, window_name)
else:
window = get_js_window(window_name)
window.attached_pane.send_keys(cmd)
Functions
def execute_in_window(cmd, window_name, session_name=None)
-
execute a command in a new tmux window
Args
cmd
:str
orlist
- command as a string or an argument list, e.g.
"ls -la"
or["ls", "la"]
window_name
:str
- window name
Expand source code
@cmd_from_args def execute_in_window(cmd, window_name, session_name=None): """ execute a command in a new tmux window Args: cmd (str or list): command as a string or an argument list, e.g. `"ls -la"` or `["ls", "la"]` window_name (str): window name """ if session_name: window = get_window(session_name, window_name) else: window = get_js_window(window_name) window.attached_pane.send_keys(cmd)