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.
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.