Esse
Un Semplicissimo editor di testo.
Esse è il mio primo software in Vala che va oltre l'hello world.
Il nome non è altro che l'iniziale di “Simple Text Editor”, o “Semplice editor di testi”. Quanta fantasia, eh? ;)
Descrizione
Non c'è poi molto da descrivere. Le funzioni sono ridotte all'osso: carica, salva, taglia, copia, incolla. L'unica feature un po' più avanzata è l'interfaccia a tab, ormai necessaria in qualsiasi programma che si rispetti.
L'intenzione infatti non era di scrivere un software completo, ma un editor il più piccolo e semplice possibile, che fosse più un esempio di come scrivere un software in Vala che un software da utilizzare normalmente. Ne esce comunque un programmino minuscolo (le versioni 0.1, e 1.0 compilate, generano eseguibili di soli 35-40 KiB) che potrebbe essere utile quando non si vuole caricare gedit o geany con tutti i loro plugin, oppure su un device portatile dove lo spazio, sia disco che RAM, è ridotto all'osso.
Lo scheletro dell'applicazione è stato scritto in un weekend, ma il 90% del tempo è stato passato a consultare la documentazione di GLib e Gtk+ su Devhelp, visto che da oltre un anno non mettevo mano a software Gtk, quindi ho dovuto rinfrescarmi un po' la memoria.
Il codice non è e non vuole essere un esempio di come si programma un'applicazione perfetta. Sono sicuro che ci sono molti punti in cui può essere migliorato, ma serve come palestra sia per me che per voi. Se avete delle modifiche interessanti (che non snaturino il minimalismo del software), contattatemi pure (i commenti sono aperti) e vediamo come integrarle.
Download
esse_1.0-1-i386.deb [Debian Lenny)
Questa versione utilizza Glade per la maggior parte dell'interfaccia.
Solo le singole tab e i vari requester sono creati dinamicamente quando ce n'è bisogno. Una prossima versione abbandonerà completamente glade, per avere una dipendenza in meno (due, in realtà, la libglade e il file .glade), vista anche la semplicità dell'interfaccia. In questa versione ho preferito così soprattutto per capire come interfacciarmi con glade (mi potrebbe essere molto utile per progetti futuri più corposi) sia per vedere le API di introspezione delle classi, utilizzate per l'auto_connect dei segnali con le callback relative.
C'è anche un abbozzo di utilizzo di GConf, per prendere le preferenze dell'utente sul font monospace, e di Pango, per impostare il suddetto font. Questo porta ad un aumento delle dipendenze del software, ma sono componenti che prima o poi verranno integrati direttamente in Gtk e che comunque chi usa Gnome ha già installato e caricato come librerie condivise, quindi non pesano sull'eseguibile finale.
Nella versione 1.0 è stato aggiunto un file .desktop per farlo apparire nei menu del window/desktop manager, è stata implementata l'apertura di file direttamente dalla linea di comando, ed è stato debianizzato il pacchetto. A causa del path statico nel sorgente al file .glade, il makefile installa in /usr invece che in /usr/local. Sono state attivate le ottimizzazioni “standard” di gcc (-O2)
essedue_1.0-1-i386.deb (Debian Lenny)
essedue-1.1.tar.gz (Sorgente)
essedue_1.1-1_amd64.deb (Debian Squeeze)
Essedue è essenzialmente la stessa cosa di Esse, ma è stato eliminato l'uso di Glade. L'interfaccia viene costruita interamente con i widget standard, mentre i menu e la toolbar sono definiti tramite il nuovo sistema integrato nelle Gtk: UIManager.
Come per Esse, in questa versione si possono specificare file da aprire sulla linea di comando, essedue appare nei menu del WM/DM ed è stato debianizzato. Anche in questo caso il makefile installa tutto in /usr e non in /usr/local. Anche per Essedue sono state attivate le ottimizzazioni -O2 di gcc nel Makefile, ed inoltre sono stati rimossi i flag necessari solo per Glade.
Update v1.0
Nella versione 1.0 è stato implementato il controllo in fase di chiusura per file modificati.
Compila senza problemi con la versione 0.3.4 di Vala.
Update 1.1
Nella versione 1.1 non c'è nessuna novità di rilievo, ma il codice è stato adattato alla versione 0.5.7 di Vala, che risolve il bug dei Gtk Notebook.
Sviluppi futuri
Non ce ne saranno molti, però mi piacerebbe implementare un piccolo requester per le preferenze, dove impostare almeno il wordwrap automatico e forse il font, e magari la stampa, anche se mi sa che sarà un bagno di sangue (non ho ancora guardato come funzione il nuovo sistema di stampa di Gtk).
Di sicuro dovrò implementare un controllo in fase di chiusura, per verificare che tutti i documenti non siano modificati. Per ora è presente solo quando si chiude una tab, e non tutta l'applicazione, quindi attenti!
Le prossime versioni di Vala (questo è stato verificato con la 0.3.3, appena uscita nel momento in cui scrivo questa pagina) probabilmente cambieranno la gestione dei binding con le librerie, e probabilmente verrà corretto un bug nella gestione delle pagine dei Gtk Notebook (che ho già segnalato) che mi costringerà a cambiare un paio di righe del codice. [Corretto con la versione 0.5.x]
Cercherò di mantenere il software compilabile con tutte le prossime versioni di Vala, almeno fino alla 1.0, poi dovrebbero stabilizzarsi le API fino alla 2.x.
Contributi
Se qualcuno in possesso di una Ubuntu (sia 32 che 64bit) volesse creare un pacchetto .deb per queste architetture, e volesse inviarmelo per linkarlo in questa pagina, dovrebbe bastare installare Vala e scaricare il .tar.gz di esse/essedue, quindi scompattarlo, entrare nella cartella che viene creata e dare il comando:
fakeroot debian/rules binary
Che provvederà a creare il pacchetto deb nella directory superiore.
Nel caso, specificate la versione di Debian/Ubuntu che state usando. Grazie mille.