ctx terminal
A UTF-8 vector graphics and audio capable terminal, with support for
the ctx vector protocol, itself implemented
with ctx, thus able to run in many places used SDL2, on
KMS/DRM (linux and openbsd verified), fbdev and other ctx backends.
The clock in the above screenshot is a shellscript.
The easiest way to test ctx as a terminal is installing it through
flatpak
$ flatpak --user remote-add --no-gpg-verify ctx https://ctx.graphics/flatpak/
$ flatpak --user install ctx graphics.ctx.terminal
For source building instructions see the SDK
documentation.
WARNING:
The ctx terminal undergoes fuzz testing and its quite vtfuzz.c fuzzer has
uncovered problems in screen, mlterm, zutty and more terminals, there are
capabilities which should be optional which are not yet - like stb_image
for image format
decoding and the ability to listen to the microphone that are a potential
security risk if you are using a system with programs that target the ctx
terminal - for now unlikely since the terminal is rather unknown; but
you've been warned.
Exhaustive list of supported
escape sequences acts as a
refererence for further development and a shorthand cheat-sheet
for writing code for the terminal.
- VT4xx, ECMA-48
- Almost full vt100 and vt220 escape sequence handling, scrollback, like xterm, dterm window manipulation (among tabs/clients), bracketed paste, 256 and 24bit colors are supported - and a growing subset of vt420 and other relevant terminal escape sequences.
-
Ametameric
-
The terminals 16 color palette called ametameric is optimized for accesibility for dichromats.
- ctx vector graphics
- Using the ctx protocol, by first
entering ctx mode with \e[?7020h which creates a new
or accesses an existing vector drawing context for the current
line.
- atty
- audio recording and playback (only raw pcm for now, opus codec NYI)
- sixels
- DEC compatible raster encoding, with 6row high 1bit raster lines * colors used.
- kitty graphics
- max 4 images per line, no z-ordering - using stb_image for PNG decoding.
- iterm2 inline images
- iterm2 inline image image protocol in one bulk base64 transfer, using stb_image for image decoding.
- mouse xterm
- xterm mouse reporting modes - somewhat incomplete
- dterm
- Most of dterms window management integration.
- UTF-8
- The terminal uses 7bit control codes, and reserves bytes>127 for use in character data.
- vt102 escapes
- >100 points on the vttest score card
- ECMA-48 colors
- The standard defining the 16 colors
- ECMA-48 justification
- Only implementing wordwrap for now, can be extended with more.
- pixel mouse
- escape sequence to get pixel coordinates for mouse events
- ECMA-48 proportional
- Limited predictable proportional rather than monospaced text, for best results render proportional text in a finall pass, starting with left most column.
Missing bits:
- hyperlink escape sequence
- configure/customize fonts
- Drag to select in vim
- The final result of the interaction is correct, but intermediate frames are perhaps not queued for draw?
- Cursor setting
- alt-screen issue
- only code 1049 works fully specs compliant, the others
leave the cursor in the wrong spot.
- vt52 cursor keys
- not passing vttest in vt52 mode
Historic predecessors for
vector graphics capable terminals include:
ReGIS,
The MGR Window System
and ripscript have
provided more graphics rich terminal experiences in the past.