follow me on Twitter

    Mozilla, Ubiquity e DBUS

    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);
    }
    });

    0 commenti:

    View Luca Greco"s profile on LinkedIn

    Rpl

    La mia foto
    Lecce, Italy
    Fulltime Coder and *nix BOFH