py-vterm-interaction.el/README.org

5 KiB

This is a straight port of julia-vterm.el. I only modified the code slightly to deal correctly with python environments and play nicely with ipython.

python-vterm

Python-vterm provides a major-mode for an inferior Python process (or REPL) that runs in vterm, and a minor-mode that extends python-mode with the ability to interact with the inferior Python process. This is particularly useful for fancy repls like ipython or ptpython.

The functionalities required for typical REPL interaction have been implemented. While I would like to keep this package simple, suggestions are always welcome.

If you want to use Python with Org Babel, please consider trying ob-python-vterm. It uses python-vterm and provides a solid babel development experience with session and asynchronous execution support.

Installation

You can install this package from MELPA. The package name is “python-vterm”.

For manual installation, download python-vterm.el into somewhere in your local directory and use package-install-file command. Please make sure python-mode and emacs-libvterm are installed and configured correctly.

Turn on python-vterm-mode in a python-mode buffer to use this package. A symbol “⁂” in the mode line indicates that the python-mode buffer is ready to interact with the python-vterm REPL. Add the following line to your init file to enable python-vterm-mode in python-mode buffers automatically.

(add-hook 'python-mode-hook #'python-vterm-mode)

By default, the command named python in your PATH is used. You can use a Python executable in any path by setting the python-vterm-repl-program variable to its absolute path. The variable can contain switches for the python command. For example, you can use a python executable at a certain path, with 4 threads enabled, by the line like the following.

(setq python-vterm-repl-program "ipython -i")

How to use

M-x python-vterm-repl (or M-x python if no other packages define it before python-vterm is loaded) opens an inferior Python REPL buffer.

In a python script buffer with python-vterm-mode on, you can open a Python REPL with M-x python-vterm-switch-to-repl-buffer (or C-c C-z). See below for other commands.

Both of the above operations open a REPL with the default session name main. You can specify a different session name by using the prefix argument C-u. A new session will be created and opened if there is no REPL with that session name.

You can also specify a session name by defining a file local variable python-vterm-session (or python-session if no other packages pre-define it). If the variable is defined, C-c C-z will open a REPL with that session name.

Key bindings

python-vterm-mode

Key         Command / Description
------------------------------------------------------------------------------------------
C-c C-z     python-vterm-switch-to-repl-buffer
            Switch to the paired REPL buffer or to the one with a specified session name.
            With prefix ARG, prompt for session name.

C-c C-c     python-vterm-send-region-or-current-line
            Send the content of the region if the region is active, or send the current
            line.

C-c C-b     python-vterm-send-buffer
            Send the whole content of the script buffer to the Python REPL line by line.

C-c C-r     python-vterm-send-run-buffer-file
            Send a line to evaluate the buffer's file using ipython %run magic.
            This is only useful when using ipython.

C-c C-d     python-vterm-send-cd-to-buffer-directory
            Send %cd function call to the Python REPL to change the current working
            directory of REPL to the buffer's directory.

python-vterm-repl-mode

Key         Command / Description
------------------------------------------------------------------------------------------
C-c C-z     python-vterm-repl-switch-to-script-buffer
            Switch to the script buffer that is paired with the current Python REPL buffer.

M-k         python-vterm-repl-clear-buffer
            Clear the content of the Python REPL buffer.

C-c C-t     python-vterm-repl-copy-mode
            Enter copy mode.

python-vterm-repl-mode (copy mode)

Key         Command / Description
------------------------------------------------------------------------------------------
C-c C-t     python-vterm-repl-copy-mode
            Exit copy mode.

<return>    python-vterm-repl-copy-mode-done
            Copy the region to the kill ring and exit copy mode.

C-c C-r     vterm-reset-cursor-point
            Call the vterm command that moves point to where it should be.