[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 143.   Libreria Readline

Diversi programmi che funzionano in modo interattivo mostrando un invito all'inserimento dei comandi (un prompt) e offrendo una riga di comando, sfruttano la libreria Readline (1) per la gestione di uno storico dei comandi e per offrire altre funzionalità come il completamento automatico.

La libreria Readline è sottoposta alle condizioni della licenza GNU GPL, pertanto i programmi che la incorporano vengono distribuiti alle stesse condizioni.

Questa libreria offre funzionalità così raffinate che spesso chi utilizza programmi interattivi che se ne avvalgono, si limita a sfruttarne una porzione minima. Questo capitolo offre solo una visione limitata delle funzionalità disponibili; chi desidera approfondire lo studio può cercare la sua documentazione che potrebbe essere disponibile nella pagina di manuale readline(3), o in sua mancanza nella documentazione della shell Bash, che potrebbe essere disponibile come info bash oppure bash(1).

Nel capitolo vengono mostrate diverse tabelle che descrivono l'uso dei comandi comuni disponibili; si osservi però che molte cose possono essere ridefinite attraverso la configurazione che avviene normalmente attraverso il file ~/.readline.

143.1   Comandi

Quando la configurazione della libreria Readline è realizzata nel modo corretto, i tasti freccia consentono di scorrere all'interno dello storico e all'interno di un comando per consentirne la modifica, così come altri tasti di spostamento funzionano in modo intuitivo; diversamente sono disponibili delle combinazioni di tasti standard, secondo lo schema delle tabelle successive.

Tabella 143.1. Alcuni comandi di spostamento e affini.

Comando Significato mnemonico Descrizione
[Ctrl a] Sposta il cursore all'inizio della riga. Di solito si predispone la configurazione in modo che il tasto [Inizio] svolga questa funzione.
[Ctrl e] end Sposta il cursore alla fine della riga. Di solito si predispone la configurazione in modo che il tasto [Fine] svolga questa funzione.
[Ctrl f] forward Sposta il cursore a destra di un carattere. Di solito si predispone la configurazione in modo che il tasto [freccia destra] svolga questa funzione.
[Ctrl b] backward Sposta il cursore a sinistra di un carattere. Di solito si predispone la configurazione in modo che il tasto [freccia sinistra] svolga questa funzione.
[Ctrl l] Ripulisce lo schermo.

Tabella 143.2. Alcuni comandi per la modifica del testo della riga di comando.

Comando Significato mnemonico Descrizione
[Ctrl d] delete Cancella il carattere sopra il cursore. Di solito si predispone la configurazione in modo che il tasto [Canc] svolga questa funzione.
[Backspace] Cancella il carattere a sinistra del cursore.
[Ctrl v] verbatim Dopo questa sequenza è possibile inserire un carattere in modo letterale, quando non è possibile farlo in condizioni normali.

Tabella 143.3. Alcuni comandi per l'utilizzo dello storico. Vale la pena di precisare che il termine «storico», in un contesto come questo, intende fare riferimento a un «archivio storico» o un «registro storico» di qualcosa.

Comando Significato mnemonico Descrizione
[Invio] Conferma l'inserimento del contenuto della riga, anche se il cursore non si trova alla fine della stessa. Ciò che viene inserito è accumulato automaticamente nello storico.
[Ctrl p] previous Recupera dallo storico l'ultimo comando inserito o comunque quello precedente a quello che si vede sulla riga di comando. Di solito si predispone la configurazione in modo che il tasto [freccia su] svolga questa funzione.
[Ctrl n] next Scorre in avanti l'elenco dei comandi nello storico. Di solito si predispone la configurazione in modo che il tasto [freccia giù] svolga questa funzione.
[Ctrl r] search backward Inizia la ricerca di un comando all'indietro.

143.2   Completamento automatico

Durante l'inserimento di un comando, si può usare il tabulatore, [Tab], per ottenere il completamento di questo in base a qualche criterio, che dipende dall'applicazione in cui la libreria viene usata.

Generalmente, la pressione del tasto [Tab] porta al completamento di qualcosa, se il contesto non permette di avere dubbi, altrimenti il completamento può essere parziale o imposibile. Quando il completamento è ambiguo, la ripetizione del comando produce la visualizzazione dell'elenco delle alternative disponibili.

143.3   Configurazione

La configurazione usata dalla libreria Readline avviene normalmente attraverso il file /etc/inputrc in modo generale, mentre per i singoli utenti attraverso il file ~/.inputrc.

La cosa più comune che viene definita nel file di configurazione è l'uso di tasti per lo spostamento del cursore e per lo scorrimento nello storico, oltre alle combinazioni già previste. L'esempio seguente si riferisce alla configurazione necessaria per l'uso ottimale di una console virtuale su un elaboratore con architettura x86:

# Abilita l'inserimento di caratteri a 8 bit.
set meta-flag           on

# Disabilita la conversione dei caratteri con l'ottavo bit attivo
# in sequenze di escape.
set convert-meta        off

# Abilita la visualizzazione di caratteri a 8 bit.
set output-meta         on

# Modifica l'abbinamento con i tasti rispetto a determinati comportamenti.
"\e[1~": beginning-of-line      # [home]                era C-a
"\e[4~": end-of-line            # [fine]                era C-e
"\e[3~": delete-char            # [canc]                era C-d
"\e[5~": backward-word          # [pagina su]           era M-b
"\e[6~": forward-word           # [pagina giù]          era M-f

Come si intuisce, non sono stati abbinati i tasti [freccia sinistra] e [freccia destra], che in condizioni normali funzionano al pari delle combinazioni [Ctrl b] e [Ctrl f].

143.4   Utilizzo di «cle»

Il programma cle, (2) ovvero Command line editor, è un involucro per i programmi interattivi che funzionano attraverso una riga di comando, ma non dispongono di funzionalità simili a quelle offerte dalla libreria Readline:

cle [opzioni] programma [argomenti]

In pratica, si usa cle per avviare un altro programma, che può avere bisogno dei suoi argomenti, controllando l'inserimento dei dati provenienti dallo standard input.

Si può tentare di capire cosa fa questo programma con un esempio realizzato con comandi comuni:

tee prova[Invio]

Questo comando, che per il momento non si avvale di cle, riceve i dati dallo standard input, li inserisce tali e quali nel file prova e li emette nuovamente attraverso lo standard output:

Ciao,[Invio]

Ciao,

come stai?[Invio]

come stai?

[Ctrl d]

Al termine il file prova contiene esattamente il testo:

Ciao,
come stai?

Durante l'inserimento del testo, non è possibile correggere la riga se non a partire dalla cancellazione dalla fine; con l'aiuto di cle si ottiene tutta la potenza della libreria Readline, compresa la gestione dello storico:

cle tee prova[Invio]

...

In questo caso, lo storico viene accumulato precisamente nel file ~/.tee_history, pertanto si intuisce che controllando un altro programma si ottiene un file con il prefisso che richiama il nome dello stesso.

Bisogna tenere presente però che cle non è perfetto per tutte le circostanze: prima di tutto è necessario che il programma che viene controllato riceva i dati dallo standard input, perché se usa una tecnica differente, il meccanismo non può funzionare; inoltre, se il programma controllato mostra un invito, quando si scorre lo storico questo viene eliminato, perché cle non ne è consapevole.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Readline GNU   GNU GPL

2) Cle   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome libreria_readline.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!