Added tabs
[WebThing.git] / plugins / Vimish.cs
index 7acdad2..8de862a 100644 (file)
@@ -1,15 +1,17 @@
 using System;
 using System.Text.RegularExpressions;
 using Gtk;
+using WebKit;
 using bytex64.WebThing;
 
 public class Vimish : WebThingPlugin {
     WebThing wt;
     Gtk.Entry commandline;
 
-    public void Init(WebThing wt) {
+    public override void Init(WebThing wt) {
         this.wt = wt;
-        wt.WebView.KeyPressEvent += WebView_KeyPress;
+
+        wt.Window.KeyPressEvent += Window_KeyPress;
 
         commandline = new Gtk.Entry();
         commandline.Activated += command_Activate;
@@ -19,36 +21,56 @@ public class Vimish : WebThingPlugin {
         commandline.Hide();
     }
 
-    private void WebView_KeyPress(object o, KeyPressEventArgs e) {
-        Console.WriteLine(e.Event.Key);
+    public override void InitWebView(WebView wv) {
+        wv.KeyPressEvent += WebView_KeyPress;
+    }
+
+    private void Window_KeyPress(object o, KeyPressEventArgs e) {
         switch(e.Event.Key) {
-        case Gdk.Key.j:
-            wt.ScrolledWindow.Vadjustment.Value += wt.ScrolledWindow.Vadjustment.StepIncrement;
-            break;
-        case Gdk.Key.k:
-            wt.ScrolledWindow.Vadjustment.Value -= wt.ScrolledWindow.Vadjustment.StepIncrement;
-            break;
-        case Gdk.Key.l:
-            wt.ScrolledWindow.Hadjustment.Value += wt.ScrolledWindow.Hadjustment.StepIncrement;
-            break;
-        case Gdk.Key.h:
-            wt.ScrolledWindow.Hadjustment.Value -= wt.ScrolledWindow.Hadjustment.StepIncrement;
-            break;
         case Gdk.Key.o:
             CommandStart("open ");
             break;
-        case Gdk.Key.r:
-            wt.WebView.Reload();
-            break;
         case Gdk.Key.t:
             CommandStart("tabopen ");
             break;
         case Gdk.Key.colon:
             CommandlineShow();
             break;
-        case Gdk.Key.Escape:
-            wt.WebView.ExecuteScript("document.activeElement.blur()");
-            break;
+        }
+    }
+
+    private void WebView_KeyPress(object o, KeyPressEventArgs e) {
+        Console.WriteLine(e.Event.Key);
+        if ((Gdk.ModifierType.ControlMask & e.Event.State) != 0) {
+            switch(e.Event.Key) {
+            case Gdk.Key.n:
+                wt.Tabs.NextPage();
+                break;
+            case Gdk.Key.p:
+                wt.Tabs.PrevPage();
+                break;
+            }
+        } else {
+            switch(e.Event.Key) {
+            case Gdk.Key.j:
+                wt.ScrolledWindow.Vadjustment.Value += wt.ScrolledWindow.Vadjustment.StepIncrement;
+                break;
+            case Gdk.Key.k:
+                wt.ScrolledWindow.Vadjustment.Value -= wt.ScrolledWindow.Vadjustment.StepIncrement;
+                break;
+            case Gdk.Key.l:
+                wt.ScrolledWindow.Hadjustment.Value += wt.ScrolledWindow.Hadjustment.StepIncrement;
+                break;
+            case Gdk.Key.h:
+                wt.ScrolledWindow.Hadjustment.Value -= wt.ScrolledWindow.Hadjustment.StepIncrement;
+                break;
+            case Gdk.Key.r:
+                wt.WebView.Reload();
+                break;
+            case Gdk.Key.Escape:
+                wt.WebView.ExecuteScript("document.activeElement.blur()");
+                break;
+            }
         }
     }
 
@@ -72,10 +94,24 @@ public class Vimish : WebThingPlugin {
     private void command_Activate(object o, EventArgs e) {
         string[] args = Regex.Split(commandline.Text, @"\s+");
         switch(args[0]) {
+        case "close":
+            wt.CloseTab();
+            break;
         case "open":
             if (args.Length < 2) return;
             wt.OpenUri(args[1]);
             break;
+        case "tabopen":
+            if (args.Length < 2) return;
+            wt.OpenUriTab(args[1]);
+            wt.Tabs.CurrentPage = wt.Tabs.NPages - 1;
+            break;
+        case "n":
+            wt.Tabs.NextPage();
+            break;
+        case "p":
+            wt.Tabs.PrevPage();
+            break;
         case "q":
             wt.Quit();
             break;