Contesto e domanda
Esistono molti modi per colorare l'ambiente del terminale e della shell. L'output di singoli comandi, come ls
e grep
, può anche essere colorato. Non direttamente correlato, ma comunque interessante è l'idea di riprodurre file multimediali sulla console, ma apparentemente si basa su alcuni framework (librerie) in cima al sistema di finestre. La seguente domanda è rivolta esclusivamente al bash
shell e la sua implementazione nel framework del terminale Linux e le sue basi.
Considera il seguente montaggio di "rendering" ASCII di una scena in un gioco 2D:
Queste non sono scene generate casualmente. I segmenti che ho selezionato rappresentano tutti in realtà una qualche forma di terreno "prato" (alberi, cespugli e arbusti, fiori, erba ecc.) Da un gioco che utilizza caratteri ASCII per rappresentare tali oggetti. Le ultime 4 scene mostrano set di riquadri realizzati dagli utenti che sono fondamentalmente una rimappa di caratteri ASCII con specifiche di colore (tali dettagli sono banali – basti dire che questa è l'ispirazione visiva per ciò che sto cercando di realizzare qui in termini di immagini e " modello").
Le caratteristiche comuni di quelle scene nel montaggio sono:
- 5-6 caratteri ASCII diversi al massimo (virgole, virgolette e pochi altri)
- 2-4 colori utilizzati
- per i personaggi
- per gli sfondi dei personaggi in alcuni casi:l'ultimo esempio serve per mostrare l'uso di sfumature di colore con poco o nessun carattere per creare un motivo, ad esempio un mosaico di colori
Quello che ho in una macchina virtuale al momento è Arch Linux e sebbene la domanda non sia specifica della distribuzione, ho esaminato la loro documentazione per personalizzare il /etc/bash.bashrc
file. Vedo che molte spiegazioni vanno nella configurazione dell'aspetto del prompt e in generale di tutti gli elementi in primo piano. Ci sono poche informazioni su qualsiasi configurazione per lo sfondo, ad eccezione di solito per un colore solido, come queste impostazioni e suggerimenti:
# Background
On_Black='e[40m' # Black
On_Red='e[41m' # Red
On_Green='e[42m' # Green
On_Yellow='e[43m' # Yellow
On_Blue='e[44m' # Blue
On_Purple='e[45m' # Purple
On_Cyan='e[46m' # Cyan
On_White='e[47m' # White
Continuo a non capire concettualmente quali sono quegli “spazi” vuoti/vuoti/di sfondo che non ho digitato quando uso la console, ad esempio “di cosa sono fatti?” per così dire. Soprattutto quelli che non sono al prompt e che avvolgono i comandi che vengono ripetuti. Rispetto a quanto accade sulla linea attiva, è possibile dimostrare che bash
agisce in modo "orientato alla riga" e che alcune operazioni attivano una cancellazione della riga attiva (for i in $(seq 1 $(expr $(tput lines) * $(tput cols))); do echo -n M; done; tput cup 15 1
, quindi al prompt digitare un carattere e tornare indietro - ha dimostrato un collaboratore) - la cui estensione può variare da una CLI a un'altra, ad esempio zsh. Inoltre, sembra che quando aggiungo qualcosa come [