Terminals¶
Each terminal represents an application rendering the shell’s output, and is associated with:
a unique terminal ID
a human-readable name
an icon (emoji / unicode character)
various metadata in its
info()method
Terminal usage¶
Each terminal is materialized by a Terminal object, from which you can access various metadata:
>>> from extra_platforms import KITTY
>>> KITTY
Terminal(id='kitty', name='Kitty')
>>> KITTY.id
'kitty'
>>> KITTY.current
False
>>> KITTY.info()
{'id': 'kitty', 'name': 'Kitty', 'icon': '🐱', 'url': 'https://sw.kovidgoyal.net/kitty/', 'current': False, 'version': None, 'color_support': None}
To check if the current environment is running in a specific terminal, use the corresponding detection function:
>>> from extra_platforms import is_kitty
>>> is_kitty()
False
The current terminal can be obtained via the current_terminal() function:
>>> from extra_platforms import current_terminal
>>> current_terminal()
Terminal(id='unknown_terminal', name='Unknown terminal')
Recognized terminals¶
Icon |
Symbol |
Name |
Detection function |
|---|---|---|---|
🔳 |
Alacritty |
||
🍏 |
Apple Terminal |
||
◰ |
Contour |
||
🦶 |
foot |
||
👻 |
Ghostty |
||
𝐆 |
GNOME Terminal |
||
📺 |
GNU Screen |
||
⬡ |
Hyper |
||
⬛ |
iTerm2 |
||
🐱 |
Kitty |
||
💎 |
Konsole |
||
🏞️ |
Rio |
||
🐈 |
Tabby |
||
🔀 |
Tilix |
||
📟 |
tmux |
||
🔵 |
VS Code Terminal |
||
🔡 |
WezTerm |
||
⊡ |
Windows Terminal |
||
𝐗 |
xterm |
||
🪵 |
Zellij |
Hint
The UNKNOWN_TERMINAL trait represents an unrecognized
terminal. It is not included in the ALL_TERMINALS group,
and will be returned by current_terminal() if the current
terminal is not recognized.
Groups of terminals¶
Icon |
Symbol |
Description |
||
|---|---|---|---|---|
💻 |
All terminals |
|||
🎮 |
GPU-accelerated terminals |
⬥ |
||
⧉ |
Terminal multiplexers |
⬥ |
||
▦ |
Native terminal emulators |
⬥ |
||
⬢ |
Web-based terminals |
⬥ |
Hint
Canonical groups are non-overlapping groups that together cover all recognized traits. They are marked with a ⬥ icon in the table above.
Other groups are provided for convenience, but overlap with each other or with canonical groups.
---
config:
sankey:
height: 800
showValues: false
width: 800
---
sankey-beta
ALL_TERMINALS,NATIVE_TERMINALS,7
ALL_TERMINALS,GPU_TERMINALS,7
ALL_TERMINALS,WEB_TERMINALS,3
ALL_TERMINALS,MULTIPLEXERS,3
NATIVE_TERMINALS,APPLE_TERMINAL,1
NATIVE_TERMINALS,GNOME_TERMINAL,1
NATIVE_TERMINALS,ITERM2,1
NATIVE_TERMINALS,KONSOLE,1
NATIVE_TERMINALS,TILIX,1
NATIVE_TERMINALS,WINDOWS_TERMINAL,1
NATIVE_TERMINALS,XTERM,1
GPU_TERMINALS,ALACRITTY,1
GPU_TERMINALS,CONTOUR,1
GPU_TERMINALS,FOOT,1
GPU_TERMINALS,GHOSTTY,1
GPU_TERMINALS,KITTY,1
GPU_TERMINALS,RIO,1
GPU_TERMINALS,WEZTERM,1
WEB_TERMINALS,HYPER,1
WEB_TERMINALS,TABBY,1
WEB_TERMINALS,VSCODE_TERMINAL,1
MULTIPLEXERS,GNU_SCREEN,1
MULTIPLEXERS,TMUX,1
MULTIPLEXERS,ZELLIJ,1
---
config:
mindmap:
padding: 5
---
mindmap
((💻 ALL_TERMINALS))
)⬢ WEB_TERMINALS(
(⬡ HYPER)
(🐈 TABBY)
(🔵 VSCODE_TERMINAL)
)▦ NATIVE_TERMINALS(
(🍏 APPLE_TERMINAL)
(𝐆 GNOME_TERMINAL)
(⬛ ITERM2)
(💎 KONSOLE)
(🔀 TILIX)
(⊡ WINDOWS_TERMINAL)
(𝐗 XTERM)
)⧉ MULTIPLEXERS(
(📺 GNU_SCREEN)
(📟 TMUX)
(🪵 ZELLIJ)
)🎮 GPU_TERMINALS(
(🔳 ALACRITTY)
(◰ CONTOUR)
(🦶 FOOT)
(👻 GHOSTTY)
(🐱 KITTY)
(🏞️ RIO)
(🔡 WEZTERM)
Predefined terminals¶
Terminal definitions and metadata.
- extra_platforms.ALACRITTY = Terminal(id='alacritty', name='Alacritty')¶
ID:
alacrittyAliases: -
Name: Alacritty
Icon: 🔳
Reference: <https://alacritty.org>_
Detection function:
is_alacritty()Pytest decorators:
@skip_alacritty/@unless_alacrittyGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.APPLE_TERMINAL = Terminal(id='apple_terminal', name='Apple Terminal')¶
ID:
apple_terminalAliases: -
Name: Apple Terminal
Icon: 🍏
Reference: <https://support.apple.com/guide/terminal/welcome/mac>_
Detection function:
is_apple_terminal()Pytest decorators:
@skip_apple_terminal/@unless_apple_terminalGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.CONTOUR = Terminal(id='contour', name='Contour')¶
ID:
contourAliases: -
Name: Contour
Icon: ◰
Reference: <https://contour-terminal.org>_
Detection function:
is_contour()Pytest decorators:
@skip_contour/@unless_contourGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.FOOT = Terminal(id='foot', name='foot')¶
ID:
footAliases: -
Name: foot
Icon: 🦶
Reference: <https://codeberg.org/dnkl/foot>_
Detection function:
is_foot()Pytest decorators:
@skip_foot/@unless_footGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.GHOSTTY = Terminal(id='ghostty', name='Ghostty')¶
ID:
ghosttyAliases: -
Name: Ghostty
Icon: 👻
Reference: <https://ghostty.org>_
Detection function:
is_ghostty()Pytest decorators:
@skip_ghostty/@unless_ghosttyGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.GNOME_TERMINAL = Terminal(id='gnome_terminal', name='GNOME Terminal')¶
ID:
gnome_terminalAliases: -
Name: GNOME Terminal
Icon: 𝐆
Reference: <https://help.gnome.org/users/gnome-terminal/stable/>_
Detection function:
is_gnome_terminal()Pytest decorators:
@skip_gnome_terminal/@unless_gnome_terminalGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.GNU_SCREEN = Terminal(id='gnu_screen', name='GNU Screen')¶
ID:
gnu_screenAliases: -
Name: GNU Screen
Icon: 📺
Reference: <https://www.gnu.org/software/screen/>_
Detection function:
is_gnu_screen()Pytest decorators:
@skip_gnu_screen/@unless_gnu_screenGroups (3):
ALL_TERMINALS,ALL_TRAITS,MULTIPLEXERS⬥
- extra_platforms.HYPER = Terminal(id='hyper', name='Hyper')¶
ID:
hyperAliases: -
Name: Hyper
Icon: ⬡
Reference: <https://hyper.is>_
Detection function:
is_hyper()Pytest decorators:
@skip_hyper/@unless_hyperGroups (3):
ALL_TERMINALS,ALL_TRAITS,WEB_TERMINALS⬥
- extra_platforms.ITERM2 = Terminal(id='iterm2', name='iTerm2')¶
ID:
iterm2Aliases: -
Name: iTerm2
Icon: ⬛
Reference: <https://iterm2.com>_
Detection function:
is_iterm2()Pytest decorators:
@skip_iterm2/@unless_iterm2Groups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.KITTY = Terminal(id='kitty', name='Kitty')¶
ID:
kittyAliases: -
Name: Kitty
Icon: 🐱
Reference: <https://sw.kovidgoyal.net/kitty/>_
Detection function:
is_kitty()Pytest decorators:
@skip_kitty/@unless_kittyGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.KONSOLE = Terminal(id='konsole', name='Konsole')¶
ID:
konsoleAliases: -
Name: Konsole
Icon: 💎
Reference: <https://konsole.kde.org>_
Detection function:
is_konsole()Pytest decorators:
@skip_konsole/@unless_konsoleGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.RIO = Terminal(id='rio', name='Rio')¶
ID:
rioAliases: -
Name: Rio
Icon: 🏞️
Reference: <https://rioterm.com>_
Detection function:
is_rio()Pytest decorators:
@skip_rio/@unless_rioGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.TABBY = Terminal(id='tabby', name='Tabby')¶
ID:
tabbyAliases: -
Name: Tabby
Icon: 🐈
Reference: <https://tabby.sh>_
Detection function:
is_tabby()Pytest decorators:
@skip_tabby/@unless_tabbyGroups (3):
ALL_TERMINALS,ALL_TRAITS,WEB_TERMINALS⬥
- extra_platforms.TILIX = Terminal(id='tilix', name='Tilix')¶
ID:
tilixAliases: -
Name: Tilix
Icon: 🔀
Reference: <https://gnunn1.github.io/tilix-web/>_
Detection function:
is_tilix()Pytest decorators:
@skip_tilix/@unless_tilixGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.TMUX = Terminal(id='tmux', name='tmux')¶
ID:
tmuxAliases: -
Name: tmux
Icon: 📟
Reference: <https://github.com/tmux/tmux/wiki>_
Detection function:
is_tmux()Pytest decorators:
@skip_tmux/@unless_tmuxGroups (3):
ALL_TERMINALS,ALL_TRAITS,MULTIPLEXERS⬥
- extra_platforms.UNKNOWN_TERMINAL = Terminal(id='unknown_terminal', name='Unknown terminal')¶
ID:
unknown_terminalAliases: -
Name: Unknown terminal
Icon: ❓
Reference: <https://en.wikipedia.org/wiki/Terminal_emulator>_
Detection function:
is_unknown_terminal()Pytest decorators:
@skip_unknown_terminal/@unless_unknown_terminalGroups (2):
ALL_TRAITS,UNKNOWN⬥
- extra_platforms.VSCODE_TERMINAL = Terminal(id='vscode_terminal', name='VS Code Terminal')¶
ID:
vscode_terminalAliases: -
Name: VS Code Terminal
Icon: 🔵
Reference: <https://code.visualstudio.com/docs/terminal/basics>_
Detection function:
is_vscode_terminal()Pytest decorators:
@skip_vscode_terminal/@unless_vscode_terminalGroups (3):
ALL_TERMINALS,ALL_TRAITS,WEB_TERMINALS⬥
- extra_platforms.WEZTERM = Terminal(id='wezterm', name='WezTerm')¶
ID:
weztermAliases: -
Name: WezTerm
Icon: 🔡
Reference: <https://wezfurlong.org/wezterm/>_
Detection function:
is_wezterm()Pytest decorators:
@skip_wezterm/@unless_weztermGroups (3):
ALL_TERMINALS,ALL_TRAITS,GPU_TERMINALS⬥
- extra_platforms.WINDOWS_TERMINAL = Terminal(id='windows_terminal', name='Windows Terminal')¶
ID:
windows_terminalAliases: -
Name: Windows Terminal
Icon: ⊡
Reference: <https://github.com/microsoft/terminal>_
Detection function:
is_windows_terminal()Pytest decorators:
@skip_windows_terminal/@unless_windows_terminalGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.XTERM = Terminal(id='xterm', name='xterm')¶
ID:
xtermAliases: -
Name: xterm
Icon: 𝐗
Reference: <https://invisible-island.net/xterm/>_
Detection function:
is_xterm()Pytest decorators:
@skip_xterm/@unless_xtermGroups (3):
ALL_TERMINALS,ALL_TRAITS,NATIVE_TERMINALS⬥
- extra_platforms.ZELLIJ = Terminal(id='zellij', name='Zellij')¶
ID:
zellijAliases: -
Name: Zellij
Icon: 🪵
Reference: <https://zellij.dev>_
Detection function:
is_zellij()Pytest decorators:
@skip_zellij/@unless_zellijGroups (3):
ALL_TERMINALS,ALL_TRAITS,MULTIPLEXERS⬥