Terminus
Bring a real terminal to Sublime Text
Details
Installs
- Total 355K
- Win 204K
- Mac 73K
- Linux 78K
Jul 26 | Jul 25 | Jul 24 | Jul 23 | Jul 22 | Jul 21 | Jul 20 | Jul 19 | Jul 18 | Jul 17 | Jul 16 | Jul 15 | Jul 14 | Jul 13 | Jul 12 | Jul 11 | Jul 10 | Jul 9 | Jul 8 | Jul 7 | Jul 6 | Jul 5 | Jul 4 | Jul 3 | Jul 2 | Jul 1 | Jun 30 | Jun 29 | Jun 28 | Jun 27 | Jun 26 | Jun 25 | Jun 24 | Jun 23 | Jun 22 | Jun 21 | Jun 20 | Jun 19 | Jun 18 | Jun 17 | Jun 16 | Jun 15 | Jun 14 | Jun 13 | Jun 12 | Jun 11 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 109 | 110 | 141 | 109 | 110 | 81 | 85 | 107 | 109 | 123 | 116 | 111 | 62 | 102 | 119 | 135 | 121 | 142 | 91 | 83 | 73 | 92 | 114 | 142 | 98 | 108 | 75 | 113 | 116 | 114 | 101 | 118 | 109 | 83 | 83 | 99 | 114 | 127 | 99 | 103 | 86 | 104 | 109 | 123 | 125 | 118 |
Mac | 30 | 46 | 40 | 37 | 42 | 24 | 18 | 36 | 42 | 40 | 41 | 33 | 24 | 23 | 25 | 26 | 47 | 47 | 30 | 15 | 30 | 52 | 43 | 29 | 27 | 27 | 19 | 14 | 24 | 32 | 37 | 32 | 24 | 29 | 29 | 31 | 42 | 34 | 38 | 17 | 20 | 21 | 35 | 40 | 39 | 22 |
Linux | 51 | 42 | 54 | 52 | 30 | 25 | 44 | 40 | 42 | 49 | 41 | 44 | 42 | 35 | 50 | 46 | 37 | 47 | 30 | 25 | 34 | 34 | 34 | 39 | 33 | 44 | 41 | 31 | 46 | 37 | 50 | 47 | 38 | 39 | 35 | 45 | 61 | 50 | 62 | 39 | 60 | 39 | 46 | 67 | 55 | 69 |
Readme
- Source
- raw.githubusercontent.com
Bring a real terminal to Sublime Text
The first cross platform terminal for Sublime Text.
Unix shell | Cmd.exe |
---|---|
![]() |
![]() |
Terminal in panel | Support showing images |
![]() |
![]() |
This package is heavily inspired by TerminalView. Compare with TerminalView, this has
- Windows support
- continuous history
- easily customizable themes (see Terminus Utilities)
- unicode support
- 256 colors support
- better xterm support
- terminal panel
- imgcat support (PS: it also works on Linux / WSL)
Installation
Package Control.
Getting started
run
Terminus: Open Default Shell in Tab
OdatNurd has made several videos on Terminus. See, for examples,
Shell configurations
Terminus comes with several shell configurations. The settings file should be quite self explanatory.
User Key Bindings
You may find these key bindings useful. To edit, run Preferences: Terminus Key Bindings
.
Check the details for the arguments of terminus_open
below.
- toggle terminal panel
[
{
"keys": ["alt+`"], "command": "toggle_terminus_panel"
}
]
- open a terminal view at current file directory
[
{
"keys": ["ctrl+alt+t"], "command": "terminus_open", "args": {
"cwd": "${file_path:${folder}}"
}
}
]
or by passing a custom cmd
, say ipython
[
{
"keys": ["ctrl+alt+t"], "command": "terminus_open", "args": {
"cmd": "ipython",
"cwd": "${file_path:${folder}}"
}
}
]
- open terminal in a split view by using Origami's
carry_file_to_pane
[
{
"keys": ["ctrl+alt+t"],
"command": "terminus_open",
"args": {
"post_window_hooks": [
["carry_file_to_pane", {"direction": "down"}]
]
}
}
]
- ctrl-w to close terminal
Following keybinding can be considered if one wants to use ctrl+w
to close terminals.
{
"keys": ["ctrl+w"], "command": "terminus_close", "context": [{ "key": "terminus_view"}]
}
User Commands in Palette
- run
Preferences: Terminus Command Palette
. Check the details for the arguments ofterminus_open
below
[
{
"caption": "Terminus: Open Default Shell at Current Location",
"command": "terminus_open",
"args" : {
"cwd": "${file_path:${folder}}"
}
}
]
or by passing custom cmd
, say ipython
[
{
"caption": "Terminus: Open iPython",
"command": "terminus_open",
"args" : {
"cmd": "ipython",
"cwd": "${file_path:${folder}}",
"title": "iPython"
}
}
]
- open terminal in a split tab by using Origami's
carry_file_to_pane
[
{
"caption": "Terminus: Open Default Shell in Split Tab",
"command": "terminus_open",
"args": {
"post_window_hooks": [
["carry_file_to_pane", {"direction": "down"}]
]
}
}
]
Terminus Build System
It is possible to use Terminus
as a build system. The target terminus_exec
is a drop in replacement of the default target exec
. It takes exact same arguments as terminus_open
except that their default values are set differently.
terminus_cancel_build
is used to cancel the build when user runs cancel_build
triggered by ctrl+c (macOS) or ctrl+break (Windows / Linux).
The following is an example of build system define in project settings that run a python script
{
"build_systems":
[
{
"name": "Hello World",
"target": "terminus_exec",
"cancel": "terminus_cancel_build",
"cmd": [
"python", "helloworld.py"
],
"working_dir": "$folder"
}
]
}
The same Hello World example could be specified via a .sublime-build
file.
{
"target": "terminus_exec",
"cancel": "terminus_cancel_build",
"cmd": [
"python", "helloworld.py"
],
"working_dir": "$folder"
}
Instead of cmd
, user could also specify shell_cmd
. In macOS and linux, a bash shell will be invoked; and in Windows, cmd.exe will be invoked.
{
"target": "terminus_exec",
"cancel": "terminus_cancel_build",
"shell_cmd": "python helloworld.py",
// to directly invoke bash command
// "shell_cmd": "echo helloworld",
"working_dir": "$folder"
}
Alt-Left/Right to move between words (Unix)
Bash: add the following in
.bash_profile
or.bashrc
if [ "$TERM_PROGRAM" == "Terminus-Sublime" ]; then bind '"\e[1;3C": forward-word' bind '"\e[1;3D": backward-word' fi
Zsh: add the following in
.zshrc
if [ "$TERM_PROGRAM" = "Terminus-Sublime" ]; then bindkey "\e[1;3C" forward-word bindkey "\e[1;3D" backward-word fi
Some programs, such as julia, do not recognize the standard keycodes for alt+left
and alt+right
. You could
bind them to alt+b
and alt+f
respectively
“json
[
{ "keys”: [“alt+left”], “command”: “terminus_keypress”, “args”: {“key”: “b”, “alt”: true}, “context”: [{“key”: “terminus_view”}] },
{ “keys”: [“alt+right”], “command”: “terminus_keypress”, “args”: {“key”: “f”, “alt”: true}, “context”: [{“key”: “terminus_view”}] }
]
## Terminus API
- A terminal could be opened using the command `terminus_open` with
```py
window.run_command(
"terminus_open", {
"config_name": None, # the shell config name, use `None` for the default config
"cmd": None, # the cmd to execute
"shell_cmd": None, # a script to execute in a shell
# bash on Unix and cmd.exe on Windows
"cwd": None, # the working directory
"working_dir": None, # alias of "cwd"
"env": {}, # extra environmental variables
"title": None, # title of the view, let terminal configures it if leave empty
"panel_name": None, # the name of the panel if terminal should be opened in panel
"focus": True, # focus to the panel
"tag": None, # a tag to identify the terminal
"file_regex": None # the `file_regex` pattern in sublime build system
# see https://www.sublimetext.com/docs/3/build_systems.html
"line_regex": None # the `file_regex` pattern in sublime build system
"pre_window_hooks": [], # a list of window hooks before opening terminal
"post_window_hooks": [], # a list of window hooks after opening terminal
"post_view_hooks": [], # a list of view hooks after opening terminal
"auto_close": "always", # auto close terminal, possible values are "always" (True), "on_success", and False.
"cancellable": False, # allow `cancel_build` command to terminate process, only relevent to panels
"timeit": False # display elapsed time when the process terminates
}
)
The fields cmd
and cwd
understand Sublime Text build system variables.
the setting
view.settings().get("terminus_view.tag")
can be used to identify the terminal andkeybind can be binded with specific tagged terminal
{
"keys": ["ctrl+alt+w"], "command": "terminus_close", "context": [
{ "key": "terminus_view.tag", "operator": "equal", "operand": "YOUR_TAG"}
]
}
- text can be sent to the terminal with
window.run_command(
"terminus_send_string",
{
"string": "ls\n",
"tag": "<YOUR_TAG>" # ignore this or set it to None to send text to the first terminal found
"visible_only": False # send to visible terminal only, default is `False`. Only relevent when `tag` is None
}
)
If tag
is not provided or is None
, the text will be sent to the first terminal found in the current window.
FAQ
Memory issue
It is known that Terminus sometimes consumes a lot of memory after extensive use. It is because Sublime Text keeps an infinite undo stack. There is virtually no fix unless upstream provides an API to work with the undo stack. Meanwhile, users could execute Terminus: Reset
to release the memory.
This issue has been fixed in Sublime Text >= 4114 and Terminus v0.3.20.
Color issue when maximizing and minimizing terminal
It is known that the color of the scrollback history will be lost when a terminal is maximized or minimized from or to the panel. There is no fix for this issue.
Terminal panel background issue
If you are using DA UI and your terminal panel has weird background color,
try playing with the setting panel_background_color
or panel_text_output_background_color
in DA UI: Theme
Settings
.
{
"panel_background_color": "$background_color"
}
Or, to keep the Find and Replace panels unchanged: “json "panel_text_output_background_color”: “$background_color”
### Cmd.exe rendering issue in panel
Due to a upstream bug (may winpty or cmd.exe?), there may be arbitrary empty lines inserted between prompts if the panel is too short. It seems that cmder and powershell are not affected by this bug.
### Acknowledgments
This package won't be possible without [pyte](https://github.com/selectel/pyte), [pywinpty](https://github.com/spyder-ide/pywinpty) and [ptyprocess](https://github.com/pexpect/ptyprocess).