A UTF-8 vector graphics and audio capable terminal, with support for
the ctx vector protocol, itself implemented
with ctx, thus able to run with SDL2, on KMS/DRM (linux
and openbsd verified), inside a utf8 capable terminal, as streamed
kitty/iterm2 images (slow) and on linux framebuffer devices.
The clock in the above screenshot is a shellscript.
The easiest way to test ctx as a terminal is installing it through
$ 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
The ctx terminal undergoes fuzz testing and its internal fuzzer has
uncovered problems in screen, mlterm and more, 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.
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
- audio recording and playback (only raw pcm for now, opus codec NYI)
- 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
- Most of dterms window management integration.
- 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.
- hyperlink escape sequences
- rewrap on resize
- configure/customize fonts
- shift or other modifier for select for copy+paste in altscreen
- 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 inspiration and references for earlier
vector graphics capable systems include
The MGR Window System
and ripscript have
provided more graphics rich terminal experiences in the past.