diff --git a/TODO b/TODO
index 2b43cfe5..0f64603b 100644
--- a/TODO
+++ b/TODO
@@ -53,4 +53,5 @@ FEATURES:
RANDOM IDEAS:
* numbered tabs
+* make hints work with usermode
diff --git a/chrome/content/vimperator/commands.js b/chrome/content/vimperator/commands.js
index d6eed628..3461c369 100644
--- a/chrome/content/vimperator/commands.js
+++ b/chrome/content/vimperator/commands.js
@@ -101,21 +101,21 @@ var g_commands = [/*{{{*/
null
],
[
- ["echo"],
+ ["echo", "ec"],
"Display a string at the bottom of the window",
"Echo all arguments of this command. Useful for showing informational messages.
Multiple lines WILL be seperated by \\n.",
function(args) { echo(args); },
null
],
[
- ["echoerr"],
+ ["echoerr", "echoe"],
"Display an error string at the bottom of the window",
"Echo all arguments of this command highlighted in red. Useful for showing important messages.
Multiple lines WILL be seperated by \\n.",
function(args) { echoerr(args); },
null
],
[
- ["execute", "exec"],
+ ["execute", "exe"],
"Run any javascript command through eval()",
"Acts as a javascript interpreter by passing the argument to eval().
"+
":exec alert('Hello world') would show a dialog box with the text \"Hello world\".
"+
@@ -173,7 +173,7 @@ var g_commands = [/*{{{*/
null
],
[
- ["open", "o", "op", "ope", "edit", "e"],
+ ["open", "o", "op", "edit", "e"],
"Open one ore more URLs",
"Usage: :open <url> [| <url>]
" +
"Opens one ore more URLs in the current buffer.
"+
@@ -196,14 +196,22 @@ var g_commands = [/*{{{*/
null
],
[
- ["quit", "q", "qu", "qui"],
+ ["preferences", "prefs"],
+ "Show Browser Preferences",
+ "You can change the browser preferences from this dialog.
Be aware that not all Firefox preferences work, because Vimperator overrides some keybindings and changes Firefox's GUI.
"+
+ "Works like :set!, but opens the dialog in a new window instead of a new tab. Use this, if you experience problems/crashes when using :set!",
+ function() { openPreferences(); },
+ null
+ ],
+ [
+ ["quit", "q"],
"Quit current tab or quit Vimperator if this was the last tab",
"When quitting Vimperator, the session is not stored.",
function (args) { tab_remove(1, false, 1); },
null
],
[
- ["quitall", "qall", "qa"],
+ ["quitall", "quita", "qall", "qa"],
"Quit Vimperator",
"Quit Vimperator, no matter how many tabs/windows are open. The session is not stored.",
function (args) { quit(false); },
@@ -217,7 +225,14 @@ var g_commands = [/*{{{*/
null
],
[
- ["save", "saveas", "sav"],
+ ["restart"],
+ "Restarts the browser",
+ "Forces the browser to restart.",
+ function(args, special) { restart(); },
+ null
+ ],
+ [
+ ["saveas", "sav"],
"Save current web page to disk",
"Open the original Firefox \"Save page as...\" dialog in a new tab.
" +
"There, you can save the current web page to disk with various options.",
@@ -251,7 +266,7 @@ var g_commands = [/*{{{*/
null
],
[
- ["tabopen", "t", "to", "topen", "tabedit", "tabnew"],
+ ["tabopen", "t", "to", "topen", "tabedit", "tabe", "tabnew"],
"Open one or more URLs in a new tab",
"Like :open but open URLs in a new tab. If used with !, the 'tabopen' value of the 'activate' setting is negated.",
function (args, special) { if (args.length > 0) openURLsInNewTab(args, !special); else openURLsInNewTab("about:blank", true); },
@@ -802,23 +817,35 @@ var g_searchengines = [ /*{{{*/
// otherwise a refernce to our command
function get_command(cmd) // {{{
{
- for (var i=0; i < g_commands.length; i++)
+ commands = [];
+ var added;
+ for (var i = 0; i < g_commands.length; i++, added = false)
{
- for (var j=0; j < g_commands[i][0].length; j++)
+ for (var j = 0; j < g_commands[i][0].length; j++)
{
if (g_commands[i][0][j] == cmd)
{
- return g_commands[i];
+ return g_commands[i]; //exact command, returning it
+ }
+ if (g_commands[i][0][j].indexOf(cmd) == 0)
+ {
+ if (!added)
+ {
+ commands.push(g_commands[i]);
+ added = true;
+ }
}
}
}
+ if (commands.length == 1)
+ return commands[0];
return null;
} // }}}
function execute_command(count, cmd, special, args) // {{{
{
var command = get_command(cmd);
- if (command == null)
+ if (command == null)
{
echoerr("E492: Not an editor command: " + cmd);
focusContent(false, false);
@@ -827,7 +854,7 @@ function execute_command(count, cmd, special, args) // {{{
if (command[3] == null)
{
- echoerr("E666: Internal error: command[2] == null");
+ echoerr("E666: Internal error: command[3] == null");
return;
}
@@ -1328,6 +1355,39 @@ function reload(all_tabs)
BrowserReload();
}
+function restart()
+{
+ // if (!arguments[1]) return;
+ const nsIAppStartup = Components.interfaces.nsIAppStartup;
+
+ // Notify all windows that an application quit has been requested.
+ var os = Components.classes["@mozilla.org/observer-service;1"]
+ .getService(Components.interfaces.nsIObserverService);
+ var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
+ .createInstance(Components.interfaces.nsISupportsPRBool);
+ os.notifyObservers(cancelQuit, "quit-application-requested", null);
+
+ // Something aborted the quit process.
+ if (cancelQuit.data)
+ return;
+
+ // Notify all windows that an application quit has been granted.
+ os.notifyObservers(null, "quit-application-granted", null);
+
+ // Enumerate all windows and call shutdown handlers
+ var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
+ .getService(Components.interfaces.nsIWindowMediator);
+ var windows = wm.getEnumerator(null);
+ while (windows.hasMoreElements())
+ {
+ var win = windows.getNext();
+ if (("tryToClose" in win) && !win.tryToClose())
+ return;
+ }
+ Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(nsIAppStartup)
+ .quit(nsIAppStartup.eRestart | nsIAppStartup.eAttemptQuit);
+}
+
// sets an vimperator option
function set(args, special)
{
@@ -1394,14 +1454,21 @@ function set(args, special)
else if (type == "charlist" || type == "stringlist" || type == "string")
{
var cur_val = setting[4].call(this);
- if (type == "charlist" || type == "string") {
+ if (type == "charlist" || type == "string")
+ {
if (oper == '+' && !cur_val.match(val))
val = cur_val + val;
if (oper == '-') val = cur_val.replace(val, '');
- } else {
+ }
+ else
+ {
if (oper == '+' && !cur_val.match(val))
val = cur_val + ',' + val;
- if (oper == '-') val = cur_val.replace(new RegExp(',?' + val), '');
+ if (oper == '-')
+ {
+ val = cur_val.replace(new RegExp(',?' + val), '');
+ val = val.replace(/^,?/, '');
+ }
}
if (setting[7] != null && setting[7].call(this, val) == false)
echoerr("Invalid argument to option " + setting[0][0] + ": Check help for more details");