-public class Plugin {
- WebThing wt;
- Gtk.Entry commandline;
-
- public Plugin(WebThing wt) {
- this.wt = wt;
- wt.WebView.KeyPressEvent += WebView_KeyPress;
-
- commandline = new Gtk.Entry();
- commandline.Activated += command_Activate;
- commandline.KeyPressEvent += command_KeyPress;
- wt.AttachWidget(commandline, CompassDirection.S, AttachOptions.Fill, AttachOptions.Shrink);
-
- commandline.Hide();
- }
-
- private void WebView_KeyPress(object o, KeyPressEventArgs e) {
- Console.WriteLine(e.Event.Key);
- 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.t:
- CommandStart("tabopen ");
- break;
- case Gdk.Key.BackSpace:
- wt.WebView.GoBack();
- break;
- case Gdk.Key.colon:
- CommandlineShow();
- break;
- }
- }
-
- public void CommandStart(string text) {
- commandline.Text = text;
- commandline.GrabFocus();
- commandline.Position = text.Length;
- commandline.Show();
- }
-
- public void CommandlineShow() {
- commandline.Show();
- commandline.GrabFocus();
- }
-
- public void CommandlineHide() {
- commandline.Hide();
- wt.WebView.GrabFocus();
- }
-
- private void command_Activate(object o, EventArgs e) {
- string[] args = Regex.Split(commandline.Text, @"\s+");
- switch(args[0]) {
- case "open":
- if (args.Length < 2) return;
- wt.WebView.Open(args[1]);
- break;
- }
- commandline.Text = "";
- CommandlineHide();
- }
-
- private void command_KeyPress(object o, KeyPressEventArgs e) {
- if (e.Event.Key == Gdk.Key.Escape)
- CommandlineHide();
- }
+public class Vimish : WebThingPlugin {
+ WebThing wt;
+ Gtk.Entry commandline;
+
+ public override void Init(WebThing wt) {
+ this.wt = wt;
+ wt.Tabs.ShowTabs = false;
+
+ wt.Window.KeyPressEvent += Window_KeyPress;
+
+ commandline = new Gtk.Entry();
+ commandline.Activated += command_Activate;
+ commandline.KeyPressEvent += command_KeyPress;
+ wt.AttachWidget(commandline, AttachPoint.S, AttachOptions.Fill, AttachOptions.Shrink);
+
+ commandline.Hide();
+
+ ApplyOptions();
+ }
+
+ public override void InitWebView(WebView wv) {
+ wv.KeyPressEvent += WebView_KeyPress;
+ }
+
+ private void Window_KeyPress(object o, KeyPressEventArgs e) {
+ 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.o:
+ CommandStart("open ");
+ break;
+ case Gdk.Key.O:
+ CommandStart("open " + wt.WebView.MainFrame.Uri);
+ break;
+ case Gdk.Key.t:
+ CommandStart("tabopen ");
+ break;
+ case Gdk.Key.T:
+ CommandStart("tabopen " + wt.WebView.MainFrame.Uri);
+ break;
+ case Gdk.Key.colon:
+ CommandlineShow();
+ break;
+ }
+ }
+ }
+
+ private void WebView_KeyPress(object o, KeyPressEventArgs e) {
+ WebView wv = (WebView)o;
+
+ Console.WriteLine(e.Event.Key);
+ if (e.Event.State == Gdk.ModifierType.None) {
+ switch(e.Event.Key) {
+ case Gdk.Key.j:
+ wt.Bump(0, 1);
+ break;
+ case Gdk.Key.k:
+ wt.Bump(0, -1);
+ break;
+ case Gdk.Key.l:
+ wt.Bump(1, 0);
+ break;
+ case Gdk.Key.h:
+ wt.Bump(-1, 0);
+ break;
+ case Gdk.Key.r:
+ wv.Reload();
+ break;
+ case Gdk.Key.Escape:
+ wv.ExecuteScript("document.activeElement.blur()");
+ break;
+ }
+ }
+ }
+
+ public void CommandStart(string text) {
+ commandline.Text = text;
+ commandline.GrabFocus();
+ commandline.Position = text.Length;
+ commandline.Show();
+ }
+
+ public void CommandlineShow() {
+ commandline.Show();
+ commandline.GrabFocus();
+ }
+
+ public void CommandlineHide() {
+ commandline.Hide();
+ wt.WebView.GrabFocus();
+ }
+
+ private void command_Activate(object o, EventArgs e) {
+ string[] args = Regex.Split(commandline.Text, @"\s+");
+ if (args.Length == 0) return;
+ string cmd = args[0];
+ string[] tmp = new string[args.Length - 1];
+ Array.Copy(args, 1, tmp, 0, tmp.Length);
+ args = tmp;
+ string query = Regex.Replace(commandline.Text, String.Format(@"^{0}\s+", cmd), "");
+
+ switch(cmd) {
+ case "close":
+ wt.CloseTab();
+ break;
+ case "open":
+ if (args.Length < 1) return;
+ if (!wt.Open(query))
+ Error("Could not open query");
+ break;
+ case "tabopen":
+ if (args.Length < 1) return;
+ if (wt.OpenTab(query))
+ wt.Tabs.CurrentPage = wt.Tabs.NPages - 1;
+ else
+ Error("Could not open query");
+ break;
+ case "n":
+ wt.Tabs.NextPage();
+ break;
+ case "p":
+ wt.Tabs.PrevPage();
+ break;
+ case "q":
+ wt.Quit();
+ break;
+ case "set":
+ if (args.Length == 1)
+ Options[args[0]] = null;
+ else
+ Options[args[0]] = args[1];
+ ApplyOptions();
+ break;
+ case "save":
+ SaveConfig();
+ break;
+ default:
+ bool found;
+ if (args.Length > 0) {
+ found = wt.Plugins.Call(cmd, args);
+ if (!found)
+ Error("No function {0}({1}) found", cmd, String.Join(", ", args));
+ } else {
+ found = wt.Plugins.Call(cmd);
+ if (!found)
+ Error("No function {0}() found", cmd);
+ }
+ if (found)
+ Console.WriteLine("Plugin function {0} called successfully", cmd);
+ break;
+ }
+ CommandlineHide();
+ }
+
+ private void ApplyOptions() {
+ foreach (string key in Options.Keys) {
+ switch(key) {
+ case "ShowTabs":
+ bool v = Config.ParseBool(Options[key]);
+ wt.Tabs.ShowTabs = v;
+ break;
+ default:
+ Error("No variable {0}", key);
+ break;
+ }
+ }
+ }
+
+ private void Error(string format, params object[] values) {
+ Console.WriteLine(format, values);
+ }
+
+ private void command_KeyPress(object o, KeyPressEventArgs e) {
+ if (e.Event.Key == Gdk.Key.Escape)
+ CommandlineHide();
+ }