205 строки
8.0 KiB
Plaintext
205 строки
8.0 KiB
Plaintext
Scrivere scripts per il vfs esterno di Midnight Commander
|
|
(Traduzione a cura di Marco Ciampa (C) GNU 2000 - it@li.org)
|
|
|
|
NOTA IMPORTANTE: ci possono essere ancora alcuni bachi in extfs.
|
|
Buon divertimento.
|
|
|
|
A cominciare dalla versione 3.1 il Midnight Commander comprende il
|
|
cosiddetto extfs, che altri non ш che un filesystem virtuale. Questo
|
|
sistema consente di creare molto semplicemente nuovi filesystem virtuali
|
|
per MC della GNU.
|
|
|
|
Tale lavoro ш composto di due parti fondamentali:
|
|
|
|
Modifica di $(libdir)/extfs/extfs.ini.
|
|
Creazione di uno script shell/programma per gestire le richieste.
|
|
(Nota: $(libdir) dovrebbe essere sostituita con il percorso libdir
|
|
corrente memorizzato quando configurato o compilato, come
|
|
/usr/local/lib/mc o /usr/lib/mc).
|
|
|
|
La prima ш molto facile:
|
|
Assegnate un suffisso vfs. Per esempio, se avete un file .zip e vorreste
|
|
vedere cosa c'ш dentro di esso, il percorso sarebbe
|
|
|
|
/qualsiasipercorso/my.zip#uzip/unpercorso/...
|
|
|
|
Poi basta aggiungere una linea nel file extfs.ini contenente solo quella
|
|
estensione. Se il vostro vfs non richiede file di lavoro, aggiungete
|
|
':' alla fine del nome.
|
|
|
|
In questo esempio, .zip ш il suffisso, ma ш possibile chiamare vfs 'uzip'.
|
|
Perchщ? Beh, quello che fa vfs ш essenzialmente UNzip. UN ш troppo lungo
|
|
cosь ш stato scelto U. Notare che in futuro un filesystem come zip potrр
|
|
esistere: prenderр l'intero albero e creerр un file zip da esso. Cosь
|
|
/usr:zip sarр un file zip contenente l'intero albero /usr.
|
|
|
|
La seconda potrebbe richiedere un po' di conoscenza di programmazione shell/c:
|
|
si deve creare un prefisso di programma (con i permessi di esecuzione) in
|
|
$(libdir)/extfs (nel nostro esempio $(libdir)/extfs/uzip).
|
|
|
|
|
|
* Comandi che dovrebbero essere implementati nello script shell
|
|
---------------------------------------------------------------
|
|
|
|
Ritorno di zero dallo script a completamento avvenuto del comando,
|
|
altrimenti diverso da zero per fallimento o comando non supportato.
|
|
|
|
$libdir/extfs/prefix command [arguments]
|
|
|
|
* Comando: list nomearchivio
|
|
|
|
Questo comando dovrebbe elencare il contenuto completo dell'archivio nel seguente
|
|
formato (elenco ls -l un po' modificato)
|
|
|
|
AAAAAAA NNN OOOOOOOO GGGGGGGG SSSSSSSS DATETIME [PATH/]FILENAME [-> [PATH/]FILENAME[/]]]
|
|
|
|
dove (le cose in [] sono opzionali):
|
|
|
|
AAAAAAA ш la stringa permessi come in ls -l
|
|
NNN ш il numero di collegamenti
|
|
OOOOOOOO ш il proprietario (sia UID che nome)
|
|
GGGGGGGG ш il gruppo (sia GID che nome)
|
|
SSSSSSSS ш la dimensione del file
|
|
FILENAME ш il nome del file
|
|
PATH ш il percorso dalla radice dell'archivio senza la slash iniziale (/)
|
|
DATETIME ha uno dei seguenti formati:
|
|
Mon DD hh:mm, Mon DD YYYY, Mon DD YYYY hh:mm, MM-DD-YY hh:mm
|
|
|
|
dove Mon ш il nome del mese a tre caratteri in inglese, DD giorno
|
|
1-31, MM mese 01-12, YY anno a due cifre, YYYY anno a quattro cifre,
|
|
hh ore e mm minuti.
|
|
|
|
Se la -> [PATH/]FILENAME parte ш presente, significa:
|
|
|
|
Se i permessi cominciano con l (elle) allora ш il nome al quale il
|
|
collegamento simbolico punta. Se questo percorso comincia con un prefisso
|
|
vfs di MC allora ш un collegamento simbolico verso l'altro filesystem virtuale
|
|
(se si vuole specificare un percorso dalla radice locale, si usa local:/percorso
|
|
invece di /percorso perchш /percorso significa dalla radice dell'archivio
|
|
elencato).
|
|
|
|
Se i permessi non cominciano con l ma un numero di collegamenti maggiore di
|
|
uno allora significa che questo file dovrebbe essere collegato 'hard' con
|
|
l'altro file.
|
|
|
|
* Comando: copyout nomearchivio nomefilememorizzato estraea
|
|
|
|
Questo dovrebbe estrarre dall'archivio nomearchivio nel file di
|
|
nome nomefilememorizzato (possibilmente con percorso se non collocato
|
|
nella radice dell'archivio [questo ш sbagliato. extfs corrente toglie il
|
|
percorso! -- pavel@ucw.cz]) nel file estraea.
|
|
|
|
* Comando: copyin nomearchive nomefilememorizzato filesorgente
|
|
|
|
Questo dovrebbe aggiungere a nomearchivio il filesorgente con
|
|
nome nomefilememorizzato nell'archivio.
|
|
|
|
Nota importante: nomearchivio negli esempi suddetti puЄ non avere
|
|
l'estensione che ci si aspetta, come potrebbe succedere che il nomearchivio
|
|
sia qualcosa del tipo /tmp/f43513254 o qualsiasi altra cosa.
|
|
Ad alcuni archiviatori non piace ciЄ per cui dovrЄ trovare qualche
|
|
artifizio.
|
|
|
|
* Comando: rm nomearchivio nomefilememorizzato
|
|
|
|
Questo dovrebbe rimuovere il nomefilememorizzato da nomearchivio.
|
|
|
|
* Comando: mkdir nomearchivio nomedir
|
|
|
|
Questo dovrebbe creare una nuova directory chiamata nomedir dentro
|
|
nomearchivio.
|
|
|
|
* Comando: rmdir nomearchivio nomedir
|
|
|
|
Questo dovrebbe rimuovere un'esistente directory nomedir. Se la directory
|
|
non ш vuota, mc la cancellerр ricorsivamente (possibilmente avvertendo).
|
|
|
|
* Comando: run
|
|
|
|
Nondocumentato :-)
|
|
|
|
---------------------------------------------------------
|
|
|
|
Non dimenticate di impostare questo file come eseguibile (con chmod 755
|
|
QuestoFile per esempio)
|
|
|
|
Per una struttura generale di eseguibile vedere i filesystems simili
|
|
ai vostri.
|
|
|
|
---------------------------------------------------------
|
|
|
|
Se nel costruire queste routine verranno fatti degli errori mc non mostrerр
|
|
righe di stampa maldefinite. Questo puЄ fuorviare il programmatore nella
|
|
ricerca dei difetti. Visto che questa routine ш uno script shell eseguibile
|
|
essa puЄ essere lanciata dalla riga di comando indipendentemente da mc ed il
|
|
risultato mostrato in console o redirezionato in un file.
|
|
|
|
* Messa in uso
|
|
----------------------------------------------------------
|
|
Il file .mc.ext nella directory home e nella directory utente di mc
|
|
(normalmente /usr/local/lib/mc), contiene le istruzioni per le operazioni
|
|
sui files a seconda dell'estensione. E' ben documentato in altri file in
|
|
questa distribuzione perciЄ qui si darр solo qualche nota specificatamente
|
|
sull'uso del File System Virtuale che si ш appena creato.
|
|
|
|
Vi sono voci in .mc.ext che definiscono alcune operazioni che possono essere
|
|
svolte su un file da un pannello di mc. Tipicamente sono annotate con un
|
|
simbolo di cancelletto ed un'estensione come questa:
|
|
|
|
# zip
|
|
|
|
Vi deve essere un modo per trovare il file per estensione cosь la
|
|
prossima linea fa ciЄ. Essenzialmente dichiara: "identifica la stringa ".zip"
|
|
o (|) ".ZIP" alla fine del nome del file:
|
|
|
|
regex/\.(zip|ZIP)$
|
|
|
|
Le operazioni seguono. Esse devono essere indentate da almeno uno spazio oppure
|
|
un tabulatore. In particolare l'operazione di apertura (Open) userр ora il nuovo
|
|
file system virtuale per fare cd su di esso come in questo:
|
|
|
|
Open=%cd zip:%d/%p
|
|
|
|
Questa ш la linea usata quando un file viene evidenziato in un pannello e
|
|
l'utente preme <Invio>. Il contenuto dell'archivio dovrebbe essere come
|
|
se si fosse in una vera directory e potesse essere manipolata in tal modo.
|
|
Il resto della linea riguarda l'uso del tasto di Vista F3:
|
|
|
|
View=%view{ascii} unzip -v %f
|
|
|
|
con un'icona opzionale per X:
|
|
|
|
Icon=zip.xpm
|
|
|
|
e con un'operazione per estrarre il contenuto del file preso da una selezione
|
|
file a menu:
|
|
|
|
Extract=unzip %f '*'
|
|
|
|
Questo ш solo un esempio. La voce corrente per i file .zip ha una selezione
|
|
menu di 'Unzip' che potrebbe essere usata al posto di 'Extract'. Cosa va qui
|
|
dipende da quali voci si hanno o si aggiungono al menu di sistema ed inoltre
|
|
c'ш ancora un particolare. La somma di questo ш nella voce .mc.ext:
|
|
|
|
# zip
|
|
regex/\.(zip|ZIP)$
|
|
Open=%cd zip:%d/%p
|
|
View=%view{ascii} unzip -v %f
|
|
Icon=zip.xpm
|
|
Extract=unzip %f '*'
|
|
|
|
Aggiungere una voce come questa al file .mc.ext nella directory home dell'utente.
|
|
Se volete che altri la vedano, aggiungetela nel file mc.ext nella directory di
|
|
sistema di mc spesso in /usr/local/lib/mc/mc.ext. Notare che questo file non
|
|
ha un punto iniziale.
|
|
|
|
Una volta che tutto questo ш fatto e le cose sono al loro posto, uscite da mc
|
|
se lo state usando e fatelo ripartire dimodoche possa prendere le nuove
|
|
impostazioni.
|
|
|
|
Questo ш tutto. La parte pi∙ dura ш fare una funzione di elenco che ordini
|
|
l'uscita di un comando di listato di sistema e lo converta in un formato che
|
|
permetta ad mc di poterlo usare. Attualmente viene usato awk (o gawk) perchщ
|
|
quasi tutti i sistemi ne sono provvisti. Se ш disponibile un'altro linguaggio
|
|
di scripting, come il perl, esso puЄ anche essere utilizzato.
|