Shells
======
Internal shell
--------------
At any point while debugging, press ``Ctrl-x`` to switch to the built in
interactive shell. From here, you can execute Python commands at the current
point of the debugger. Press ``Ctrl-x`` again to move back to the debugger.
Keyboard shortcuts defined in the internal shell:
+--------------------+--------------------+
|Enter |Execute the current |
| |command |
+--------------------+--------------------+
|Ctrl-v |Insert a newline |
| |(for multiline |
| |commands) |
+--------------------+--------------------+
|Ctrl-n/p |Browse command |
| |history |
+--------------------+--------------------+
|Up/down arrow |Select history |
+--------------------+--------------------+
|TAB |Tab completion |
+--------------------+--------------------+
|+/- |grow/shrink the |
| |shell (when a |
| |history item is |
| |selected) |
+--------------------+--------------------+
|_/= |minimize/maximize |
| |the shell (when a |
| |history item is |
| |selected) |
+--------------------+--------------------+
External shells
---------------
To open the external shell, press the ``!`` key while debugging. Unlike the
internal shell, external shells close the debugger UI while the shell is
active. Press ``Ctrl-d`` at any time to exit the shell and return to the
debugger.
To configure the shell used by PuDB, open the settings (``Ctrl-p``) and select
the shell.
PuDB supports the following external shells.
- Internal (same as pressing ``Ctrl-x``). This is the default.
- Classic (similar to the default ``python`` interactive shell)
- `IPython `_
The `IPython` shell can also be used in a server-client fasion, which is
enabled by selecting the shell `ipython_kernel` in the settings. When set,
the ``!`` key will start an `IPython` kernel and wait for connection from,
e.g., `qtconsole`. Like other shells, `ipython_kernel` blocks the debugger
UI while it is active. Type `quit` or `exit` from a client to exit the
kernel and return to the debugger.
- `bpython `_
- `ptpython `_
Custom shells
-------------
To define a custom external shell, create a file with a function
``pudb_shell(_globals, _locals)`` at the module level. Then, in
the settings (``Ctrl-p``), select "Custom" under the shell settings, and add
the path to the file.
Here is an example custom shell file:
.. literalinclude:: ../examples/shell.py
:language: python
Note, many shells do not allow passing in globals and locals dictionaries
separately. In this case, you can merge the two with
.. code-block:: python
from pudb.shell import SetPropagatingDict
ns = SetPropagatingDict([_locals, _globals], _locals)
Here is more information on ``SetPropagatingDict``:
.. autoclass:: pudb.shell.SetPropagatingDict