GNU/Screen: differenze tra le versioni

yay!
(si procede a pezzetti)
(yay!)
Riga 17: Riga 17:
È importante ricordare che screen è studiato per rimanere in funzione in background (non è il termine esatto ma credo renda l'idea) per cui impariamo subito i comandi di base. Qualsivoglia sia la ragione si potrebbe avere la tentazione di chiudere il terminale, aprirne un altro e avviare nuovamente screen; questo significa aprire una nuova sessione ma lasciare attiva la precedente, oltre che errato come concetto si rischia di ritrovarsi con un certo numero di sessioni abbandonate :)
È importante ricordare che screen è studiato per rimanere in funzione in background (non è il termine esatto ma credo renda l'idea) per cui impariamo subito i comandi di base. Qualsivoglia sia la ragione si potrebbe avere la tentazione di chiudere il terminale, aprirne un altro e avviare nuovamente screen; questo significa aprire una nuova sessione ma lasciare attiva la precedente, oltre che errato come concetto si rischia di ritrovarsi con un certo numero di sessioni abbandonate :)


=== Visualizzazione finestre ===
screen usa un attivatore per tutte le altre funzioni, ovvero una prima sequenza di tasti che attendono una seconda, questo attivatore è di default <code>Ctrl-a</code>, per cui dire <code>Ctrl-a :</code> significa premere appunto Ctrl-a, rilasciare e quindi premere i due punti.
screen usa un attivatore per tutte le altre funzioni, ovvero una prima sequenza di tasti che attendono una seconda, questo attivatore è di default <code>Ctrl-a</code>, per cui dire <code>Ctrl-a :</code> significa premere appunto Ctrl-a, rilasciare e quindi premere i due punti.


Riga 38: Riga 40:
Come accennato in apertura, la sintassi è complessa e la affronteremo più avanti.
Come accennato in apertura, la sintassi è complessa e la affronteremo più avanti.


Ed ecco che la nostra statusbar, non particolarmente bella ma utile, si presenta come '''0-$ bash''', un rettangolino bianco su campo blu, mentre per il colore dell'intera barra viene usato il reverse (il contrario del colore di background usato dal terminale). La numerazione delle finestre parte da zero, ok è strano e con poco senso ma tant'è, ora apriamo un'altra finestra con un'altra istanza di bash:
 
=== Scorciatoie e messaggi ===
Ed ecco che la nostra statusbar, non particolarmente bella ma utile, si presenta come '''0-$ bash''', un rettangolino bianco su campo blu, mentre per il colore dell'intera barra viene usato il reverse (il contrario del colore di background e foreground usato dal terminale). La numerazione delle finestre parte da zero, ok è strano e con poco senso ma tant'è, ora apriamo un'altra finestra con un'altra istanza di bash:
  Ctrl-a c
  Ctrl-a c


Riga 87: Riga 91:




=== Chiusura ===
"Non mi piace, è complicato, mi sono impantanato e voglio uscire da questo casino!", ovvero come chiudere screen. <br>
"Non mi piace, è complicato, mi sono impantanato e voglio uscire da questo casino!", ovvero come chiudere screen. <br>
La risposta è che è impossibile chiudere screen, non è stato concepito per essere terminato, perché usarlo altrimenti? ;) <br>
La risposta è che è impossibile chiudere screen, non è stato concepito per essere terminato, perché usarlo altrimenti? ;) <br>
Riga 98: Riga 103:




=== Detach e sessioni ===
Ma passiamo alle cose serie. screen deve restare attivo e insieme a lui tutto ciò che contiene, ma abbiamo bisogno di fare il logout (locale o via SSH), riavviare X, chiudere il terminale o altre operazioni esotiche (tranne riavviare la macchina); questa operazione si chiama ''detach'', ovvero stacchiamo screen da quello che è di fatto il suo contenitore, xterm o tty che sia:
Ma passiamo alle cose serie. screen deve restare attivo e insieme a lui tutto ciò che contiene, ma abbiamo bisogno di fare il logout (locale o via SSH), riavviare X, chiudere il terminale o altre operazioni esotiche (tranne riavviare la macchina); questa operazione si chiama ''detach'', ovvero stacchiamo screen da quello che è di fatto il suo contenitore, xterm o tty che sia:
  Ctrl-a d
  Ctrl-a d
Riga 132: Riga 138:




=== Escape ===
Utilizzando <code>Ctrl-a</code> per screen non sarà più possibile usare tale combinazione in bash per andare ad inizio riga (beginning-of-line) o in Vim o altrove; in realtà non è usabile direttamente ma con:
Utilizzando <code>Ctrl-a</code> per screen non sarà più possibile usare tale combinazione in bash per andare ad inizio riga (beginning-of-line) o in Vim o altrove; in realtà non è usabile direttamente ma con:
  Ctrl-a a  
  Ctrl-a a  
Riga 139: Riga 146:


o inserire <code>'''escape ^Ss'''</code> nel file di configurazione.
o inserire <code>'''escape ^Ss'''</code> nel file di configurazione.
=== Split ===
Una delle caratteristiche principali di screen è la possibilità di dividere la finestra in più porzioni proprio come un Window Manager tiling o gli split di Vim, queste prendono il nome di regioni. <br>
Per dividere orizzontalmente si usa:
Ctrl-a S
Mentre per lo split verticale:
Ctrl-a |
A questo punto la regione in focus è trattata come una finestra, perché questo è lo scopo degli split: avere più finestre a vista contemporaneamente. Le scorciatoie per cambiare finestra sono le stesse ma valgono solo per quella regione, per muoversi invece tra una regione e l'altra useremo la combinazione:
Ctrl-a TAB
Di default abbiamo solo questa e le regioni vengono selezionate in senso orario ma possiamo associare altri comandi per muoverci in senso antiorario e spostarsi alla regione in alto o in basso; ma è forse necessaria qualche piccola considerazione. <br>
screen è un programma con una certa età e il suo sviluppo è piuttosto stagnante, nonostante sia abbastanza attivo su Git non esce una nuova versione da anni. La divisione orizzontale è di serie solo su Debian e derivate, per tutti gli altri è necessario applicare una patch o compilarselo da Git, tutto sommato è una feature piuttosto recente e porta alla conseguenza che alcuni comandi non sono stati adattati allo scopo. Ad esempio non ci si può spostare a destra e sinistra (non facilmente almeno) perché esistono solo i comandi ''up'' e ''down''. <br>
Da parecchio ormai esiste questo tipico confronto tra applicazioni simili per scoprire quale sia meglio o peggio, la verità è che una non sostituisce l'altra o se lo fa dipende dalle esigenze del singolo; in particolare sto parlando di "screen vs tmux" e "irssi vs weechat". Visto che sono programmi che necessitano di impegno nel capirne il funzionanemto, ciò che salta subito all'occhio in tmux e weechat è la ricchezza di feature abilitate in modo predefinito, questo non è necessariamente un pregio ma nemmeno un difetto, provateli entrambi e valutate.
In caso volessimo rimuovere la regione in focus useremo:
Ctrl-a X
Se invece decidiamo di rimuoverle tutte tranne quella in focus:
Ctrl-a Q
La rimozione di una regione non implica eliminare la finestra o chiudere il programma ma solamente eliminare lo split.
Ogni regione è ridimensionabile in base all'orientamento dello split:
Ctrl-a :resize valore
dove "valore" è la quantità di righe o colonne desiderata o una percentuale dello spazio totale.
* incrementa regione in focus: '''+valore'''
* diminuisce regione in focus: '''-valore'''
* imposta tutte le finestre alla stessa dimensione: '''='''
* massimizza regione in focus: '''max'''
* minimizza regione in focus: '''min'''
Quando facciamo il detach della sessione e la riattacchiamo, gli split spariscono, questo salverà la disposizione delle regioni per la sessione corrente:
Ctrl-a :layout save nome_a_piacere
Una volta salvato il layout il ripristino è automatico ma questo è comunque il comando per ripristinarlo:
Ctrl-a :layout attach nome_usato_per_salvare
Possiamo avere e salvare più layout ed elencarli con:
Ctrl-a :layout show
Eventualmente rinominarli (senza argomento mostra il nome di quello in uso):
Ctrl-a :layout title nome_usato_per_salvare
E naturalmente rimuoverlo:
Ctrl-a :layout remove nome_usato_per_salvare
La versione di Debian è compilata da Git ed ha varie opzioni non solitamente presenti, a questa manca ancora <code>layout dump</code> che permette di salvare la disposizione su file di configurazione e renderlo disponibile anche dopo la chiusura della sessione. <br>
Inoltre non sono comandi documentati, per cui date un'occhiata ai [http://git.savannah.gnu.org/cgit/screen.git/tree/src/doc/screen.1#n2262 sorgenti].
=== Copia e incolla ===
La gestione del testo è una delle caratteristiche più importanti e potenti, sebbene sia usabile in un emulatore di terminale e in X, ricordiamoci che screen nasce come applicazione mouseless ed è qundi provvista di tutto (o quasi) ciò che serve per renderla funzionale senza click.
Per copiare del testo si entra in modalità copia:
Ctrl-a [
Quindi ci si muove con le frecce o meglio ancora con i tasti tipici di Vim; vi rimando alla manpage per il comando '''copy''' che elenca e spiega il tutto e riporto solo qualche piccolo esempio.
Supponiamo si voglia copiare la frase precedente. Attiviamo la modalità copia quindi scorriamo nel testo con '''h, j, k, l''' spostando il cursore sulla '''Q''' di "Quindi" e premiamo il tasto '''Space'''; ora sempre con i tasti di movimento raggiungiamo la fine della frase ('''w, b''' scorrono parola per parola e velocizzano l'operazione), possiamo vedere che il testo viene selezionato. Una volta che il cursore raggiungerà '''o.''' di "esempio" premiamo di nuovo '''Space''' che, come è intuibile, fa da marcatore per inizio e fine; sulla statusbar apparirà il messaggio "Copied 195 characters into buffer". Ora abbiamo la nostra frase memorizzata nella selezione, premiamo '''Esc''' o altro tasto (qualsiasi altro tasto che non faccia parte di quelli elencati per le operazioni) per uscire dalla modalità copia, ci spostiamo su un'altra finestra, che sia un prompt bash o un editor, e incolliamo con:
Ctrl-a ]
È un po' macchinoso ma davvero potente, in particolare quando si deve copiare una quantità corposa di testo. <br>
Possiamo salvare la nostra selezione su file senza dover aprire prima un editor. Ripetiamo il procedimento di prima per la copia ma invece di spostarsi altrove e incollare usiamo questa combinazione:
Ctrl-a >
Apparirà il messaggio "Copybuffer written to "/tmp/screen-exchange"" e in tale file avremo la nostra frase. <br>
Il percorso del file <code>/tmp/screen-exchange</code> è modificabile tramite il comando <code>'''bufferfile'''</code>, sia per salvare la selezione altrove sia per incollare da altra fonte; ora vediamo infatti come sfruttare questo file di scambio o attingere da uno differente. <br>
Apriamo Vim (o altro editor) e mettiamolo in modalità inserimento, ora facciamo leggere il file a screen con:
Ctrl-a <
Apparirà il messaggio "Slurped 195 characters into buffer". Quindi incolliamo con  <code>'''Ctrl-a ]'''</code> ottenendo il testo contenuto in <code>/tmp/screen-exchange</code>. <br>
Adesso vogliamo invece incollare nell'editor il contenuto di un file differente, impostiamo quindi il percorso come argomento del comando <code>'''bufferfile'''</code>, lo segnaliamo a screen e incolliamo:
C-a :bufferfile /etc/screenrc
C-a < C-a ]
C-a :bufferfile
L'ultima riga è '''davvero importante''' perché riattiviamo il file predefinito per lo scambio <code>/tmp/screen-exchange</code>, altrimenti utilizzando successivamente <code>Ctrl-a ></code> verrà usato <code>/etc/screenrc</code> e, sebbene non avremo i permessi per scriverci, di certo non lo vogliamo; se il file fosse un altro e ne avessimo accesso in scrittura, questo verrebbe sovrascritto. Usate questo sistema con prudenza.




271

contributi