mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 12:56:51 +03:00
205 lines
8.0 KiB
Plaintext
205 lines
8.0 KiB
Plaintext
Scrivere scripts per il vfs esterno del 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. l'attuale extfs 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. Si può usare anche un'altro linguaggio
|
|
di scripting come il perl, se è disponibile.
|