← cybernet.fun
NEONTERM//VT
v0.1.0  ·  C++20  ·  Qt 6  ·  MIT

Terminale · C++20 · Qt 6 · OpenGL 3.3 · MIT

Ogni glifo lo disegna lui.
Sotto c'è un terminale vero.

neonterm non usa il widget di testo di sistema: la griglia dei caratteri è renderizzata da OpenGL 3.3 core con quad istanziati e un atlas di glifi, la testata e la barra di stato sono disegnate a mano. Sotto la grafica ci sono un pty vero (forkpty), un parser VT100/ANSI incrementale e uno scrollback di 5000 righe. Con show le immagini, i video e i PDF finiscono dentro la sessione, ancorati alle righe del testo.

Come funziona

01 / LA GRIGLIA

Pixel fisici interi, testo nitido

La griglia è ancorata a pixel fisici interi: a scala frazionaria (1,4x) un passo frazionario faceva ricampionare ogni glifo, cioè il «testo sfocato» dei terminali che disegnano il testo in un'immagine. Sfondi, cursore, blocchi e braille sono quad istanziati; le scanline sono un post shader spegnibile.

02 / IL PARSER

Un terminale, non un'imitazione

Macchina a stati CSI/OSC/SGR con UTF-8 e doppia larghezza, 16/256/24-bit, schermo alternato, scroll region, bracketed paste, mouse SGR, IME. Il pty è forkpty con master non bloccante e TIOCSWINSZ: un resize arriva alla shell come un stty size vero.

03 / I MEDIA

Immagini e video dentro lo schermo

show foto.jpg misura il file, chiede al terminale di piazzarlo alla riga corrente (OSC 7770) e stampa le righe che gli riservano lo spazio. Il file non viene trasferito: lo decodifica il terminale, in locale. Il media scorre con il testo e sparisce quando esce dallo scrollback.

Com'è fatto

neonterm con la schermata --demo: il logo a blocchi colorati, la griglia di caratteri 132x36, le palette ANSI 16/256/24-bit e le righe di log del parser.
La schermata --demo — la stessa cosa che disegna il terminale: palette ANSI, braille, blocchi, righe di log del parser, testata con tab e barra di stato con pid, griglia, fps e badge degli effetti.
neonterm mentre esegue fastfetch: l'output colorato con le righe del sistema, sopra la riga del prompt e la barra dei colori ANSI.
Uso normale — l'output colorato di fastfetch dentro neonterm: colore 24-bit, il prompt, la barra dei colori ANSI.
La console LCARS di neonterm: barre arancione, lilla e blu con angoli tondi, la voce COMPUTER con SISTEMI, RETE, PROCESSI, ARCHIVIO, DIAGNOSTICA e USCITA, e in basso i KPI live.
STUI, la console LCARS — lo switch in alto a destra (Ctrl+Shift+S) copre il terminale con un albero di pannelli di sistema. Il terminale resta vivo sotto.

Comandi

TastoCosa fa
Ctrl+Shift+T · Ctrl+Shift+Wnuova scheda · chiude la scheda
Ctrl+Tab · Ctrl+Shift+Tabscheda successiva / precedente
Alt+1…9vai alla scheda
Ctrl+Shift+C · Ctrl+Shift+Vcopia · incolla
Ctrl++ Ctrl+− Ctrl+0zoom del testo · reset
F2scanline e vignettatura on/off
Ctrl+Shift+Sconsole STUI (LCARS)
Ctrl+Shift+Xchiude tutti i blocchi media
F11 / Escschermo intero / esci
rotella · tasto centrale · doppio clicscrollback · incolla · seleziona la parola
tasto destromenu: copia/incolla, schede, zoom, effetti

show: media nel terminale

# show si installa insieme al terminale: entrambi finiscono in $PATH
show foto.jpg            # immagine nel viewport
show film.mp4            # video con audio, frame live
show canzone.mp3         # player con waveform e avanzamento
show documento.pdf       # prima pagina (show -p 3 per un'altra)
show note.txt            # testo nel buffer, come cat
show --stop              # ferma i media in riproduzione
show -c 60 foto.jpg      # larghezza in celle

Video e waveform passano da ffmpeg/ffprobe, i PDF da pdftoppm: se gli strumenti mancano il blocco mostra il motivo invece di restare vuoto. Sotto ogni video c'è la barra con play/pausa, avanzamento trascinabile, tempo e mute; l'audio usa la stessa barra con la copertina.

Installazione

Dal sorgente

C++20 · Qt 6.2+

Servono CMake ≥ 3.21, un compilatore C++20 e i moduli Qt 6 Core, Gui, Widgets, OpenGL, OpenGLWidgets, Multimedia (su Debian/Ubuntu: qt6-base-dev qt6-multimedia-dev libqt6opengl6-dev).

git clone https://github.com/4n-0n/neonterm.git
cd neonterm
cmake -B build -S .
cmake --build build -j"$(nproc)"
ctest --test-dir build --output-on-failure
sudo cmake --install build --prefix /usr/local

L'installazione mette neonterm e show in /usr/local/bin, più la voce di menu e le icone: dopo kbuildsycoca6 --noincremental compare fra le applicazioni.

Da sapere

Limiti veri, detti prima.
  • Il contenuto non rifluisce quando si ridimensiona la finestra: le righe più lunghe vengono tagliate. È la scelta più semplice e prevedibile.
  • Il font interno (polilinee, --stroke-font) a 14 px è poco leggibile: resta un esperimento, il default è il monospace di sistema in un atlas di glifi.
  • Niente sixel/kitty, niente legature dei font, niente split pane: un processo per scheda.
  • blink (SGR 5) non anima il testo; il cursore invece lampeggia.
  • Il media non è cliccabile né selezionabile: è un'immagine sopra la griglia, i suoi controlli sono quad disegnati dal terminale.
  • OSC 7770 può essere emesso da qualunque processo che scriva sul tty — lo stesso modello di sixel e kitty: il processo potrebbe già leggere quel file da solo.
  • Non ci sono pacchetti pronti (niente .deb, AppImage o flatpak): si compila dal sorgente, e le dipendenze sono quelle Qt 6 della tua distro.
  • Provato su KDE Plasma 6 / Wayland a 1,4x di scala; su X11 lo stesso codice gira (il renderer CPU con --paint è il riferimento quando OpenGL manca).