README.it 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. Scrivere scripts per il vfs esterno del Midnight Commander
  2. (Traduzione a cura di Marco Ciampa (C) GNU 2000 - it@li.org)
  3. NOTA IMPORTANTE: ci possono essere ancora alcuni bachi in extfs.
  4. Buon divertimento.
  5. A cominciare dalla versione 3.1 il Midnight Commander comprende il
  6. cosiddetto extfs, che altri non è che un filesystem virtuale. Questo
  7. sistema consente di creare molto semplicemente nuovi filesystem virtuali
  8. per MC della GNU.
  9. Tale lavoro è composto di due parti fondamentali:
  10. Modifica di $(libdir)/extfs/extfs.ini.
  11. Creazione di uno script shell/programma per gestire le richieste.
  12. (Nota: $(libdir) dovrebbe essere sostituita con il percorso libdir
  13. corrente memorizzato quando configurato o compilato, come
  14. /usr/local/lib/mc o /usr/lib/mc).
  15. La prima è molto facile:
  16. Assegnate un suffisso vfs. Per esempio, se avete un file .zip e vorreste
  17. vedere cosa c'è dentro di esso, il percorso sarebbe
  18. /qualsiasipercorso/my.zip#uzip/unpercorso/...
  19. Poi basta aggiungere una linea nel file extfs.ini contenente solo quella
  20. estensione. Se il vostro vfs non richiede file di lavoro, aggiungete
  21. ':' alla fine del nome.
  22. In questo esempio, .zip è il suffisso, ma è possibile chiamare vfs 'uzip'.
  23. Perché? Beh, quello che fa vfs è essenzialmente UNzip. UN è troppo lungo
  24. così è stato scelto U. Notare che in futuro un filesystem come zip potrà
  25. esistere: prenderà l'intero albero e creerà un file zip da esso. Così
  26. /usr:zip sarà un file zip contenente l'intero albero /usr.
  27. La seconda potrebbe richiedere un po' di conoscenza di programmazione shell/c:
  28. si deve creare un prefisso di programma (con i permessi di esecuzione) in
  29. $(libdir)/extfs (nel nostro esempio $(libdir)/extfs/uzip).
  30. * Comandi che dovrebbero essere implementati nello script shell
  31. ---------------------------------------------------------------
  32. Ritorno di zero dallo script a completamento avvenuto del comando,
  33. altrimenti diverso da zero per fallimento o comando non supportato.
  34. $libdir/extfs/prefix command [arguments]
  35. * Comando: list nomearchivio
  36. Questo comando dovrebbe elencare il contenuto completo dell'archivio nel seguente
  37. formato (elenco ls -l un po' modificato)
  38. AAAAAAA NNN OOOOOOOO GGGGGGGG SSSSSSSS DATETIME [PATH/]FILENAME [-> [PATH/]FILENAME[/]]]
  39. dove (le cose in [] sono opzionali):
  40. AAAAAAA è la stringa permessi come in ls -l
  41. NNN è il numero di collegamenti
  42. OOOOOOOO è il proprietario (sia UID che nome)
  43. GGGGGGGG è il gruppo (sia GID che nome)
  44. SSSSSSSS è la dimensione del file
  45. FILENAME è il nome del file
  46. PATH è il percorso dalla radice dell'archivio senza la slash iniziale (/)
  47. DATETIME ha uno dei seguenti formati:
  48. Mon DD hh:mm, Mon DD YYYY, Mon DD YYYY hh:mm, MM-DD-YY hh:mm
  49. dove Mon è il nome del mese a tre caratteri in inglese, DD giorno
  50. 1-31, MM mese 01-12, YY anno a due cifre, YYYY anno a quattro cifre,
  51. hh ore e mm minuti.
  52. Se la -> [PATH/]FILENAME parte è presente, significa:
  53. Se i permessi cominciano con l (elle) allora è il nome al quale il
  54. collegamento simbolico punta. Se questo percorso comincia con un prefisso
  55. vfs di MC allora è un collegamento simbolico verso l'altro filesystem virtuale
  56. (se si vuole specificare un percorso dalla radice locale, si usa local:/percorso
  57. invece di /percorso perchè /percorso significa dalla radice dell'archivio
  58. elencato).
  59. Se i permessi non cominciano con l ma un numero di collegamenti maggiore di
  60. uno allora significa che questo file dovrebbe essere collegato 'hard' con
  61. l'altro file.
  62. * Comando: copyout nomearchivio nomefilememorizzato estraea
  63. Questo dovrebbe estrarre dall'archivio nomearchivio nel file di
  64. nome nomefilememorizzato (possibilmente con percorso se non collocato
  65. nella radice dell'archivio [questo è sbagliato. l'attuale extfs toglie il
  66. percorso! -- pavel@ucw.cz]) nel file estraea.
  67. * Comando: copyin nomearchive nomefilememorizzato filesorgente
  68. Questo dovrebbe aggiungere a nomearchivio il filesorgente con
  69. nome nomefilememorizzato nell'archivio.
  70. Nota importante: nomearchivio negli esempi suddetti può non avere
  71. l'estensione che ci si aspetta, come potrebbe succedere che il nomearchivio
  72. sia qualcosa del tipo /tmp/f43513254 o qualsiasi altra cosa.
  73. Ad alcuni archiviatori non piace ciò per cui dovrò trovare qualche
  74. artifizio.
  75. * Comando: rm nomearchivio nomefilememorizzato
  76. Questo dovrebbe rimuovere il nomefilememorizzato da nomearchivio.
  77. * Comando: mkdir nomearchivio nomedir
  78. Questo dovrebbe creare una nuova directory chiamata nomedir dentro
  79. nomearchivio.
  80. * Comando: rmdir nomearchivio nomedir
  81. Questo dovrebbe rimuovere un'esistente directory nomedir. Se la directory
  82. non è vuota, mc la cancellerà ricorsivamente (possibilmente avvertendo).
  83. * Comando: run
  84. Nondocumentato :-)
  85. ---------------------------------------------------------
  86. Non dimenticate di impostare questo file come eseguibile (con chmod 755
  87. QuestoFile per esempio)
  88. Per una struttura generale di eseguibile vedere i filesystems simili
  89. ai vostri.
  90. ---------------------------------------------------------
  91. Se nel costruire queste routine verranno fatti degli errori mc non mostrerà
  92. righe di stampa maldefinite. Questo può fuorviare il programmatore nella
  93. ricerca dei difetti. Visto che questa routine è uno script shell eseguibile
  94. essa può essere lanciata dalla riga di comando indipendentemente da mc ed il
  95. risultato mostrato in console o redirezionato in un file.
  96. * Messa in uso
  97. ----------------------------------------------------------
  98. Il file .mc.ext nella directory home e nella directory utente di mc
  99. (normalmente /usr/local/lib/mc), contiene le istruzioni per le operazioni
  100. sui files a seconda dell'estensione. E' ben documentato in altri file in
  101. questa distribuzione perciò qui si darà solo qualche nota specificatamente
  102. sull'uso del File System Virtuale che si è appena creato.
  103. Vi sono voci in .mc.ext che definiscono alcune operazioni che possono essere
  104. svolte su un file da un pannello di mc. Tipicamente sono annotate con un
  105. simbolo di cancelletto ed un'estensione come questa:
  106. # zip
  107. Vi deve essere un modo per trovare il file per estensione così la
  108. prossima linea fa ciò. Essenzialmente dichiara: "identifica la stringa ".zip"
  109. o (|) ".ZIP" alla fine del nome del file:
  110. regex/\.(zip|ZIP)$
  111. Le operazioni seguono. Esse devono essere indentate da almeno uno spazio oppure
  112. un tabulatore. In particolare l'operazione di apertura (Open) userà ora il nuovo
  113. file system virtuale per fare cd su di esso come in questo:
  114. Open=%cd zip:%d/%p
  115. Questa è la linea usata quando un file viene evidenziato in un pannello e
  116. l'utente preme <Invio>. Il contenuto dell'archivio dovrebbe essere come
  117. se si fosse in una vera directory e potesse essere manipolata in tal modo.
  118. Il resto della linea riguarda l'uso del tasto di Vista F3:
  119. View=%view{ascii} unzip -v %f
  120. con un'icona opzionale per X:
  121. Icon=zip.xpm
  122. e con un'operazione per estrarre il contenuto del file preso da una selezione
  123. file a menu:
  124. Extract=unzip %f '*'
  125. Questo è solo un esempio. La voce corrente per i file .zip ha una selezione
  126. menu di 'Unzip' che potrebbe essere usata al posto di 'Extract'. Cosa va qui
  127. dipende da quali voci si hanno o si aggiungono al menu di sistema ed inoltre
  128. c'è ancora un particolare. La somma di questo è nella voce .mc.ext:
  129. # zip
  130. regex/\.(zip|ZIP)$
  131. Open=%cd zip:%d/%p
  132. View=%view{ascii} unzip -v %f
  133. Icon=zip.xpm
  134. Extract=unzip %f '*'
  135. Aggiungere una voce come questa al file .mc.ext nella directory home dell'utente.
  136. Se volete che altri la vedano, aggiungetela nel file mc.ext nella directory di
  137. sistema di mc spesso in /usr/local/lib/mc/mc.ext. Notare che questo file non
  138. ha un punto iniziale.
  139. Una volta che tutto questo è fatto e le cose sono al loro posto, uscite da mc
  140. se lo state usando e fatelo ripartire dimodoche possa prendere le nuove
  141. impostazioni.
  142. Questo è tutto. La parte più dura è fare una funzione di elenco che ordini
  143. l'uscita di un comando di listato di sistema e lo converta in un formato che
  144. permetta ad mc di poterlo usare. Attualmente viene usato awk (o gawk) perché
  145. quasi tutti i sistemi ne sono provvisti. Si può usare anche un'altro linguaggio
  146. di scripting come il perl, se è disponibile.