14 giugno, 2019

Gestire le opzioni del terminale



No non il monitor (anche quello (almeno il mio) sarebbe da fare (fisicamente)) il terminale, quello che Windoze chiama Prompt dei Comandi.

Tutto parte con un tweet che rimanda qui.

Ci sono tre alternative, dice. Ma non solo la stessa cosa:

  • tput clear produce tante righe vuote sufficienti a nascondere il testo, basta scrollare su per ritrovarlo;
  • printf "\033c" reset del terminale; il contenuto precedente sparisce;
  • clear esattamente come tput clear;
  • ctrl-L come tput clear e clear.

Uhmmm... dubbi: io quando mi serve uso ^L. Non sapevo della sequenza esc-C. Ma anche CommandLineFu sa che non è stato esaustivo e nel giro di pochissimo lo ritwitta con variazioni (forse, sembra lo stesso). In questi casi io lancio il bat-segnale --oops! volevo dire SO, Stack Overflow. Ed ecco: What does printf(“\033c” ) mean?

In breve, OK per esc-C, si può usare anche in esadecimale printf "\x1bc". No, niente decimali non va, proprio come una volta.

Ma c'è un altro comando: tput.

$ tput
Usage: tput [options] [command]

Options:
  -S <<       read commands from standard input
  -T TERM     use this instead of $TERM
  -V          print curses-version
  -x          do not try to clear scrollback

Commands:
  clear       clear the screen
  init        initialize the terminal
  reset       reinitialize the terminal
  capname     unlike clear/init/reset, print value for capability "capname"


Misterioso, provo il man, capito niente; non è il mio giorno fortunato. Presto chiamo GNU Software e arrivo a tput: Portable Terminal Control
The tput command allows shell scripts to do things like clear the screen, underline text, and center text no matter how wide the screen is. To do these things, it translates the terminal-independent name of a terminal capability into its actual value for the terminal type being used.
Ecco che tput reset fa il reset del terminale, come il comando printf "\033c" (o "\x1b") da cui ero partito e tput clear è equivalente agli altri tre, quelli che puliscono.

Poi ci sono altre cose, per esempio i colori, il grassetto, il sottolineato:

script tc
tput setab 7
tput setaf 1
echo
echo terminale con colori cambiati
echo -n adesso
tput bold
echo " "grassetto
tput sgr0; tput setab 7; tput setaf 1 #non so annullare il grassetto
echo -n e anche" "
tput smul
echo sottolineato
tput rmul
echo -n e volendo altro ancora
tput sgr0
echo -e "\n"



Non tutti i comandi che si trovano online sono abilitati (o sono io che non sono abbastanza nerd). Per esempio non so annullare il comando bold. Se si dovesse usare davvero tput converrebbe implementare funzioni, lo script precedente potrebbe diventare qualcosa così:

script tc1
function mycol() {
    tput setab 7
    tput setaf 1
}

function nobold() {
    tput sgr0
    mycol
}

mycol
echo
echo terminale con colori cambiati
echo -n adesso
tput bold
echo " "grassetto
nobold
echo -n e anche" "
tput smul
echo sottolineato
tput rmul
echo -n e volendo altro ancora
tput sgr0
echo -e "\n"
tput rev
echo colori fg e bg invertiti
tput sgr0
echo ""



🔴

Nessun commento:

Posta un commento