271
contributi
(yay!) |
(almost done) |
||
Riga 155: | Riga 155: | ||
Mentre per lo split verticale: | Mentre per lo split verticale: | ||
Ctrl-a | | 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: | 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: | ||
Riga 163: | Riga 164: | ||
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. | 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. | ||
Notare che lo split prende il focus ma non crea o sceglie alcuna finestra, solo lo spazio dove contenere qualcosa. | |||
In caso volessimo rimuovere la regione in focus useremo: | In caso volessimo rimuovere la regione in focus useremo: | ||
Riga 227: | Riga 229: | ||
C-a :bufferfile | 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 | 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 cautela. | ||
Oltre a questo possiamo fare un dump di ciò che è contenuto nello schermo (la parte visibile del buffer) senza bisogno di scroll: | |||
Ctrl-a h | |||
Apparirà il messaggio "Screen image written to hardcopy.n"", dove '''n''' sarà il numero della finestra; il file è creato in PWD, il path da dove è stato avviato screen. Se l'opzione '''hardcopy_append on''' non è specificata, il file viene sovrascritto ad ogni utilizzo. | |||
== Configurazione == | == Configurazione == | ||
La configurazione avviene tramite il file <code>~/.screenrc</code> o altro percorso se specificato con l'opzione '''-c'''. <br> | |||
Di seguito riporto il mio di esempio con i relativi commenti, come vedete sono state sfruttate combinazioni esistenti e non per rendere piacevole e veloce l'uso quotidiano. | |||
<pre> | |||
# utilizzando alcune applicazioni, come ad esempio Vim, otterremo nuovamente la visualizzazione di ciò che c'era prima | |||
# come accade normalmente in un emulatore di terminale, senza questa opzione si tornerà al prompt ma Vim o chi per lui | |||
# rimarrà nello schermo, come invece accade normalmente in una tty | |||
altscreen on | |||
# imposto la variabile d'ambiente TERM, necessario se si usa un terminale con 256 colori, se non specificato TERM sarà | |||
# uguale a ''screen'' e si avranno problemi vari; d'altro canto se usato in tty causerà altri problemi, in questo caso | |||
# uso un file di configurazione apposito | |||
term screen-256color | |||
# disabilito il flow control | |||
# nella maggior parte delle occasioni l'uso del prefisso ''def'' applica un certo comando in modo globale | |||
# controllare la manpage per i dettagli | |||
defflow off | |||
# gestisce i login degli utenti in ogni pseudo terminale attraverso il file /run/utmp | |||
deflogin on | |||
# abilito il monitoraggio di attività delle finestre | |||
(i messaggi di attività spiegati in [http://guide.debianizzati.org/index.php?title=GNU/Screen#Scorciatoie_e_messaggi]) | |||
defmonitor on | |||
# la quantità di righe salvate nel buffer | |||
defscrollback 7777 | |||
# UTF-8 everywhere! | |||
defutf8 on | |||
# normalmente quando un processo si blocca, screen attende che questo resusciti e nel frattempo non accetta più alcun input | |||
# pensate ad una connessione SSH che cade e il terminale non accetta più comandi, è decisamente noioso; questa opzione fa | |||
# sì che la tal finestra venga considerata bloccata dopo un secondo e si possa continuare ad usare la sessione | |||
defnonblock on | |||
# il tempo di visualizzazione dei messaggi di attività è impostato a un secondo | |||
msgwait 1 | |||
# disabilito il noioso messaggio di benvenuto in apertura | |||
startup_message off | |||
# disabilito quegli orribili flash in reverse color della visual bell | |||
vbell off | |||
# quando si usa <code>Ctrl-a h</code> appende nuovo testo al file hardcopy.n anziché sovrascriverlo | |||
hardcopy_append on | |||
# salvo la disposizione degli split per la sessione | |||
layout save fugu | |||
# se si utilizza un emulatore di terminale con falsa trasparenza, la applica alle finestre e ai programmi contenuti | |||
# (opportunatamente configurati) | |||
#defbce on | |||
# e di conseguenza la variabile d'ambiente TERM adatta | |||
#term screen-256color-bce | |||
# blocco l'accesso a screen dopo 15 minuti di inattività, equivale a <code>Ctrl-a x</code> | |||
# l'unico output visibile sarà | |||
# Screen used by skizzHG <skizzhg> on jackinthebox. | |||
# Password: | |||
idle 900 lockscreen | |||
# messaggio di attività personalizzato | |||
activity "someone is squeaking in #%n %t" | |||
# voglio che i colori del testo nel prompt, i messaggi di attività, la selezione del testo in copy mode e la barra | |||
# verticale dello split (quest'ultima solo per quanto riguarda il background, quindi nero) siano blu su campo nero | |||
sorendition Bk | |||
# l'aspetto delle barre che appaiono con uno o più split: nera, con testo blu per la finestra in focus e bianco | |||
# per quella non in focus, testo centrato | |||
caption splitonly "%{= kw}%47=%?%F%{= kB}%?%t" | |||
# l'aspetto della statusbar: nera con testo blu per la finestra in focus, racchiuso tra parentesi quadre verdi, | |||
# e foreground del terminale per le altre, ora e data | |||
# spiegarlo è troppo complicato, la sezione STRING ESCAPES del manuale spiega tutto | |||
# questo non significa sia comprensibile o semplice ma ci sono un sacco di esempi in rete dai quali prendere spunti | |||
hardstatus alwayslastline "%{= kB}%{= 9}%?%-w%?%{G}[%{B}%n %t%?(%u)%?%{G}]%{d}%+w%?%?%= %{g}%c %D %d-%m-%y" | |||
# le scorciatoie che non hanno un argomento vengono eliminate, disfiamoci di roba fastidiosa che potrebbe | |||
# chiudere, staccare, sospendere o uccidere per sbaglio | |||
bind \\ | |||
bind d | |||
bind k | |||
bind K | |||
bind ^k | |||
bind z | |||
bind ^z | |||
# voglio il focus delle regioni in senso antiorario | |||
bind ^I focus up | |||
# uso i tasti solitamente associati al flow control per muovermi tra le regioni | |||
bind q focus top | |||
bind s focus bottom | |||
# avendo per esempio tre regioni, una grossa in basso e due affiancate in alto, con queste tre combinazioni | |||
# posso muovermi in due sensi; con <code>Ctrl-a TAB</code> vado in quello in alto a destra, mentre con | |||
# <code>Ctrl-a q</code> e <code>Ctrl-a s</code> mi sposto tra quello in alto a sinistra e quello in basso | |||
# ridimensionamento delle regioni | |||
bind + resize +3 | |||
bind - resize -3 | |||
bind = resize = | |||
bind * resize max | |||
bind / resize 79% | |||
# oltre ad appendere al file, come specificato prima "hardcopy_append on", voglio salvare in un file diverso | |||
# con '''-h''' salvo l'intero buffer invece del solo schermo | |||
# c'è da notare che screen calcola come buffer l'intero ammontare di righe definite con "defscrollback" | |||
# per cui se questo non è pieno si avrà un tot di spazio vuoto all'inizio | |||
bind h hardcopy -h $HOME/Desktop/screenbuffa | |||
# se si usa <code>Ctrl-a numero</code> per spostarsi tra le finestre, di default ce ne sono solo dieci (da 0 a 9) | |||
# in questo modo creo un attivatore aggiuntivo, il punto, e aggiungo altre dieci finestre | |||
# quindi con <code>Ctrl-a . 1</code> andrò alla finestra 11 | |||
bind -c xwin 0 select 10 | |||
bind -c xwin 1 select 11 | |||
bind -c xwin 2 select 12 | |||
bind -c xwin 3 select 13 | |||
bind -c xwin 4 select 14 | |||
bind -c xwin 5 select 15 | |||
bind -c xwin 6 select 16 | |||
bind -c xwin 7 select 17 | |||
bind -c xwin 8 select 18 | |||
bind -c xwin 9 select 19 | |||
bind . command -c xwin | |||
# i programmi che uso più spesso sono associati a comode scorciatoie | |||
# la sintassi è la stessa usabile al prompt bash, con ''screen'' dico di aprire una finestra contenente una shell | |||
# il numero indica che voglio aprirla con quel dato ordine (questione di muscle memory :) | |||
# ''-t'' e la parola che segue assegnano un titolo alla finestra, dove non c'è viene usato il nome del processo | |||
bind E screen 4 mutt -F $HOME/.config/mailman/mutt/muttrc | |||
bind H screen htop | |||
bind I screen 3 irssi | |||
bind M screen -t muzik 6 mplayer -slave -input file=$HOME/.mplayer/muzikfifo -shuffle -playlist $HOME/allmuzik | |||
bind T screen -t rTorr 7 rtorrent | |||
bind V screen 5 vim | |||
bind W screen w3m http://it.search.yahoo.com | |||
# automatizzo certe operazioni all'apertura di screen, consideratelo come il file di startup di un DE/WM | |||
# apro due shell e il file manager | |||
screen 0 bash | |||
screen 1 bash | |||
screen 2 mc -x | |||
# divido lo schermo in due regioni, quella superiore prende il focus e in essa ci apro un'altra shell | |||
split | |||
screen -t l10n 9 | |||
# mi sposto nella regione in basso, la ridimensiono e in essa vi seleziono la finestra zero | |||
focus bottom | |||
resize 79% | |||
select 0 | |||
</pre> | |||
Dopo aver fatto modifiche al file di configurazione possiamo ricaricarlo senza chiudere la sessione: | |||
Ctrl-a :source .screenrc | |||
== Uso avanzato e riga di comando == | |||
Come si è visto all'inizio, ci sono alcune opzioni usabili da riga di comando per controllare la sessione e inviare istruzioni anche dall'esterno, sia comandi di screen sia altri programmi. Vediamo qualche esempio. | |||
Seleziona una finestra (accetta sia numero che nome): | |||
$ screen -X select 1 | |||
Rinumera finestra (-p accetta sia numero che nome): | |||
~$ screen -p 9 -X number 11 | |||
Rinomina finestra: | |||
$ screen -p 9 -X title zut | |||
Il comando '''stuff''' invia una stringa come input e ci permette di eseguire comandi esterni. | |||
Esegue il comando '''ls''' (^M si ottiene con <code>ctrl-v Return</code>): | |||
$ screen -p 0 -X stuff 'ls ^M' | |||
Alternativa (utile per script o altre situazioni in cui ''^M'' non è applicabile): | |||
$ screen -p 0 -X stuff $'ls\n' | |||
Il comando '''at''' esegue un comando su più finestre. | |||
Esegue il comando '''ls''' a tutte le finestre chiamate bash: | |||
$ screen -X at bash# stuff 'ls ^M' | |||
Esegue il comando '''ls''' a tutte le finestre chiamate bash e alla finestra l10n: | |||
$ screen -X eval 'at bash# stuff "ls ^M"' 'at l10n# stuff "ls ^M"' | |||
Esegue il comando '''ls''' alle finestre zero e nove: | |||
$ screen -X eval 'at 0# stuff "ls ^M"' 'at 9# stuff "ls ^M"' | |||
Esegue il comando '''ls''' a tutte le finestre: | |||
$ screen -X at \# stuff 'ls ^M' | |||
== Risorse == | |||
* http://dotfiles.org/.screenrc | |||
* http://aperiodic.net/screen/ | |||
contributi