La scorsa settimana mi sono imbattuto in una estensione per mozilla molto interessante: mozjs_dbus
Credo che Ubuntu dovrebbe seriamente valutare la possibilità di compilare e installare questa estensione di default per migliorare l’integrazione del browser con il resto dell’ambiente desktop.
In pratica la funzione dell’estensione è quella di esporre all’interno di chrome (inteso come la componente privilegiata del broser e non il broser di google) dei servizi che consentano di accedere e fornire servizi dbus.
Il tutto è condito da un’API Javascript che consente di colloquiare agevolmente con dbus, che all’interno del panorama delle tecnologie Desktop libere costituisce l’analogo di COM, CORBA o XPCOM.
Visto che la compilazione dell’estensione (che necessita dei sorgenti di mozilla) non è risultata troppo complessa (come unico imprevisto ho dovuto aggiornare il file install.rdf del’estensione per estenderne la compatibilità a Firefox 3.0.3)
Volevo fare una prova… così ho pensato che poteva essere una buona scusa per provare a scrivere il primo comando per Ubiquity, estensione che aggiunge a firefox una commandline con cui colloquiare con il browser un po’ come faccio con emacs :-)
Mediante dbus-viewer è possibile navigare le interfacce dbus messe a disposizione dalle applicazioni attualmente attive… tra tutte ho individuato Tomboy.
Tomboy è un’applicazione gnome per conservare delle note ed esporta un interfaccia dbus particolarmente completa in quanto consente di effettuare tutte le operazioni CRUD sulle note.
Ho creato quindi 2 nuovi comandi per ubiquity:
- tomboy-list: che restituisce in preview l’elenco puntato dei titoli delle note
- tomboy-view: che restituisce in preview l’elenco puntato di titolo e contenuto delle note che contengono la stringa passata come parametro
Components.utils.import("resource://mozjs_dbus/DBUS.jsm"); | |
const bus = DBUS.sessionBus; | |
const tb = bus.getObject("org.gnome.Tomboy", | |
"/org/gnome/Tomboy/RemoteControl", | |
"org.gnome.Tomboy.RemoteControl"); | |
CmdUtils.CreateCommand({ | |
name: "tomboy-list", | |
homepage: "http://rplcodeline.blogspot.com", | |
author: { name: "Luca Greco", email: "luca.greco@alca.le.it"}, | |
license: "GPL3", | |
preview: function(pvdata, text) { | |
var notes = tb.ListAllNotes(); | |
var data = "<ul>"; | |
notes.forEach(function(item) { | |
data += "<li>"+tb.GetNoteTitle(item)+"</li>"; | |
}); | |
data += "</ul>"; | |
pvdata.innerHTML = data; | |
} | |
}); | |
CmdUtils.CreateCommand({ | |
name: "tomboy-view", | |
homepage: "http://rplcodeline.blogspot.com", | |
author: { name: "Luca Greco", email: "luca.greco@alca.le.it"}, | |
license: "GPL3", | |
takes: {status: noun_arb_text}, | |
preview: function(pvdata, input) { | |
var data = "<ul>"; | |
this._foreach(input,function(item) { | |
data += "<li>"+tb.GetNoteTitle(item)+": "+tb.GetNoteContents(item)+"</li>"; | |
},function() { data += "<li>NOCONTENT</li>";}); | |
data += "</ul>"; | |
pvdata.innerHTML = data; | |
}, | |
execute: function(input) { | |
this._foreach(input,function(item) { | |
tb.DisplayNote(item) | |
}); | |
}, | |
_foreach: function(input, item_handler, noitem_handler) { | |
if (input.length < 1) return; | |
var notes = tb.SearchNotes(input.text,false); | |
if (notes == null) { | |
noitem_handler.call(); | |
} | |
else notes.forEach(item_handler); | |
} | |
}); |
Link
- http://github.com/FireRabbit/mozjs-dbus/wikis
- http://groups.google.com/group/mozilla.dev.platforms.linux/browse_thread/thread/5f67b110fd6586d/35c75b24bbef65fb?lnk=gst&q=dbus#35c75b24bbef65fb
- http://labs.mozilla.com/2008/08/introducing-ubiquity/
- http://www.azarask.in/blog/post/sharing-streamable-functionality/
- http://www.azarask.in/blog/post/ubiquity-in-depth/
- https://wiki.mozilla.org/Labs/Ubiquity
- https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_User_Tutorial
- https://wiki.mozilla.org/Labs/Ubiquity/Ubiquity_0.1_Author_Tutorial
- http://ubiquitously.org/forum/viewtopic.php?f=5&t=14
- http://hg.toolness.com/ubiquity-firefox/file/c2b81ec3b3bf/ubiquity/standard-feeds/social.js
- http://hg.toolness.com/ubiquity-firefox/file/6caa9d66b3bb/ubiquity/chrome/content/nlparser/en/nountypes.js
0 commenti:
Posta un commento