Fedora 17 nám pomaly klope na dvere a to je ten pravý čas pozrieť sa zblízka na niektorú z noviniek, ktoré budú jej súčasťou: konkrétne GNOME 3.4 a vylepšená podpora klávesových skratiek pre rozšírenia GNOME Shell. Tá v predchádzajúcich verziách výrazne zaostávala, o čom svedčí aj minimálne množstvo dostupných rozšírení orientovaných práve na klávesovo-orientované ovládanie prostredia (čo nikoho, kto trávi väčšinu času vo VIMe, úplne neteší). Poďme sa teda pozrieť, ako si vytvoriť jednoduchý nástroj, ktorý by doplnil našu klávesnicu o nejaký ten trik.

API na dosah prstov

Tým, ktorí sa už s rozširovaním Gnomu hrali, určite nie je potrebné predstavovať nástroj Looking Glass. Pomocou tohoto Firebugu pre GNOME Shell je možné experimentovať so spúšťaním rôznych príkazov JavaScriptu priamo v aktuálnom kontexte, objavovať dostupné API alebo skúmať vniknuté chyby. Tento nástroj vyvoláte cez spúšťač Alt-F2 príkazom lg. Môžete napr. získať zoznam záhlaví všetkých okien:

global.get_window_actors().map(function (w) { return w.meta_window.get_title(); })

Pri vývoji je Looking Glass určite nenahraditeľná pomôcka, ktorú človek využíva veľmi často. Snáď až príliš často na to, aby na jej spustenie bola potrebná taká relatívne zložitá procedúra.

Vytvoríme si teda nové rozšírenie ktoré nám ho sprístupní pomocou skratky. Najskôr vytvoríme prázdny projekt pomocou interaktívneho príkazu

gnome-shell-extension-tool -c

Vygenerovaný kód môžeme nájsť na ~/.local/share/gnome-shell/extensions/{extension-uuid}.

Ako možno očakávať, náš kód pôjde do súboru extension.js (ako prípona napovedá, je to skutočne JavaScript):

const Gio = imports.gi.Gio;
const Meta = imports.gi.Meta;

const Main = imports.ui.main;
const KEYBINDING_BASE = 'org.gnome.shell.extensions.looking-glass-keybind.keybindings';

function init() { };

function enable() {
global.screen.get_display().add_keybinding("launch-looking-glass",
new Gio.Settings({schema: KEYBINDING_BASE}),
Meta.KeyBindingFlags.NONE,
function() { Main.createLookingGlass().open() });
};

function disable() { };

Týmto sme GNOME Shellu povedali, že chceme, aby pri použití klávesovej skratky launch-looking-glass, ktorá je definovaná v schéme org.gnome.shell.extensions.looking-glass-keybind.keybindings, otvoril Looking Glass okno. Je v tom však jeden háčik: ani skratka ani schéma nie sú zatiaľ nikde definované a keby sme sa pokúsili skončiť v tejto fázi, môžeme očakávať grandiózny pád prostredia.

Klávesovú skratku definujeme v schéme, čo je jednoduchý xml dokument. Každá schéma musí mať definované id (a prípadne path), ktoré ju identifikujú. Konvencia je aj pomenovať súbor schémy podľa id. V našom prípade teda org.gnome.shell.extensions.looking-glass-keybind.keybindings.gschema.xml:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema id="org.gnome.shell.extensions.looking-glass-binding.keybindings"
path="/org/gnome/shell/extensions/looking-glass-binding/keybindings/">
<key type="as" name="launch-looking-glass">
<default>["F12"]</default>
<summary>Launch looking glass</summary><description></description>
</key>
</schema>
</schemalist>

Schému so skratkou sme zadefinovali, zostáva však umiestniť ju na také miesto, aby si ju niekto všimol. Máme 2 možnosti na jeho umiestenie:

  1. /usr/share/glib-2.0/schemas – medzi ostatné celosystémové súbory
  2. ~/.local/share/glib-2.0/schemas – v tomto prípade sa musíme uistiť, že máme správne nastavenú premennú XDG_DATA_DIRS a prípadne ju upraviť v ~/.profile:
    export XDG_DATA_DIRS=~/.local/share:/usr/share

    Aby sa toto nastavenie prejavilo, je potrebné odhlásiť sa a znovu prihlásiť.

V oboch prípadoch je potrebné ešte nakoniec skompilovať všetky schémy v danom umiestení:

glib-compile-schemas ~/.local/share/glib-2.0/schemas

Na záver môžeme povoliť nami vytvorené rozšírenie napr. pomocou nástroja gsettings:

gsettings set org.gnome.shell enabled-extensions "['[email protected]']"

Ak by vám nevyhovovala pôvodná klávesa F12, je možné veľmi jednoducho použiť inú:

gsettings set org.gnome.shell.extensions.looking-glass-keybind.keybindings\
launch-looking-glass "['F10']"

Záver

Osobne som novú vlastnosť GNOME Shell 3.4 uvítal z nadšením a teším sa na rozšírenia, ktoré prinesú viac možností ovládania práve pomocou klávesnice. Celý kód z tohoto článku je dostupný na http://github.com/iNecas/looking-glass-keybind.