DomTerm è un moderno emulatore di terminale che utilizza un motore browser come "kit di strumenti GUI". Ciò abilita alcune funzionalità ordinate, come grafica e collegamenti incorporabili, rich text HTML e comandi pieghevoli (mostra/nascondi). In caso contrario, sembra un emulatore di terminale autonomo e completo di funzionalità, con un'eccellente compatibilità con xterm (inclusa la gestione del mouse e il colore a 24 bit) e "chrome" (menu) appropriato. Inoltre, c'è il supporto integrato per la gestione delle sessioni e le finestre secondarie (come in tmux
e GNU screen
), modifica di input di base (come in readline
) e il paging (come in less
).
Di seguito esamineremo di più queste funzionalità. Assumiamo che tu abbia domterm
installato (salta alla fine di questo articolo se hai bisogno di ottenere e compilare DomTerm). Per prima cosa, però, ecco una rapida panoramica della tecnologia.
Frontend vs. backend
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
La maggior parte di DomTerm è scritta in JavaScript e viene eseguita in un motore browser. Può essere un browser web desktop, come Chrome o Firefox (vedi immagine 3), oppure può essere un browser incorporato. L'uso di un browser Web generico funziona bene, ma l'esperienza utente non è così piacevole (poiché i menu sono progettati per la navigazione generale, non per un emulatore di terminale) e il modello di sicurezza si intromette, quindi l'utilizzo di un browser incorporato è più piacevole .
Attualmente sono supportati:
qtdomterm
, che utilizza il toolkit Qt eQtWebEngine
- Un
Electron
incorporamento (vedi immagine 1) atom-domterm
esegue DomTerm come pacchetto nell'editor di testo Atom (anch'esso basato su Electron) e si integra con il sistema del riquadro Atom (vedi immagine 2)- Un wrapper per
WebEngine
di JavaFX , utile per il codice scritto in Java (vedi immagine 4) - In precedenza, il frontend preferito utilizzava Firefox-XUL, ma da allora Mozilla ha abbandonato XUL
Attualmente, il frontend Electron è probabilmente l'opzione più interessante, seguito da vicino dal frontend Qt. Se utilizzi Atom, atom-domterm
funziona abbastanza bene.
Il server di backend è scritto in C. Gestisce pseudo terminali (PTY) e sessioni. È anche un server HTTP che fornisce JavaScript e altri file al frontend. Il domterm
comando avvia i lavori del terminale ed esegue altre richieste. Se non ci sono server in esecuzione, domterm
si demonizza. La comunicazione tra il back-end e il server viene normalmente eseguita utilizzando WebSocket (con libwebsockets sul server). Tuttavia, l'incorporamento JavaFX non utilizza né WebSocket né il server DomTerm; invece le applicazioni Java comunicano direttamente utilizzando il bridge Java–JavaScript.
Un solido emulatore di terminale compatibile con xterm
DomTerm sembra e si sente come un moderno emulatore di terminale. Gestisce eventi del mouse, colori a 24 bit, Unicode, caratteri a doppia larghezza (CJK) e metodi di input. DomTerm fa un ottimo lavoro su vttest testsuite.
Le caratteristiche insolite includono:
Mostra/nascondi pulsanti ("pieghevoli"): I triangoli (visti nell'immagine 2 sopra) sono pulsanti che nascondono/mostrano l'output corrispondente. Per creare i pulsanti, aggiungi alcune sequenze di escape nel testo del prompt.
Supporto del clic del mouse per readline
e editor di input simili: Se si fa clic nell'area di immissione (gialla), DomTerm invierà la giusta sequenza di tasti freccia all'applicazione. (Ciò è abilitato dalle sequenze di escape nel prompt; puoi anche forzarlo usando Alt+clic.)
Stima il terminale usando CSS: Questo di solito viene fatto in ~/.domterm/settings.ini
, che viene ricaricato automaticamente una volta salvato. Ad esempio, nell'immagine 2, sono stati impostati i colori di sfondo specifici del terminale.
Una console REPL migliore
Un classico emulatore di terminale funziona su griglie rettangolari di celle di caratteri. Funziona per una REPL (shell dei comandi), ma non è l'ideale. Ecco alcune funzionalità di DomTerm utili per i REPL che non si trovano in genere negli emulatori di terminale:
Un comando può "stampare" un'immagine, un grafico, una formula matematica o una serie di link cliccabili: Un'applicazione può inviare una sequenza di escape contenente quasi qualsiasi HTML. (L'HTML viene cancellato per rimuovere JavaScript e altre funzionalità pericolose.)
L'immagine 3 mostra un frammento da un gnuplot
sessione. Gnuplot (2.1 o successivo) supporta domterm
come tipo terminale. L'output grafico viene convertito in un'immagine SVG, che viene quindi stampata sul terminale. Il mio post sul blog Gnuplot display su DomTerm fornisce maggiori informazioni al riguardo.
Il linguaggio Kawa ha una libreria per la creazione e la trasformazione di valori geometrici dell'immagine. Se stampi un tale valore di immagine su un terminale DomTerm, l'immagine viene convertita in SVG e incorporata nell'output.
Rich text in output: I messaggi di aiuto sono più leggibili e hanno un aspetto migliore con lo stile HTML. Il riquadro inferiore dell'immagine 1 mostra l'output di domterm help
. (L'output è in chiaro se non è in esecuzione in DomTerm.) Notare il PAUSED
messaggio dal cercapersone integrato.
I messaggi di errore possono includere link selezionabili: DomTerm riconosce la sintassi filename:line:column:
e lo trasforma in un collegamento che apre il file e la riga in un editor di testo configurabile. (Funziona con nomi di file relativi se usi PROMPT_COMMAND
o simili alle directory dei brani.)
Un compilatore può rilevare che è in esecuzione in DomTerm ed emettere direttamente collegamenti ai file in una sequenza di escape. Questo è più robusto rispetto alla corrispondenza del modello di DomTerm, poiché gestisce spazi e altri caratteri speciali e non dipende dal rilevamento della directory. Nell'immagine 4, puoi vedere i messaggi di errore dal compilatore Kawa. Passare il mouse sopra la posizione del file fa sì che venga sottolineato e il file:
L'URL viene visualizzato in atom-domterm
area messaggi (parte inferiore della finestra). (Quando non si utilizza atom-domterm
, tali messaggi vengono visualizzati in una casella in sovrimpressione, come si vede per PAUSED
messaggio nell'immagine 1.)
L'azione quando si fa clic su un collegamento è configurabile. L'azione predefinita per un file:
collegamento con un #position
suffisso è aprire il file in un editor di testo.
Rappresentanza interna strutturata: I seguenti sono tutti rappresentati nella struttura interna del nodo:comandi, prompt, righe di input, output normale ed errore, schede e conservazione della struttura se si "Salva come HTML". Il file HTML è compatibile con XML, quindi puoi utilizzare gli strumenti XML per cercare o trasformare l'output. Il comando domterm view-saved
apre un file HTML salvato in un modo che abilita la piegatura dei comandi (i pulsanti mostra/nascondi sono attivi) e lo scorrimento al ridimensionamento della finestra.
Stampa graziosa in stile Lisp integrata: È possibile includere direttive di stampa graziosa (ad es. Raggruppamento) nell'output in modo tale che le interruzioni di riga vengano ricalcolate al ridimensionamento della finestra. Per una discussione più approfondita, vedere il mio articolo Dynamic Pretty-printing in DomTerm.
Modifica della riga integrata di base con cronologia (come GNU readline
):utilizza l'editor integrato del browser, quindi ha un'ottima gestione del mouse e della selezione. È possibile passare dalla modalità carattere normale (la maggior parte dei caratteri digitati vengono inviati direttamente al processo); o modalità riga (i caratteri normali vengono inseriti mentre i caratteri di controllo causano azioni di modifica, con Invio che invia la riga modificata al processo). L'impostazione predefinita è la modalità automatica, in cui DomTerm passa dalla modalità carattere alla modalità linea a seconda che il PTY sia in raw
o
canonico
modalità.
Un cercapersone integrato (come un less
semplificato ):le scorciatoie da tastiera controlleranno lo scorrimento. In "modalità cercapersone", l'output si interrompe dopo ogni nuova schermata (o riga singola, se si va avanti riga per riga). La modalità di paging è discreta e intelligente per quanto riguarda l'input dell'utente, quindi puoi (se lo desideri) eseguirla senza che interferisca con i programmi interattivi.
Multiplex e sessioni
Schede e affiancamento: Non solo puoi creare più schede del terminale, ma puoi anche affiancarle. Puoi utilizzare il mouse o una scorciatoia da tastiera per spostarti tra riquadri e schede oltre a crearne di nuovi. Possono essere riorganizzati e ridimensionati con il mouse. Questo è implementato utilizzando la libreria JavaScript GoldenLayout. L'immagine 1 mostra una finestra con due riquadri. Quello in alto ha due schede, con una in esecuzione Midnight Commander; il riquadro inferiore mostra domterm help
output come HTML. Tuttavia, su Atom utilizziamo invece le sue tessere e schede trascinabili integrate; puoi vederlo nell'immagine 2.
Staccare e ricollegare alle sessioni: DomTerm supporta la disposizione delle sessioni, simile a tmux
e GNU screen
. Puoi anche allegare più finestre o riquadri alla stessa sessione. Ciò supporta la condivisione di sessioni multiutente e le connessioni remote. (Per sicurezza, tutte le sessioni dello stesso server devono essere in grado di leggere un socket di dominio Unix e un file locale contenente una chiave casuale. Questa restrizione verrà revocata quando avremo una storia di accesso remoto buona e sicura.)
Il domterm
comando è anche come tmux
o GNU screen
in ciò ha più opzioni per controllare o avviare un server che gestisce una o più sessioni. La differenza principale è che, se non è già in esecuzione sotto DomTerm, il domterm
comando crea una nuova finestra di primo livello, invece di essere eseguita nel terminale esistente.
Il domterm
command ha un numero di sottocomandi, simili a tmux
o git
. Alcuni sottocomandi creano finestre o sessioni. Altri (come "stampare" un'immagine) funzionano solo all'interno di una sessione DomTerm esistente.
Il comando domterm browse
apre una finestra o un riquadro per sfogliare un URL specificato, ad esempio quando si sfoglia la documentazione.
Come ottenere e installare DomTerm
DomTerm è disponibile dal suo repository GitHub. Attualmente non ci sono pacchetti precompilati, ma ci sono istruzioni dettagliate. Tutti i prerequisiti sono disponibili su Fedora 27, il che lo rende particolarmente facile da costruire.