123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- 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.
|