Tutti i Tags
Da BUC Wiki.
Per poter meglio comprendere questa guida è necessario prima capire come va scritto un qualunque script di BUC: il modo migliore resta sempre un esempio, quindi ecco qua :)
<?xml version="1.0"?> <config> </config>
Piuttosto scarno, questo piccolo scriptino va salvato in un file di testo con estensione .mc, per poi essere aperto tramite BUC con un doppio click (se buc è stato installato correttamente) oppure con un comando da terminale del tipo
~$ buc nomescript.mc
Tutti gli script di buc seguono regole di sintassi ben precise, in gran misura simili a quelle di un file xml:
- Tutti i file devono iniziare con <?xml version="1.0"?>
- Ogni tag aperto va anche chiuso (ad eccezione dei tag "vuoti", di questo tipo: <config/>
- Tutti i nomi dei tag sono case sensitive, quindi un testo del genere <config> </ConFig> genererà un errore.
- I tag possono avere dei parametri, rappresentati nella forma <tag nomeparametro="valoreparametro"/>
In aggiunta a questi vincoli, BUc aggiunge alcune limitazioni ed alcune libertà:
- Tutti i tag devono essere scritti con caratteri minuscoli, altrimenti non verranno riconosciuti anche se terminano correttamente
- I parametri possono essere espressi non solo nella forma <tag nomeparametro="valoreparametro">, ma anche come sottotag di un elemento. Ad esempio, scrivendo: <tag> <nomeparametro> valoreparametro </nomeparametro> </tag>
- Non è possibile "inventarsi" i tag e gli attributi, ma è necessario leggere questo file per capire quali combinazioni di tag/attributo sono ammesse e quali no... questo per ovvie ragioni, altrimenti come farebbe buc a capire a cosa servono i tag che avete specificato?
- Esiste un attributo "nascosto", chiamato "code", che altro non è se non il contenuto di un tag... mi spiego meglio: in questo caso, ad esempio: <tag> valorecode </tag> il contenuto del tag, valorecode, in realtà è interpretato come il valore del parametro "code": in questo modo, il tag appena descritto è completamente equivalente a questa forma: <tag code="valorecode" />. Quando nel tag esistono altri parametri espressi come sottotag, diventa necessario specificare anche il tag <code> per rendere funzionante il tutto.
Spero di essere stato chiaro, in ogni caso prima di lasciarvi contemplare i vari tag/attributi vi lascio qualche esempio chiarificatore (spero):
<?xml version="1.0"?> <config> <tag>ciao</tag> equivalente a: <tag code="ciao"/> <tag param="1"> codeval </tag> equivalente a: <tag param="1" code="codeval" /> equivalente a: <tag><param>1</param> <code>codeval</code> </tag> </config>
Indice |
<config>
E' il tag principale, racchiude tutti gli altri ed identifica questo documento XML come script di BUC: ha più o meno la stessa funzione di <html> nelle pagine web tradizionali.
<tab>
Permette di strutturare le interfacce grafiche di BUC come più "pagine": il comando <tab> non fa altro che inserire una nuova pagina in cui aggiungere tutti gli elementi del caso.
Attributi:
- title: specifica il titolo che deve avere la pagina. Deve sempre essere specificato in ogni tab, altrimenti questo non sarà visualizzato. Questa caratteristica particolare è stata introdotta per poter inserire dei controlli "nascosti" all'interno di uno script.
Facciamo un esempio per chiarire meglio:
<?xml version="1.0"?>
<config>
<tab>
<title>echo 1</title>
</tab>
<tab title="2"/>
<tab>
( Questa pagina sarà invisibile all' utente perchè è senza titolo )
<label>
echo "Sono invisibile :D"
</label>
</tab>
</config>
<button>
E' il primo elemento inseribile in una pagina che incontriamo: in pratica non è altro che un semplice pulsante, a cui bisogna associare un titolo ed un codice da eseguire una volta premuto.
Attributi:
- text: Specifica il testo che il pulsante dovrà visualizzare internamente.
- onclick: Permette di specificare lo script che verrà eseguito con la pressione del mouse
- code: Idem come sopra.
- title: Funziona esattamente come l'attributo text; è stato conservato per garantire la retrocompatibilità con gli script già realizzati.
Ecco un esempio di pulsante in grado di creare un file vuoto (un po' inutile come cosa, ma rende abbastanza bene l'idea di come funziona):
[...]
<button text="Crea file vuoto">
touch filevuoto.txt
</button>
<button text="Crea file inline" onclick="touch filevuoto.txt"/>
[...]
In questo caso, a differenza di <title>, l'output dello script non è rediretto da nessuna parte ma viene semplicemente ignorato (a meno che non sia stato creato un oggetto <textlog>, ma ne parleremo più tardi).
<label>
Il tag <label> permette di stampare a video un testo a piacere. Si può anche usare senza specificare alcun testo: in questo caso verrà creato un oggetto "invisibile", ma che "occupa spazio", utilizzabile magari per allineare più oggetti all'interno della pagina
Attributi:
- text: Indica il testo che dovrà essere visualizzato.
- code: Idem come sopra.
Ecco un paio di esempi di utilizzo:
[...]
<label>
echo "Seleziona la risoluzione desiderata"
echo "e fai click su \"applica\" "
</label>
<label text="Capito?">
[...]
L'output del comando sarà scritto in corrispondenza della label. E' utile notare come il testo non vada a capo automaticamente, perciò se non vi ricordate di spezzare le frasi in più linee vi troverete presto una finestra larghissima che non potrete restringere senza fare ricorso allo <scrolllayout>.
<text>
Il tag <text> permette di inserire una variabile all'interno del proprio applicativo e da la possibilità all'utente di darle un valore tramite il campo di inserimento che questo tag genera.
Attributi:
- var: Indica il nome della variabile.
Ecco un paio di esempi di utilizzo:
[...]
<label>
echo "Dai un valore alla variabile A"
</label>
<text var="A">
</text>
[...]
<checkbox>
Definire cos'è una checkbox è molto semplice: non è altro che una label, munita di una casellina laterale cliccabile che permette di selezionare/deselezionare la riga. Vista la sua similarità con le label, gli attributi sono praticamente gli stessi (con l'aggiunta del var ovviamente)
Attributi:
- var: Indica la variabile su cui memorizzare 1 se l'elemento è selezionato, 0 altrimenti.
- text: Indica il testo che dovrà essere visualizzato.
- code: Idem come sopra.
[...]
<checkbox var="vr" text="Selezionami!"/>
[...]
<combobox>
Questo oggetto creerà una casella di testo a scelta multipla. Il contenuto dell'elemento selezionato è memorizzato in una variabile di sistema, il cui nome è specificato dall'attributo var.
Attributi:
- var: Indica il nome della variabile in cui è memorizzato il valore della combobox. Potete leggere questo valore in tutti gli script digitando $nomevariabile
- code: In questo attributo va inserito uno script in grado di generare, sullo standard output, l'elenco delle scelte possibili che andranno visualizzate nella combobox (una per riga). La riga che inizia con # è considerata la scelta di default, da mostrare all'avvio dello script.
Per capire come funziona il tutto, analizziamo il seguente pezzo di script:
[...]
<combobox var="risoluzione">
echo "640x480"
echo "800x600"
echo "1024x768"
echo "#1280x1024"
</combobox>
<button text="Applica">
echo "$risoluzione" > filePieno.txt
</button>
[...]
<textbox>
Questo controllo è la controparte modificabile di <label>, in sostanza funziona allo stesso modo ma è collegato ad una variabile: viene quindi aggiunto l'attributo var.
Attributi:
- var: Specifica il nome della variabile su cui salvare il testo scritto dentro la casella
- text: Specifica il valore di default da inserire all'interno della casella
- code: Ha la stessa funzione di text.
[...]
<textbox var="fraseDelGiorno">
echo "Tanto va la gatta al lardo che ci lascia lo zampino"
</textbox>
<button title="Stampa">
echo "La frase del giorno è: $fraseDelGiorno" > fileStampa.txt
</button>
[...]
N.B.: Per ragioni di retrocompatibilità, BUC è in grado di interpretare anche il comando <text&gr;, gestito esattamente allo stesso modo della textbox.
<textlog>
Dopo aver creato i vostri script sarebbe bello avere la conferma che funzionino correttamente e soprattuto essere sicuri che non si generino messaggi di errore. Purtroppo, però, l'output dei pulsanti non va a finire da nessuna parte... e quindi come fare?
Il <textlog> ci viene in aiuto proprio in questi casi, infatti permette di creare una casella di testo in sola lettura su cui è rediretto l'output di tutti i pulsanti della pagina:
[...]
<button title="non faccio nulla">
echo "Questo messaggio apparirà solo sullo standard output"
</button>
<textlog/>
[...]
Eseguite questo codice, provate a premere il pulsante e istantaneamente il testo apparirà all'interno del textlog!
Bisogna solo notare una cosa: il textlog farà apparire il testo SOLO ed esclusivamente DOPO aver terminato di eseguire lo script di un pulsante: se lo script è lungo o comunque richiede diversi minuti prima di essere completato, il programma si bloccherà finchè lo script non sarà terminato, e solo DOPO farà apparire l'output sul textlog. Se vi interessa ottenere le informazioni di output DURANTE l'esecuzione di uno script dovete cercare altre soluzioni; potete, per esempio, pensare di eseguire lo script dentro una finestra di terminale secondaria, lanciata in background con un comando del tipo "gnome-terminal -x script &" (o qualcosa di simile, ovviamente scegliete voi il terminale che preferite :)
<iconlist>
E' l'ultimo arrivato tra i tag di BUC della versione 0.3. Dalla versione 0.4.1, poi, è stato esteso grazie all'introduzione dei tag <icon> e <ondoubleclick>. La versione 0.5 l'ha poi arricchito di nuovi attributi. Se usato da solo, il suo funzionamento è analogo a quello di una combobox:
<iconlist var="risoluzione">
echo "640x480"
echo "800x600"
echo "1024x768"
echo "1280x1024"
</iconlist>
<button title="Applica">
echo "$risoluzione" > filePieno.txt
</button>
Solo che invece di creare una casella a scelta multipla, la iconlist crea una casella piena di icone, per ora tutte uguali, tra l'altro.
Attributi:
- var: Indica la variabile in cui verrà memorizzato il nome dell'elemento della lista selezionato.
- mode: Può assumere due valori: "list", per posizionare il testo a fianco ad ogni icona, e "icon", per piazzare il testo sotto ogni immagine.
- iconwidth: Specifica la larghezza MASSIMA che può assumere un'icona.
- iconheight: Specifica l'altezza MASSIMA che può avere un'icona.
- ondoubleclick: All'interno di questo attributo va messo uno script che viene lanciato quando si fa doppio click su un'icona. Potete usare la variabile, specificata in var, per capire QUALE icona è stata premuta.
- code Se non viene inserito alcun sottotag, dentro code è possibile inserire uno script, eseguito all'avvio, grazie al quale è possibile inserire dinamicamente le icone (una icona per riga), in modo analogo alla combobox.
<icon>
Questo tag va utilizzato all'interno di una iconlist, al posto dello script per l'inserimento delle icone (che verrà ignorato, se presente): utilizzando <icon> sarà possibile inserire staticamente un certo numero di icone, e soprattutto sarà possibile specificare un'immagine diversa per ciascuna icona(le icone di default sono presenti nella cartella /usr/local/buc/icons/) grazie all'attributo src=""; Se dentro questo attributo viene specificato un indirizzo relativo (che non inizia con il carattere /, per intenderci) BUC andrà a cercare l'icona dentro la cartella in cui è presente lo script; in caso non sia presente, la ricerca viene spostata nella cartella /usr/local/buc/icons, dove è presente una serie di immagini di repertorio.
Attributi:
- src: Specifica il percorso dell'immagine da caricare come icona.
- ondoubleclick: In questo attributo va specificato uno script, eseguito quando viene fatto doppio click sull'icona. Questo attributo ha priorità maggiore dell'ondoubleclick della iconlist, per cui potrebbe essere comodo utilizzare l'ondoubleclick della iconlist per definire un comportamento di default per tutte le icone, mentre alcune icone particolari, che hanno un comportamento diverso, sono gestite attraverso l'ondoubleclick della icon.
- text: Indica il testo che dovrà comparire sotto l'icona.
- code: Ha la stessa funzione di text.
- href: funziona come l'attributo src, è presente per ragioni di retrocompatibilità
Ecco un esempio:
<iconlist var="scelta">
<icon src="pc.png" text="Risorse del computer">
<ondoubleclick> nautilus ~ & </ondoubleclick>
</icon>
<icon src="contatti.png">
echo "Rubrica"
</icon>
<icon src="immagini.png">
echo "Fotografie"
</icon>
</iconlist>
<file>
Il tag file permette di inserire nella propria applicazione una casella di testo, con a lato un pulsante che apre la finestra di dialogo per la selezione di files. E' possibile personalizzare questo comando usando gli attributi 'filter' e 'mode' per specificare rispettivamente un filtro di selezione dei files e per indicare se è necessario selezionare files già esistenti, nuovi files oppure cartelle. I valori ammessi per 'mode' sono:
mode = "open" (seleziona solo files esistenti) mode = "save" (seleziona anche nuovi files) mode = "dir" (seleziona directory)
Filter, invece, sfrutta questa sintassi:
filter = "[nome del filtro](*.[estensione] *.[estensione] ...)" //Versione "semplificata": filter = "*.cpp"
Attributi:
- var: Indica la variabile su cui sarà memorizzato il percorso del file selezionato
- mode: Specifica la modalità operativa: "open", "save", o "dir"
- filter: Indica l'espressione regolare grazie alla quale filtrare i risultati
- text: Specifica il valore di default da inserire nella casella
- code: Ha la stessa funzione di text
Per capire meglio come funziona facciamo un esempio:
<label>
echo "Seleziona l'immagine di partenza"
</label>
<file var="sorgente" mode="open" filter="Immagini(*.jpg *.png)">
</file>
<label>
echo "Seleziona il nuovo archivio di destinazione"
</label>
<file var="destinazione" mode="save" filter="Archivio tar.gz(*.tar.gz);;Archivio zip(*.zip)">
</file>
Il primo tag 'file' permette di selezionare un file immagine esistente: per questo il 'mode' è open (cioè non permette di selezionare un file inesistente); il secondo, invece, permette di selezionare il percorso ed il nome del file da creare, perciò 'mode' è settato a 'save'. Inoltre, il secondo 'file' permette di scegliere se salvare in formato .tar.gz oppure in formato .zip, ed il doppio ;; serve proprio per separare i due filtri.
<img>
Questo tag permette di visualizzare una immagine all'interno del proprio script mc. La sintassi è la stessa che usereste in un qualunque file HTML:
Attributi:
- src: Specifica il percorso da cui caricare l'immagine. Questo percorso viene calcolato in modo analogo a quello delle icone, per cui potete utilizzare degli indirizzi relativi per specificare immagini residenti in /usr/local/buc/icons.
- align: Attributo che può assumere i valori "left", "center" e "right", e specifica l'allineamento che deve tenere l'immagine rispetto alla pagina.
- code: Al momento non viene usato...
Ecco un esempio:
[...]
<img src="pc.png" align="center"/>
[...]
<global>
Questo simpatico tag permette di specificare una variabile di ambiente, utilizzabile in tutti gli script successivi, in modo analogo ad una textbox, con la sola differenza che è invisibile all'utente finale (e soprattutto non modificabile).
Attributi:
- var: Specifica il nome della variabile
- text: Specifica il valore di default da inserire all'interno della variabile
- code: Ha la stessa funzione di text.
Vediamo ora un esempio:
<global var="segreto">
echo "HardCoded"
</global>
<label>
echo "Inserisci il codice segreto:"
</label>
<text var="codice">
</text>
<button title="OK">
if [ $segreto = $codice ]
then
echo "Hai indovinato!"
else
echo "Hmm... riprova!"
fi
</button>
<textlog></textlog>
<hlayout>
Visivamente non aggiunge nulla alle vostre pagine, ma tutti gli oggetti che inserirete al suo interno saranno affiancati. L'hlayout può essere utilizzato per un gran numero di funzioni diverse, ad esempio per realizzare degli oggetti allineati centralmente rispetto alla pagina; guardate ad esempio questo script, che genera un pulsante allineato al centro della pagina:
[...] <hlayout> <label/> <button text="Ciao"/> <label/> </hlayout> [...]
La label vuota funge da "placeholder", e consente di inserire uno spazio di dimensioni variabili a lato del pulsante.
Attributi:
- [nessuno]
<vlayout>
Questo tag permette di allineare gli elementi al suo interno verticalmente, uno sotto l'altro. Può sembrare un tag inutile, perchè l'allineamento verticale è il comportamento di default di BUC, ma avere questo tag assume un significato quanto è utilizzato all'interno di un <hlayout>:
[...]
<hlayout>
<vlayout>
<button text="A" code="echo a"/>
<button text="B" code="echo b"/>
<button text="C" code="echo c"/>
</vlayout>
<textlog/>
</hlayout>
[...]
<scrolllayout>
Questo tag permette di rendere il suo contenuto "ridimensionabile": se, per esempio, la finestra è troppo piccolo per visualizzare un numero troppo grande di comandi, vengono aggiunte automaticamente due barre di scorrimento che permettono di navigare comunque la pagina. Consiglio di utilizzare questo tag in tutti i vostri script, in quanto può essere MOOLTO comodo per far girare gli stessi su pc a bassa risoluzione, come gli eeepc.

