Perché i terminali consentono solo display a cella di caratteri

1

In chiedendo i caratteri matematici nel terminale , ho iniziato a rendermi conto che non è possibile avere una grafica pixel perfetta nel terminale:

Il terminale ha anche caratteristiche strane in quanto devi usare ansi sequenze di escape per cambiare i colori e muovere il cursore intorno e tale (nelle celle) nel terminale.

Mi chiedo perché queste decisioni siano state prese per il terminale. Perché i terminali sembrano avere tali limiti come tutto ciò che viene fatto con sequenze di escape ansi, divisi in linee e celle per i personaggi piuttosto che pixel, limitazione a un intervallo di colori limitato, gestione di eventi sconosciuta con il mouse utilizzando ncurses , ecc. Capisco che i primi computer avevano limiti di colori, quindi potevano essere limitati a 8 colori (o anche solo 2 colori in bianco e nero, o nero e verde o altro). Ma questo era a causa della mancanza di tecnologia al momento. Ora i terminali moderni hanno almeno 256 supporti a colori, alcuni con supporto dei colori reali (come 16 milioni di colori). Alcuni addirittura ti permettono di avere immagini in loro ora, quindi è quasi al punto di essere pixel-perfetto in alcuni casi. Questa cosa ti consente persino di visualizzare i PDF nel terminale (sembra che questo sia dovuto a sixels ).

Chiedendosi se queste decisioni sono state prese perché sarebbe stato in qualche modo un problema rendere tale applicazione "terminale" usando la manipolazione a livello di pixel e altre cose, come il browser. Cioè, chiedendo se c'è una ragione per cui l'applicazione terminale non dovrebbe essere solo le stesse funzionalità come un browser, almeno per quanto riguarda il rendering e l'interazione.

Alla fine i terminali hanno iniziato a dover avere complicate interfacce utente più che semplici log di testo. Quindi ottieni cose come questo o questo (prime due immagini sotto). Ora stai ricevendo terminali con supporto grafico completo, quindi sono sostanzialmente come desktop o browser (ultima immagine sotto). Quindi mi sto solo chiedendo perché queste limitazioni siano essenzialmente poste sul terminale.

    
posta Lance Pollard 23.07.2018 - 00:10
fonte

2 risposte

7

Poiché gli emulatori di terminale sono forniti per adattarsi a uno stile semplice di comunicazione uomo-computer, la riga di comando , che rimane estremamente utile in contesti alcuni .

Indietro quando la linea di comando e i terminali hardware erano tutto ciò che avevamo, era chiaro che erano terribilmente limitati per alcuni contesti. La gente ha iniziato a spingere le proprie capacità, dandoci ANSI, ncurses e, infine, sistemi di finestre e grafici grezzi, come illustrato nei primi due esempi. Parallelamente a questo sforzo, i sistemi GUI effettivamente indirizzabili ai pixel iniziarono a popolare lentamente il mondo, perché quei pacchetti di finestre basati sul terminale erano intelligenti, ma ancora irrimediabilmente inadeguati per molte esigenze. Alla fine, i sistemi di grafica indirizzabili ai pixel hanno conquistato il mondo.

Tuttavia, l'API software per manipolare i sistemi GUI è molto più complessa dell'API necessaria per visualizzare messaggi di testo in un set di caratteri fissi, su uno schermo di dimensioni fisse, su un terminale hardware. I componenti volevano che il loro vecchio software continuasse a funzionare, e per il loro nuovo software non volevano scrivere una funzione da 300 righe, specificando maniglie di finestre, maniglie di font, bitblit e manipolando rettangoli sovrapposti, solo per stampare un registro messaggio sullo schermo. Quindi, una delle prime cose che gli sviluppatori della GUI hanno fatto era scrivere emulatori di terminale che permettessero ai programmi di fingere di parlare ancora con 80x25, set di caratteri fissi, terminali hardware. Tutti i vecchi programmi funzionano ancora, e quelli di noi che scrivono nuovi programmi per la riga di comando non sono gravati dall'apprendimento di molte nuove API che sono irrilevanti ai nostri obiettivi. Sono stati aggiunti campanelli e fischietti, ma questo è ancora il ruolo essenziale per gli emulatori di terminali.

Se hai bisogno di grafica a livello di pixel e supporto per le immagini, è sufficiente farlo in un'applicazione scritta per il sistema di finestre host o in Javascript in un browser. Non è necessario aggiungere questa capacità al terminale (oltre alla perversità / curiosità).

Why the terminals seem to have such limitations as everything being done with ansi escape sequences, divided into lines and cells for characters

La maggior parte dei computer ampiamente utilizzati dagli anni '60 fino agli inizi degli anni '80 comunicavano con i loro terminali tramite interfacce seriali e molti mostravano il loro output su carta . I terminali video non si sono diffusi fino alla fine degli anni '70, e quelli avevano una memoria molto limitata. Nel passato eravamo abituati a distinguere tra "terminali stupidi" che essenzialmente implementavano la stessa interfaccia della carta (stampare nella posizione corrente e scorrere verso il basso erano gli unici comandi) e "terminali intelligenti" che permettevano cose come il posizionamento del cursore di linee e colonne .

    
risposta data 23.07.2018 - 01:36
fonte
1

Vale la pena notare che il sistema X Window , che è ancora usato come GUI per Linux, è stato appena progettato come soluzione per consentire ai programmi di mostrare la grafica da remoto. Quindi è fondamentalmente il terminale grafico che stai cercando. Usa primitive come il testo e anche le immagini.

Questo approccio, tuttavia, inizia ad essere lento in quanto vi è la necessità di video e grafica 3D. Le implementazioni moderne utilizzano estensioni per consentire l'uscita dei programmi locali senza utilizzare il protocollo remoto. Inoltre, è in ritardo in termini di funzionalità, quindi i framework GUI più popolari sono passati dall'utilizzo delle primitive X al solo disegno di tutti i loro widget su un singolo canvas che viene inviato alla grafica come un bulk. Ciò ha reso l'uso remoto proibitivo.

    
risposta data 23.07.2018 - 07:16
fonte