From 77860fd10d01450e566ae296e464eeccfd9c1afb Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 10:49:29 -0500 Subject: [PATCH 01/20] New command: tmuxp cli (drop into pdb with server and local session) --- tmuxp/cli.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index aa518bbd738..1584ff4dfae 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -661,6 +661,46 @@ def startup(config_dir): os.makedirs(config_dir) +@cli.command(name='cli') +@click.argument('session_name', nargs=1, required=False) +@click.argument('window_name', nargs=1, required=False) +@click.option('-S', 'socket_path', help='pass-through for tmux -S') +@click.option('-L', 'socket_name', help='pass-through for tmux -L') +def command_cli(session_name, window_name, socket_name, socket_path): + server = Server(socket_name=socket_name, socket_path=socket_path) + + try: + if session_name: + session = server.find_where({'session_name': session_name}) + else: + session = server.list_sessions()[0] + + if not session: + raise exc.TmuxpException('Session not found.') + except exc.TmuxpException as e: + print(e) + return + + try: + if window_name: + window = session.find_where({'window_name': window_name}) + if not window: + raise exc.TmuxpException('Window not found.') + else: + window = session.list_windows()[0] + + except exc.TmuxpException as e: + print(e) + return + + try: + breakpoint() + except Exception: # Python 3.7+ + import pdb + + pdb.set_trace() + + @cli.command(name='freeze') @click.argument('session_name', nargs=1, required=False) @click.option('-S', 'socket_path', help='pass-through for tmux -S') From b8aa53d3b456ce6ab3a81dfd17f86e8b87b0db05 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 11:02:41 -0500 Subject: [PATCH 02/20] Make cross-platform breakpoint with versions earlier than 3.7 --- tmuxp/_compat.py | 11 +++++++++++ tmuxp/cli.py | 7 ++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tmuxp/_compat.py b/tmuxp/_compat.py index 36f5bc19eec..b4b1298686d 100644 --- a/tmuxp/_compat.py +++ b/tmuxp/_compat.py @@ -3,10 +3,21 @@ import sys PY2 = sys.version_info[0] == 2 +PY3 = sys.version_info[0] == 3 +PYMINOR = sys.version_info[1] +PYPATCH = sys.version_info[2] _identity = lambda x: x +if PY3 and PYMINOR >= 7: + breakpoint = breakpoint +else: + import pdb + + breakpoint = pdb.set_trace + + if PY2: unichr = unichr text_type = unicode diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 1584ff4dfae..22e08b7d0ca 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -693,12 +693,9 @@ def command_cli(session_name, window_name, socket_name, socket_path): print(e) return - try: - breakpoint() - except Exception: # Python 3.7+ - import pdb + from ._compat import breakpoint as tmuxp_breakpoint - pdb.set_trace() + tmuxp_breakpoint() @cli.command(name='freeze') From bc1f3775dd12a83e0a567f56d3e2be032031be6e Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 11:16:40 -0500 Subject: [PATCH 03/20] CHANGES: Add tmuxp cli --- CHANGES | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES b/CHANGES index bd6a000997e..4d7d60a3df3 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,15 @@ Here you can find the recent changes to tmuxp current ------- - *Insert changes/features/fixes for next release here* +- :issue:`636` New command: ``tmuxp cli`` + + Accepts tmux socket_name/socket_path, automatically uses the current + tmux session and window and makes them available in pdb context. + + In python 3.7+, supports ``PYTHONBREAKPOINT``:: + + pip install ipdb + env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli tmuxp 1.5.8 (2020-10-31) ----------------------- From ff5008ae08af3cc2ef14f4b5155d663314a3b164 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 11:28:17 -0500 Subject: [PATCH 04/20] docs(cli): Add tmuxp cli --- docs/cli.rst | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/cli.rst b/docs/cli.rst index ecad270da81..7696439cfc1 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -22,6 +22,53 @@ In zsh (``~/.zshrc``): eval "$(_TMUXP_COMPLETE=source_zsh tmuxp)" +.. _cli_cli: + +tmux CLI +-------- + +:: + + tmuxp cli + + tmuxp cli + + tmuxp cli + +Launch into a `libtmux`_ session. + +Automatically will picked the current tmux :class:`server `, +:class:`session `, and :class:`window ` you +are currently in. Pass additional arguments to select a specific one of your +choice:: + + (Pdb) server + + (Pdb) server.sessions + [Session($1 your_project)] + (Pdb) session + Session($1 your_project) + (Pdb) session.name + 'your_project' + (Pdb) window + Window(@3 1:your_window, Session($1 your_project)) + (Pdb) window.name + 'your_window' + (Pdb) window.panes + [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) + +Python 3.7 supports `PEP 553`_'s ``PYTHONBREAKPOINT`` and supports +compatible debuggers, for instance `ipdb`_: + +.. code-block:: sh + + pip install ipdb + env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + +.. _PEP 553: https://www.python.org/dev/peps/pep-0553/ +.. _ipdb: https://pypi.org/project/ipdb/ +.. _libtmux: https://libtmux.git-pull.com + .. _cli_freeze: Freeze sessions From aad13158c43455fd1ce2af52bf0c5fcf8bcc7bd3 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 11:35:24 -0500 Subject: [PATCH 05/20] Update README --- README.rst | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.rst b/README.rst index 350ea8905e7..32deaca1127 100644 --- a/README.rst +++ b/README.rst @@ -17,6 +17,41 @@ Installation $ pip install --user tmuxp +tmuxp CLI +--------- + +*New in 1.6.0*: + +``tmuxp cli`` launches into a debugger with `libtmux`_ objects for your +current server, session, and window: + +.. code-block:: shell + + $ tmuxp cli + + (Pdb) server + + (Pdb) server.sessions + [Session($1 your_project)] + (Pdb) session + Session($1 your_project) + (Pdb) session.name + 'your_project' + (Pdb) window + Window(@3 1:your_window, Session($1 your_project)) + (Pdb) window.name + 'your_window' + (Pdb) window.panes + [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) + +Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including +``PYTHONBREAKPOINT``) + +Read more on `tmuxp CLI`_ + +.. _PEP 553: https://www.python.org/dev/peps/pep-0553/ +.. _tmuxp CLI: http://localhost:8031/cli.html#launch-tmux-cli + Load a tmux session ------------------- From ce711508b309b00fde531ba1cbd9fce25b5cb675 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 12:50:55 -0500 Subject: [PATCH 06/20] tmuxp: Pass -c to execute python directly --- tmuxp/cli.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 22e08b7d0ca..140741aaee6 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -666,7 +666,12 @@ def startup(config_dir): @click.argument('window_name', nargs=1, required=False) @click.option('-S', 'socket_path', help='pass-through for tmux -S') @click.option('-L', 'socket_name', help='pass-through for tmux -L') -def command_cli(session_name, window_name, socket_name, socket_path): +@click.option( + '-c', + 'command', + help='Instead of opening shell, execute python code in libtmux and exit', +) +def command_cli(session_name, window_name, socket_name, socket_path, command): server = Server(socket_name=socket_name, socket_path=socket_path) try: @@ -693,9 +698,12 @@ def command_cli(session_name, window_name, socket_name, socket_path): print(e) return - from ._compat import breakpoint as tmuxp_breakpoint + if command is not None: + exec(command) + else: + from ._compat import breakpoint as tmuxp_breakpoint - tmuxp_breakpoint() + tmuxp_breakpoint() @cli.command(name='freeze') From 916523bfcf78a7f81ba5f0693185826834f62fe2 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 12:57:50 -0500 Subject: [PATCH 07/20] docs: Add tmuxp cli -c --- CHANGES | 27 ++++++++++++++++++++++++--- README.rst | 10 +++++++++- docs/cli.rst | 26 ++++++++++++++++++++++++-- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 4d7d60a3df3..7589496d458 100644 --- a/CHANGES +++ b/CHANGES @@ -12,10 +12,31 @@ current Accepts tmux socket_name/socket_path, automatically uses the current tmux session and window and makes them available in pdb context. - In python 3.7+, supports ``PYTHONBREAKPOINT``:: + In python 3.7+, supports ``PYTHONBREAKPOINT``: - pip install ipdb - env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + .. code-block:: sh + + $ pip install ipdb + $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + + You can execute python directly via ``-c``: + + .. code-block:: sh + + $ tmuxp cli -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server my_window -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server my_window -c 'print(window.name.upper())' + MY_WINDOW tmuxp 1.5.8 (2020-10-31) ----------------------- diff --git a/README.rst b/README.rst index 32deaca1127..9b0a9916b2f 100644 --- a/README.rst +++ b/README.rst @@ -45,7 +45,15 @@ current server, session, and window: [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including -``PYTHONBREAKPOINT``) +``PYTHONBREAKPOINT``). Also supports direct commands via ``-c``: + +.. code-block:: shell + + $ tmuxp cli -c 'print(window.name)' + my_window + + $ tmuxp cli -c 'print(window.name.upper())' + MY_WINDOW Read more on `tmuxp CLI`_ diff --git a/docs/cli.rst b/docs/cli.rst index 7696439cfc1..de84bfe80e0 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -35,6 +35,8 @@ tmux CLI tmuxp cli + tmuxp cli -c 'python code' + Launch into a `libtmux`_ session. Automatically will picked the current tmux :class:`server `, @@ -62,8 +64,28 @@ compatible debuggers, for instance `ipdb`_: .. code-block:: sh - pip install ipdb - env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + $ pip install ipdb + $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + +You can also pass in python code directly, similar to ``python -c``, do +this via ``tmuxp -c``: + +.. code-block:: shell + + $ tmuxp cli -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server my_window -c 'print(session.name); print(window.name)' + my_server + my_window + + $ tmuxp cli my_server my_window -c 'print(window.name.upper())' + MY_WINDOW .. _PEP 553: https://www.python.org/dev/peps/pep-0553/ .. _ipdb: https://pypi.org/project/ipdb/ From c13e0ad6a48b092cde660c3dc2dada2776e59ccc Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 13:54:31 -0500 Subject: [PATCH 08/20] Add tests for cli --- tests/test_cli.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tests/test_cli.py b/tests/test_cli.py index e966a4d849f..950cade6ff5 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -406,6 +406,64 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): assert 'Please set' not in result.output +@pytest.mark.parametrize( + "cli_args,inputs,expected_output", + [ + ( + ['cli', '-L{SOCKET_NAME}', '-c', 'print(str(server.socket_name))'], + [], + '{SERVER_SOCKET_NAME}', + ), + ( + [ + 'cli', + '-L{SOCKET_NAME}', + '{SESSION_NAME}', + '-c', + 'print(session.name)', + ], + [], + '{SESSION_NAME}', + ), + ( + [ + 'cli', + '-L{SOCKET_NAME}', + '{SESSION_NAME}', + '{WINDOW_NAME}', + '-c', + 'print(server.has_session(session.name))', + ], + [], + 'True', + ), + ], +) +def test_cli(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, session): + monkeypatch.setenv('HOME', str(tmpdir)) + window_name = 'my_window' + window = session.new_window(window_name=window_name) + window.split_window() + + template_ctx = dict( + SOCKET_NAME=server.socket_name, + SOCKET_PATH=server.socket_path, + SESSION_NAME=session.name, + WINDOW_NAME=window_name, + SERVER_SOCKET_NAME=server.socket_name, + ) + + cli_args[:] = [cli_arg.format(**template_ctx) for cli_arg in cli_args] + + with tmpdir.as_cwd(): + runner = CliRunner() + + result = runner.invoke( + cli.cli, cli_args, input=''.join(inputs), catch_exceptions=False + ) + assert expected_output.format(**template_ctx) in result.output + + @pytest.mark.parametrize( "cli_args", [ From c68c9d3b85247554162277f82507e4735684ce19 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 15:24:04 -0500 Subject: [PATCH 09/20] Rename tmuxp cli -> shell --- CHANGES | 12 ++++++------ README.rst | 19 +++++++++---------- docs/cli.rst | 26 +++++++++++++------------- tests/test_cli.py | 8 ++++---- tmuxp/cli.py | 4 ++-- 5 files changed, 34 insertions(+), 35 deletions(-) diff --git a/CHANGES b/CHANGES index 7589496d458..63ad1ca9e1a 100644 --- a/CHANGES +++ b/CHANGES @@ -7,7 +7,7 @@ Here you can find the recent changes to tmuxp current ------- - *Insert changes/features/fixes for next release here* -- :issue:`636` New command: ``tmuxp cli`` +- :issue:`636` New command: ``tmuxp shell`` Accepts tmux socket_name/socket_path, automatically uses the current tmux session and window and makes them available in pdb context. @@ -17,25 +17,25 @@ current .. code-block:: sh $ pip install ipdb - $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell You can execute python directly via ``-c``: .. code-block:: sh - $ tmuxp cli -c 'print(session.name); print(window.name)' + $ tmuxp shell -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server -c 'print(session.name); print(window.name)' + $ tmuxp shell my_server -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server my_window -c 'print(session.name); print(window.name)' + $ tmuxp shell my_server my_window -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server my_window -c 'print(window.name.upper())' + $ tmuxp shell my_server my_window -c 'print(window.name.upper())' MY_WINDOW tmuxp 1.5.8 (2020-10-31) diff --git a/README.rst b/README.rst index 9b0a9916b2f..d4769dc796f 100644 --- a/README.rst +++ b/README.rst @@ -17,17 +17,16 @@ Installation $ pip install --user tmuxp -tmuxp CLI ---------- - +Shell +----- *New in 1.6.0*: -``tmuxp cli`` launches into a debugger with `libtmux`_ objects for your -current server, session, and window: +``tmuxp shell`` launches into a python console preloaded with the attached server, +session, and window in `libtmux`_ objects. .. code-block:: shell - $ tmuxp cli + $ tmuxp shell (Pdb) server @@ -49,16 +48,16 @@ Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including .. code-block:: shell - $ tmuxp cli -c 'print(window.name)' + $ tmuxp shell -c 'print(window.name)' my_window - $ tmuxp cli -c 'print(window.name.upper())' + $ tmuxp shell -c 'print(window.name.upper())' MY_WINDOW -Read more on `tmuxp CLI`_ +Read more on `tmuxp shell`_ in the CLI docs. .. _PEP 553: https://www.python.org/dev/peps/pep-0553/ -.. _tmuxp CLI: http://localhost:8031/cli.html#launch-tmux-cli +.. _tmuxp shell: http://localhost:8031/cli.html#shell Load a tmux session ------------------- diff --git a/docs/cli.rst b/docs/cli.rst index de84bfe80e0..848a476a5af 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -22,22 +22,22 @@ In zsh (``~/.zshrc``): eval "$(_TMUXP_COMPLETE=source_zsh tmuxp)" -.. _cli_cli: +.. _cli_shell: -tmux CLI --------- +Shell +----- :: - tmuxp cli + tmuxp shell - tmuxp cli + tmuxp shell - tmuxp cli + tmuxp shell - tmuxp cli -c 'python code' + tmuxp shell -c 'python code' -Launch into a `libtmux`_ session. +Launch into a python console with `libtmux`_ objects. Compare to django's shell. Automatically will picked the current tmux :class:`server `, :class:`session `, and :class:`window ` you @@ -65,26 +65,26 @@ compatible debuggers, for instance `ipdb`_: .. code-block:: sh $ pip install ipdb - $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp cli + $ env PYTHONBREAKPOINT=ipdb.set_trace tmuxp shell You can also pass in python code directly, similar to ``python -c``, do this via ``tmuxp -c``: .. code-block:: shell - $ tmuxp cli -c 'print(session.name); print(window.name)' + $ tmuxp shell -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server -c 'print(session.name); print(window.name)' + $ tmuxp shell my_server -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server my_window -c 'print(session.name); print(window.name)' + $ tmuxp shell my_server my_window -c 'print(session.name); print(window.name)' my_server my_window - $ tmuxp cli my_server my_window -c 'print(window.name.upper())' + $ tmuxp shell my_server my_window -c 'print(window.name.upper())' MY_WINDOW .. _PEP 553: https://www.python.org/dev/peps/pep-0553/ diff --git a/tests/test_cli.py b/tests/test_cli.py index 950cade6ff5..aa0b86620ee 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -410,13 +410,13 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): "cli_args,inputs,expected_output", [ ( - ['cli', '-L{SOCKET_NAME}', '-c', 'print(str(server.socket_name))'], + ['shell', '-L{SOCKET_NAME}', '-c', 'print(str(server.socket_name))'], [], '{SERVER_SOCKET_NAME}', ), ( [ - 'cli', + 'shell', '-L{SOCKET_NAME}', '{SESSION_NAME}', '-c', @@ -427,7 +427,7 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): ), ( [ - 'cli', + 'shell', '-L{SOCKET_NAME}', '{SESSION_NAME}', '{WINDOW_NAME}', @@ -439,7 +439,7 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): ), ], ) -def test_cli(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, session): +def test_shell(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, session): monkeypatch.setenv('HOME', str(tmpdir)) window_name = 'my_window' window = session.new_window(window_name=window_name) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 140741aaee6..71d639d0c65 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -661,7 +661,7 @@ def startup(config_dir): os.makedirs(config_dir) -@cli.command(name='cli') +@cli.command(name='shell') @click.argument('session_name', nargs=1, required=False) @click.argument('window_name', nargs=1, required=False) @click.option('-S', 'socket_path', help='pass-through for tmux -S') @@ -671,7 +671,7 @@ def startup(config_dir): 'command', help='Instead of opening shell, execute python code in libtmux and exit', ) -def command_cli(session_name, window_name, socket_name, socket_path, command): +def command_shell(session_name, window_name, socket_name, socket_path, command): server = Server(socket_name=socket_name, socket_path=socket_path) try: From 9a6083b436bba411600ae2f26b49e82de46241c3 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 15:41:58 -0500 Subject: [PATCH 10/20] Detect current shell based on TMUX_PANE --- tmuxp/cli.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 71d639d0c65..3f0979d9747 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -674,14 +674,27 @@ def startup(config_dir): def command_shell(session_name, window_name, socket_name, socket_path, command): server = Server(socket_name=socket_name, socket_path=socket_path) + current_pane = None + if os.getenv('TMUX_PANE') is not None: + current_pane = next( + ( + p + for p in server._list_panes() + if p.get('pane_id') == os.getenv('TMUX_PANE') + ), + None, + ) + try: if session_name: session = server.find_where({'session_name': session_name}) + elif current_pane is not None: + session = server.find_where({'session_id': current_pane['session_id']}) else: session = server.list_sessions()[0] if not session: - raise exc.TmuxpException('Session not found.') + raise exc.TmuxpException('Session not found: %s' % session_name) except exc.TmuxpException as e: print(e) return @@ -690,7 +703,9 @@ def command_shell(session_name, window_name, socket_name, socket_path, command): if window_name: window = session.find_where({'window_name': window_name}) if not window: - raise exc.TmuxpException('Window not found.') + raise exc.TmuxpException('Window not found: %s' % window_name) + elif current_pane is not None: + window = session.find_where({'window_id': current_pane['window_id']}) else: window = session.list_windows()[0] @@ -698,6 +713,15 @@ def command_shell(session_name, window_name, socket_name, socket_path, command): print(e) return + try: + if current_pane is not None: + pane = window.find_where({'pane_id': current_pane['pane_id']}) # NOQA: F841 + else: + pane = window.attached_pane # NOQA: F841 + except exc.TmuxpException as e: + print(e) + return + if command is not None: exec(command) else: From 890c06642bb991dc89b7dd532e02fcb0074633fc Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 15:45:08 -0500 Subject: [PATCH 11/20] Add CLI docs for tmuxp shell --- tmuxp/cli.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 3f0979d9747..9d93512012d 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -672,6 +672,14 @@ def startup(config_dir): help='Instead of opening shell, execute python code in libtmux and exit', ) def command_shell(session_name, window_name, socket_name, socket_path, command): + """Launch python shell for tmux server, session, window and pane. + + Priority given to loaded session/wndow/pane objects: + - session_name and window_name arguments + - current shell: environmental variable of TMUX_PANE (which gives us window and + session) + - ``server.attached_session``, ``session.attached_window``, ``window.attached_pane`` + """ server = Server(socket_name=socket_name, socket_path=socket_path) current_pane = None From 9507b3c0ec79645dd17c4d7d4b00fa468d890e70 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 15:50:46 -0500 Subject: [PATCH 12/20] Update docs for tmuxp shell's pane object --- CHANGES | 4 ++-- README.rst | 2 ++ docs/cli.rst | 13 ++++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 63ad1ca9e1a..fd078d067a0 100644 --- a/CHANGES +++ b/CHANGES @@ -9,8 +9,8 @@ current - *Insert changes/features/fixes for next release here* - :issue:`636` New command: ``tmuxp shell`` - Accepts tmux socket_name/socket_path, automatically uses the current - tmux session and window and makes them available in pdb context. + Automatically preloads session, window, and pane via `libtmux`_ + api objects and makes them available in a python console. In python 3.7+, supports ``PYTHONBREAKPOINT``: diff --git a/README.rst b/README.rst index d4769dc796f..f2b28463718 100644 --- a/README.rst +++ b/README.rst @@ -42,6 +42,8 @@ session, and window in `libtmux`_ objects. 'your_window' (Pdb) window.panes [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) + (Pdb) pane + Pane(%6 Window(@3 1:your_window, Session($1 your_project)) Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including ``PYTHONBREAKPOINT``). Also supports direct commands via ``-c``: diff --git a/docs/cli.rst b/docs/cli.rst index 848a476a5af..f15038bfdff 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -40,9 +40,9 @@ Shell Launch into a python console with `libtmux`_ objects. Compare to django's shell. Automatically will picked the current tmux :class:`server `, -:class:`session `, and :class:`window ` you -are currently in. Pass additional arguments to select a specific one of your -choice:: +:class:`session `, :class:`window ` +:class:`pane ` you are currently in. Pass additional arguments +to select a specific one of your choice:: (Pdb) server @@ -58,6 +58,8 @@ choice:: 'your_window' (Pdb) window.panes [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) + (Pdb) pane + Pane(%6 Window(@3 1:your_window, Session($1 your_project))) Python 3.7 supports `PEP 553`_'s ``PYTHONBREAKPOINT`` and supports compatible debuggers, for instance `ipdb`_: @@ -87,6 +89,11 @@ this via ``tmuxp -c``: $ tmuxp shell my_server my_window -c 'print(window.name.upper())' MY_WINDOW + # Assuming inside a tmux pane or one is attached on default server + $ tmuxp shell -c 'print(pane.id); print(pane.window.name)' + %2 + my_window + .. _PEP 553: https://www.python.org/dev/peps/pep-0553/ .. _ipdb: https://pypi.org/project/ipdb/ .. _libtmux: https://libtmux.git-pull.com From b8694ec4c4d733dc8149804a145ddb181a410903 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 16:23:15 -0500 Subject: [PATCH 13/20] ci(shell): Fix exec issue: nested function with free variables tmuxp/__init__.py:14: in from . import cli, config, util E SyntaxError: unqualified exec is not allowed in function 'command_shell' because it contains a nested function with free variables (cli.py, line 734) --- tmuxp/cli.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 9d93512012d..7d65796082d 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -684,14 +684,14 @@ def command_shell(session_name, window_name, socket_name, socket_path, command): current_pane = None if os.getenv('TMUX_PANE') is not None: - current_pane = next( - ( + try: + current_pane = [ p for p in server._list_panes() if p.get('pane_id') == os.getenv('TMUX_PANE') - ), - None, - ) + ][0] + except IndexError: + pass try: if session_name: From 19a14db4dd37d58af9b98b611a23db331e7c2ffd Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 18:30:40 -0500 Subject: [PATCH 14/20] Add tests for window and pane --- tests/test_cli.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_cli.py b/tests/test_cli.py index aa0b86620ee..4bed46b6b06 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -437,6 +437,30 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): [], 'True', ), + ( + [ + 'shell', + '-L{SOCKET_NAME}', + '{SESSION_NAME}', + '{WINDOW_NAME}', + '-c', + 'print(window.name)', + ], + [], + '{WINDOW_NAME}', + ), + ( + [ + 'shell', + '-L{SOCKET_NAME}', + '{SESSION_NAME}', + '{WINDOW_NAME}', + '-c', + 'print(pane.id)', + ], + [], + '{PANE_ID}', + ), ], ) def test_shell(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, session): @@ -450,6 +474,7 @@ def test_shell(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, s SOCKET_PATH=server.socket_path, SESSION_NAME=session.name, WINDOW_NAME=window_name, + PANE_ID=window.attached_pane.id, SERVER_SOCKET_NAME=server.socket_name, ) From 619e2719b2469c9efba9e2ab9abca02c04d5de38 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sat, 31 Oct 2020 18:36:35 -0500 Subject: [PATCH 15/20] test_shell: Assert TMUX_PANE env behavior --- tests/test_cli.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 4bed46b6b06..40e73d3d268 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -407,11 +407,12 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): @pytest.mark.parametrize( - "cli_args,inputs,expected_output", + "cli_args,inputs,env,expected_output", [ ( ['shell', '-L{SOCKET_NAME}', '-c', 'print(str(server.socket_name))'], [], + {}, '{SERVER_SOCKET_NAME}', ), ( @@ -423,6 +424,7 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): 'print(session.name)', ], [], + {}, '{SESSION_NAME}', ), ( @@ -435,6 +437,7 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): 'print(server.has_session(session.name))', ], [], + {}, 'True', ), ( @@ -447,6 +450,7 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): 'print(window.name)', ], [], + {}, '{WINDOW_NAME}', ), ( @@ -459,11 +463,25 @@ def test_load_zsh_autotitle_warning(cli_args, tmpdir, monkeypatch): 'print(pane.id)', ], [], + {}, + '{PANE_ID}', + ), + ( + [ + 'shell', + '-L{SOCKET_NAME}', + '-c', + 'print(pane.id)', + ], + [], + {'TMUX_PANE': '{PANE_ID}'}, '{PANE_ID}', ), ], ) -def test_shell(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, session): +def test_shell( + cli_args, inputs, expected_output, env, tmpdir, monkeypatch, server, session +): monkeypatch.setenv('HOME', str(tmpdir)) window_name = 'my_window' window = session.new_window(window_name=window_name) @@ -479,6 +497,8 @@ def test_shell(cli_args, inputs, expected_output, tmpdir, monkeypatch, server, s ) cli_args[:] = [cli_arg.format(**template_ctx) for cli_arg in cli_args] + for k, v in env.items(): + monkeypatch.setenv(k, v.format(**template_ctx)) with tmpdir.as_cwd(): runner = CliRunner() From eaf2e30232c19f9083d87aa931da3093f6f3baa3 Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 1 Nov 2020 08:25:17 -0600 Subject: [PATCH 16/20] Tests: Make socket_name available independent of creating tmux server --- tests/conftest.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index eb2d34db827..7ed9c2d2f9a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,9 +12,14 @@ @pytest.fixture(scope='function') -def server(request): +def socket_name(request): + return 'tmuxp_test%s' % next(namer) + + +@pytest.fixture(scope='function') +def server(request, socket_name): t = Server() - t.socket_name = 'tmuxp_test%s' % next(namer) + t.socket_name = socket_name def fin(): t.kill_server() From 3a1689cf06198051c25127f3b3a73bdcd5f65e9a Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 1 Nov 2020 08:27:08 -0600 Subject: [PATCH 17/20] tmuxp shell: Catch when servers not created --- tests/test_cli.py | 34 ++++++++++++++++++++++++++++++++++ tmuxp/cli.py | 13 ++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 40e73d3d268..09814fbe5b3 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -12,6 +12,7 @@ import libtmux from libtmux.common import has_lt_version +from libtmux.exc import LibTmuxException from tmuxp import cli, config from tmuxp.cli import ( command_ls, @@ -509,6 +510,39 @@ def test_shell( assert expected_output.format(**template_ctx) in result.output +@pytest.mark.parametrize( + "cli_args,inputs,env,exception, message", + [ + ( + ['shell', '-L{SOCKET_NAME}', '-c', 'print(str(server.socket_name))'], + [], + {}, + LibTmuxException, + r'.*{SOCKET_NAME}\s\(No such file or directory\).*', + ), + ], +) +def test_shell_no_server( + cli_args, inputs, env, exception, message, tmpdir, monkeypatch, socket_name +): + monkeypatch.setenv('HOME', str(tmpdir)) + template_ctx = dict( + SOCKET_NAME=socket_name, + ) + + cli_args[:] = [cli_arg.format(**template_ctx) for cli_arg in cli_args] + for k, v in env.items(): + monkeypatch.setenv(k, v.format(**template_ctx)) + + with tmpdir.as_cwd(): + runner = CliRunner() + + with pytest.raises(exception, match=message.format(**template_ctx)): + runner.invoke( + cli.cli, cli_args, input=''.join(inputs), catch_exceptions=False + ) + + @pytest.mark.parametrize( "cli_args", [ diff --git a/tmuxp/cli.py b/tmuxp/cli.py index 7d65796082d..2828c8a6f54 100644 --- a/tmuxp/cli.py +++ b/tmuxp/cli.py @@ -16,7 +16,7 @@ from click.exceptions import FileError from libtmux.common import has_gte_version, has_minimum_version, which -from libtmux.exc import TmuxCommandNotFound +from libtmux.exc import LibTmuxException, TmuxCommandNotFound from libtmux.server import Server from . import config, exc, log, util @@ -682,6 +682,17 @@ def command_shell(session_name, window_name, socket_name, socket_path, command): """ server = Server(socket_name=socket_name, socket_path=socket_path) + try: + server.sessions + except LibTmuxException as e: + if 'No such file or directory' in str(e): + raise LibTmuxException( + 'no tmux session found. Start a tmux session and try again. \n' + 'Original error: ' + str(e) + ) + else: + raise e + current_pane = None if os.getenv('TMUX_PANE') is not None: try: From fd017604ebd3ecec5ea0010ea2eefd269fdcda7f Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 1 Nov 2020 09:55:32 -0600 Subject: [PATCH 18/20] docs(tmuxp shell): Add screenshow --- CHANGES | 5 ++++- docs/_static/tmuxp-shell.gif | Bin 0 -> 153463 bytes 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/_static/tmuxp-shell.gif diff --git a/CHANGES b/CHANGES index fd078d067a0..85051dfb536 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,9 @@ current Automatically preloads session, window, and pane via `libtmux`_ api objects and makes them available in a python console. + .. image:: _static/tmuxp-shell.gif + :width: 100% + In python 3.7+, supports ``PYTHONBREAKPOINT``: .. code-block:: sh @@ -39,7 +42,7 @@ current MY_WINDOW tmuxp 1.5.8 (2020-10-31) ------------------------ +------------------------ - :issue:`639` Passes start_directory through to new tmux session Fixes :issue:`631`, thank you @joseph-flinn! diff --git a/docs/_static/tmuxp-shell.gif b/docs/_static/tmuxp-shell.gif new file mode 100644 index 0000000000000000000000000000000000000000..26f0d36c034ace32fe4d4b8dbf265d7b1ad01830 GIT binary patch literal 153463 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

F$0qBNo+wMeSFdG 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

AP<@V3C4;R_`p9(p1`9+6<%i9UPz28-Fxw(1JL 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 literal 0 HcmV?d00001 From ff0073e53465ce83ee8adf80aee5acedbd7d204e Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 1 Nov 2020 09:56:37 -0600 Subject: [PATCH 19/20] README: Move shell down --- README.rst | 88 +++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/README.rst b/README.rst index f2b28463718..5a7fc26d029 100644 --- a/README.rst +++ b/README.rst @@ -17,50 +17,6 @@ Installation $ pip install --user tmuxp -Shell ------ -*New in 1.6.0*: - -``tmuxp shell`` launches into a python console preloaded with the attached server, -session, and window in `libtmux`_ objects. - -.. code-block:: shell - - $ tmuxp shell - - (Pdb) server - - (Pdb) server.sessions - [Session($1 your_project)] - (Pdb) session - Session($1 your_project) - (Pdb) session.name - 'your_project' - (Pdb) window - Window(@3 1:your_window, Session($1 your_project)) - (Pdb) window.name - 'your_window' - (Pdb) window.panes - [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) - (Pdb) pane - Pane(%6 Window(@3 1:your_window, Session($1 your_project)) - -Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including -``PYTHONBREAKPOINT``). Also supports direct commands via ``-c``: - -.. code-block:: shell - - $ tmuxp shell -c 'print(window.name)' - my_window - - $ tmuxp shell -c 'print(window.name.upper())' - MY_WINDOW - -Read more on `tmuxp shell`_ in the CLI docs. - -.. _PEP 553: https://www.python.org/dev/peps/pep-0553/ -.. _tmuxp shell: http://localhost:8031/cli.html#shell - Load a tmux session ------------------- @@ -126,6 +82,50 @@ Load your tmuxp config from anywhere by using the filename, assuming See `author's tmuxp configs`_ and the projects' `tmuxp.yaml`_. +Shell +----- +*New in 1.6.0*: + +``tmuxp shell`` launches into a python console preloaded with the attached server, +session, and window in `libtmux`_ objects. + +.. code-block:: shell + + $ tmuxp shell + + (Pdb) server + + (Pdb) server.sessions + [Session($1 your_project)] + (Pdb) session + Session($1 your_project) + (Pdb) session.name + 'your_project' + (Pdb) window + Window(@3 1:your_window, Session($1 your_project)) + (Pdb) window.name + 'your_window' + (Pdb) window.panes + [Pane(%6 Window(@3 1:your_window, Session($1 your_project))) + (Pdb) pane + Pane(%6 Window(@3 1:your_window, Session($1 your_project)) + +Python 3.7+ supports `PEP 553`_ ``breakpoint()`` (including +``PYTHONBREAKPOINT``). Also supports direct commands via ``-c``: + +.. code-block:: shell + + $ tmuxp shell -c 'print(window.name)' + my_window + + $ tmuxp shell -c 'print(window.name.upper())' + MY_WINDOW + +Read more on `tmuxp shell`_ in the CLI docs. + +.. _PEP 553: https://www.python.org/dev/peps/pep-0553/ +.. _tmuxp shell: http://localhost:8031/cli.html#shell + Pre-load hook ------------- Run custom startup scripts (such as installing project dependencies before From 2cf24d51b541a4484d8830ddc2f09c4b65ce531e Mon Sep 17 00:00:00 2001 From: Tony Narlock Date: Sun, 1 Nov 2020 09:57:58 -0600 Subject: [PATCH 20/20] docs(shell): Add screenshow and update copy --- docs/cli.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/cli.rst b/docs/cli.rst index f15038bfdff..7a0dd8a9e10 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -39,10 +39,13 @@ Shell Launch into a python console with `libtmux`_ objects. Compare to django's shell. -Automatically will picked the current tmux :class:`server `, + .. image:: _static/tmuxp-shell.gif + :width: 100% + +Automatically preloads current tmux :class:`server `, :class:`session `, :class:`window ` -:class:`pane ` you are currently in. Pass additional arguments -to select a specific one of your choice:: +:class:`pane `. Pass additional arguments to select a +specific one of your choice:: (Pdb) server