diff --git a/AUTHORS b/AUTHORS index 2f7b69c4..659ca289 100644 --- a/AUTHORS +++ b/AUTHORS @@ -14,4 +14,5 @@ Patches: * Hannes Rist (:set titlestring support) * Marco Candrian (shift-insert patch) * Nikolai Weibull ($VIMPERATOR_HOME) + * Joseph Xu (supporting multiple top level windows better) diff --git a/Donators b/Donators index ba4f8bc2..556f8736 100644 --- a/Donators +++ b/Donators @@ -3,6 +3,7 @@ 2007 (most recent donators first): +* Ivo-Jose Jimenez-Ramos * Robert Heckel * Ramana Kumar * Thomas Svensen diff --git a/NEWS b/NEWS index 34798a5c..6ad75016 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,7 @@ 2007-xx-xx: * version 0.6 * THIS VERSION ONLY WORKS WITH FIREFOX 3.0 + * :q doesn't close the whole browser, if there are more than one windows * new gb and gB mappings to repeat the last :buffer[!] command, * :ls, :history and :bmarks output is now hyperlinked * tags and keyword support for :bmark diff --git a/content/commands.js b/content/commands.js index b3f59415..2a18792b 100644 --- a/content/commands.js +++ b/content/commands.js @@ -1350,8 +1350,9 @@ function Commands() //{{{ addDefaultCommand(new Command(["q[uit]"], function() { vimperator.tabs.remove(getBrowser().mCurrentTab, 1, false, 1); }, { - short_help: "Quit current tab or quit Vimperator if this was the last tab", - help: "When quitting Vimperator, the session is not stored." + short_help: "Quit current tab", + help: "If this is the last tab in the window, close the window. If this was the " + + "last window, close Vimperator. When quitting Vimperator, the session is not stored." } )); addDefaultCommand(new Command(["quita[ll]", "qa[ll]"], diff --git a/content/tabs.js b/content/tabs.js index e0e25d7c..13163080 100644 --- a/content/tabs.js +++ b/content/tabs.js @@ -172,8 +172,12 @@ function Tabs() //{{{ count = 1; if (quit_on_last_tab >= 1 && getBrowser().mTabs.length <= count) - vimperator.quit(quit_on_last_tab == 2); - + { + if (vimperator.windows.length > 1) + window.close(); + else + vimperator.quit(quit_on_last_tab == 2); + } var index = this.index(tab); if (focus_left_tab) diff --git a/content/vimperator.js b/content/vimperator.js index b1c817b4..d89e5b87 100644 --- a/content/vimperator.js +++ b/content/vimperator.js @@ -812,8 +812,17 @@ const vimperator = (function() //{{{ for (; now - then < ms; now = new Date().getTime()) { mainThread.processNextEvent(true); } - } + }, + get windows() + { + var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); + var wa = []; + var enumerator = wm.getEnumerator("navigator:browser"); + while (enumerator.hasMoreElements()) + wa.push(enumerator.getNext()); + return wa; + } } //}}} })(); //}}} diff --git a/skin/vimperator.css b/skin/vimperator.css index 6e553aa9..a7fcb25e 100644 --- a/skin/vimperator.css +++ b/skin/vimperator.css @@ -150,6 +150,9 @@ the terms of any one of the MPL, the GPL or the LGPL. color: green; text-decoration: none; } +.hl-URL:hover { + background-color: gray; +} /* MOW */