2000-11-27 04:41:56 +03:00
|
|
|
|
Scrivere scripts per il vfs esterno del Midnight Commander
|
2000-10-19 06:08:30 +04:00
|
|
|
|
(Traduzione a cura di Marco Ciampa (C) GNU 2000 - it@li.org)
|
|
|
|
|
|
2000-10-26 18:00:24 +04:00
|
|
|
|
NOTA IMPORTANTE: ci possono essere ancora alcuni bachi in extfs.
|
2000-10-19 06:08:30 +04:00
|
|
|
|
Buon divertimento.
|
|
|
|
|
|
|
|
|
|
A cominciare dalla versione 3.1 il Midnight Commander comprende il
|
|
|
|
|
cosiddetto extfs, che altri non <20> che un filesystem virtuale. Questo
|
2000-10-26 18:00:24 +04:00
|
|
|
|
sistema consente di creare molto semplicemente nuovi filesystem virtuali
|
2000-10-19 06:08:30 +04:00
|
|
|
|
per MC della GNU.
|
|
|
|
|
|
|
|
|
|
Tale lavoro <20> 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 <20> molto facile:
|
|
|
|
|
Assegnate un suffisso vfs. Per esempio, se avete un file .zip e vorreste
|
|
|
|
|
vedere cosa c'<27> 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 <20> il suffisso, ma <20> possibile chiamare vfs 'uzip'.
|
|
|
|
|
Perch<EFBFBD>? Beh, quello che fa vfs <20> essenzialmente UNzip. UN <20> troppo lungo
|
|
|
|
|
cos<EFBFBD> <20> stato scelto U. Notare che in futuro un filesystem come zip potr<74>
|
|
|
|
|
esistere: prender<65> l'intero albero e creer<65> un file zip da esso. Cos<6F>
|
|
|
|
|
/usr:zip sar<61> 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 <20> la stringa permessi come in ls -l
|
|
|
|
|
NNN <20> il numero di collegamenti
|
|
|
|
|
OOOOOOOO <20> il proprietario (sia UID che nome)
|
|
|
|
|
GGGGGGGG <20> il gruppo (sia GID che nome)
|
|
|
|
|
SSSSSSSS <20> la dimensione del file
|
|
|
|
|
FILENAME <20> il nome del file
|
|
|
|
|
PATH <20> 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 <20> 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 <20> presente, significa:
|
|
|
|
|
|
|
|
|
|
Se i permessi cominciano con l (elle) allora <20> il nome al quale il
|
|
|
|
|
collegamento simbolico punta. Se questo percorso comincia con un prefisso
|
|
|
|
|
vfs di MC allora <20> 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<63> /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
|
2000-11-27 04:41:56 +03:00
|
|
|
|
nella radice dell'archivio [questo <20> sbagliato. l'attuale extfs toglie il
|
2000-10-19 06:08:30 +04:00
|
|
|
|
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<70> 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<63> per cui dovr<76> 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 <20> vuota, mc la canceller<65> 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<65>
|
|
|
|
|
righe di stampa maldefinite. Questo pu<70> fuorviare il programmatore nella
|
|
|
|
|
ricerca dei difetti. Visto che questa routine <20> uno script shell eseguibile
|
|
|
|
|
essa pu<70> 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<63> qui si dar<61> solo qualche nota specificatamente
|
|
|
|
|
sull'uso del File System Virtuale che si <20> 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<6F> la
|
|
|
|
|
prossima linea fa ci<63>. 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<65> ora il nuovo
|
|
|
|
|
file system virtuale per fare cd su di esso come in questo:
|
|
|
|
|
|
|
|
|
|
Open=%cd zip:%d/%p
|
|
|
|
|
|
|
|
|
|
Questa <20> 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 <20> 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'<27> ancora un particolare. La somma di questo <20> 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 <20> 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 <20> tutto. La parte pi<70> dura <20> 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<63>
|
2000-11-27 04:41:56 +03:00
|
|
|
|
quasi tutti i sistemi ne sono provvisti. Si pu<70> usare anche un'altro linguaggio
|
|
|
|
|
di scripting come il perl, se <20> disponibile.
|