diff --git a/common/content/browser.js b/common/content/browser.js index 746b46ec..86383fac 100644 --- a/common/content/browser.js +++ b/common/content/browser.js @@ -200,9 +200,13 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), ["o"], "Open one or more URLs", function () { CommandExMode().open("open "); }); + function decode(uri) statusline.losslessDecodeURI(uri) + .replace(/%20(?!(?:%20)*$)/g, " ") + .replace(RegExp(options["urlseparator"], "g"), encodeURIComponent); + mappings.add([modes.NORMAL], ["O"], "Open one or more URLs, based on current location", - function () { CommandExMode().open("open " + buffer.uri.spec); }); + function () { CommandExMode().open("open " + decode(buffer.uri.spec)); }); mappings.add([modes.NORMAL], ["t"], "Open one or more URLs in a new tab", @@ -210,7 +214,7 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), mappings.add([modes.NORMAL], ["T"], "Open one or more URLs in a new tab, based on current location", - function () { CommandExMode().open("tabopen " + buffer.uri.spec); }); + function () { CommandExMode().open("tabopen " + decode(buffer.uri.spec)); }); mappings.add([modes.NORMAL], ["w"], "Open one or more URLs in a new window", @@ -218,7 +222,7 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), mappings.add([modes.NORMAL], ["W"], "Open one or more URLs in a new window, based on current location", - function () { CommandExMode().open("winopen " + buffer.uri.spec); }); + function () { CommandExMode().open("winopen " + decode(buffer.uri.spec)); }); mappings.add([modes.NORMAL], ["~"], "Open home directory", diff --git a/common/content/buffer.js b/common/content/buffer.js index 9a542a7d..ddd0c206 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -1752,7 +1752,7 @@ var Buffer = Module("buffer", { function () { let url = dactyl.clipboardRead(); dactyl.assert(url, _("error.clipboardEmpty")); - dactyl.open(url); + dactyl.open(url.replace(/\s+/g, "")); }); mappings.add([modes.NORMAL], ["P", ""], @@ -1760,7 +1760,7 @@ var Buffer = Module("buffer", { function () { let url = dactyl.clipboardRead(); dactyl.assert(url, _("error.clipboardEmpty")); - dactyl.open(url, { from: "paste", where: dactyl.NEW_TAB }); + dactyl.open(url.replace(/\s+/g, ""), { from: "paste", where: dactyl.NEW_TAB }); }); // reloading diff --git a/common/content/dactyl.js b/common/content/dactyl.js index c7bbb11e..679f94d1 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -1307,7 +1307,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { // If it starts with a valid protocol, pass it through. let proto = /^([-\w]+):/.exec(url); if (proto && "@mozilla.org/network/protocol;1?name=" + proto[1] in Cc) - return url.replace(/\s+/g, ""); + return url; // Check for a matching search keyword. let searchURL = this.has("bookmarks") && bookmarks.getSearchURL(url, false); @@ -1681,7 +1681,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { options.add(["urlseparator", "urlsep", "us"], "The regular expression used to separate multiple URLs in :open and friends", - "string", "\\|", + "string", " \\| ", { validator: function (value) RegExp(value) }); options.add(["verbose", "vbs"],