/plugins/FFNav.cs
using System;
using Gtk;
using WebKit;
using bytex64.WebThing;

public class FFNav : WebThingPlugin {
    WebThing wt;

    public override void Init(WebThing wt) {
        this.wt = wt;

        wt.Window.KeyPressEvent += Window_KeyPress;
    }

    public override void InitWebView(WebView wv) {
        wv.KeyPressEvent += WebView_KeyPress;
    }

    private void Window_KeyPress(object o, KeyPressEventArgs e) {
        if ((e.Event.State & Gdk.ModifierType.ControlMask) != 0) {
            switch(e.Event.Key) {
            case Gdk.Key.t:
                wt.NewTab();
                wt.Tabs.CurrentPage = wt.Tabs.NPages - 1;
                break;
            case Gdk.Key.w:
                wt.CloseTab();
                break;
            }
        }
    }

    private void WebView_KeyPress(object o, KeyPressEventArgs e) {
        WebView wv = (WebView) o;
        if ((e.Event.State & Gdk.ModifierType.Mod1Mask) != 0) {
            switch(e.Event.Key) {
            case Gdk.Key.Left:
                wv.GoBack();
                break;
            case Gdk.Key.Right:
                wv.GoForward();
                break;
            }
        } else if ((e.Event.State & Gdk.ModifierType.ControlMask) != 0) {
            switch(e.Event.Key) {
            case Gdk.Key.ISO_Left_Tab:
                if (wt.Tabs.CurrentPage == 0)
                    wt.Tabs.CurrentPage = wt.Tabs.NPages - 1;
                else
                    wt.Tabs.PrevPage();
                break;
            case Gdk.Key.Tab:
                if (wt.Tabs.CurrentPage == wt.Tabs.NPages - 1)
                    wt.Tabs.CurrentPage = 0;
                else
                    wt.Tabs.NextPage();
                break;
            }
        } else {
            switch(e.Event.Key) {
            case Gdk.Key.BackSpace:
                wv.GoBack();
                break;
            case Gdk.Key.Escape:
                wv.StopLoading();
                break;
            }
        }
    }
}