Julia-vterm provides a major-mode for an inferior Julia process (or REPL) that runs in vterm, and a minor-mode that extends julia-mode with the ability to interact with the inferior Julia process.
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 Julia with Org Babel, please consider trying ob-julia-vterm. It uses julia-vterm and provides a solid babel development experience with session and asynchronous execution support.
FYI, python-vterm and ob-python-vterm are also under development to offer a similar workflow for Python.
You can install this package from MELPA. The package name is “julia-vterm”.
For manual installation, download julia-vterm.el into somewhere in your local directory and use package-install-file command. Please make sure julia-mode and emacs-libvterm are installed and configured correctly.
Turn on julia-vterm-mode in a julia-mode buffer to use this package. A symbol “⁂” in the mode line indicates that the julia-mode buffer is ready to interact with the julia-vterm REPL. Add the following line to your init file to enable julia-vterm-mode in julia-mode buffers automatically.
(add-hook 'julia-mode-hook #'julia-vterm-mode)By default, the command named julia in your PATH is used. You can use a Julia executable in any path by setting the julia-vterm-repl-program variable to its absolute path. The variable can contain switches for the julia command. For example, you can use a julia executable at a certain path, with 4 threads enabled, by the line like the following.
(setq julia-vterm-repl-program "/path/to/julia -t 4")M-x julia-vterm-repl (or M-x julia if no other packages define it before julia-vterm is loaded) opens an inferior Julia REPL buffer.
In a julia script buffer with julia-vterm-mode on, you can open a Julia REPL with M-x julia-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 julia-vterm-session (or julia-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 Command / Description
------------------------------------------------------------------------------------------
C-c C-z julia-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-<return> julia-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 julia-vterm-send-buffer
Send the whole content of the script buffer to the Julia REPL line by line.
C-c C-i julia-vterm-send-include-buffer-file
Send a line to evaluate the buffer's file using include() to the Julia REPL.
With prefix ARG, Revise.includet() is used instead.
C-c C-d julia-vterm-send-cd-to-buffer-directory
Send cd() function call to the Julia REPL to change the current working
directory of REPL to the buffer's directory.
Key Command / Description
------------------------------------------------------------------------------------------
C-c C-z julia-vterm-repl-switch-to-script-buffer
Switch to the script buffer that is paired with the current Julia REPL buffer.
M-k julia-vterm-repl-clear-buffer
Clear the content of the Julia REPL buffer.
C-c C-t julia-vterm-repl-copy-mode
Enter copy mode.
C-c M-r julia-vterm-repl-restart
Restart the current inferior Julia process. A new Julia REPL will be opened in
the same Emacs window, and the working directory and environment will be
restored from the previous REPL process when possible. With prefix ARG,
confirmation is skipped.
Key Command / Description
------------------------------------------------------------------------------------------
C-c C-t julia-vterm-repl-copy-mode
Exit copy mode.
<return> julia-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.