"content-document-global-created": function (win, uri) {
let top = util.topWindow(win);
- if (top == window)
- this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href != "null" ? window.location.href : uri);
+ if (uri == "null")
+ uri = null;
+
+ if (top == window && (win.location.href || uri))
+ this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href || uri);
}
},
title: doc.title
};
- if (dactyl.has("tabs")) {
+ if (!dactyl.has("tabs"))
+ update(args, { doc: doc, win: doc.defaultView });
+ else {
args.tab = tabs.getContentIndex(doc) + 1;
args.doc = {
valueOf: function () doc,
toString: function () "tabs.getTab(" + (args.tab - 1) + ").linkedBrowser.contentDocument"
};
+ args.win = {
+ valueOf: function () doc.defaultView,
+ toString: function () "tabs.getTab(" + (args.tab - 1) + ").linkedBrowser.contentWindow"
+ };
}
autocommands.trigger(name, args);
progressListener: {
// XXX: function may later be needed to detect a canceled synchronous openURL()
onStateChange: util.wrapCallback(function onStateChange(webProgress, request, flags, status) {
- onStateChange.superapply(this, arguments);
- // STATE_IS_DOCUMENT | STATE_IS_WINDOW is important, because we also
- // receive statechange events for loading images and other parts of the web page
- if (flags & (Ci.nsIWebProgressListener.STATE_IS_DOCUMENT | Ci.nsIWebProgressListener.STATE_IS_WINDOW)) {
+ const L = Ci.nsIWebProgressListener;
+
+ if (request)
dactyl.applyTriggerObserver("browser.stateChange", arguments);
+
+ if (flags & (L.STATE_IS_DOCUMENT | L.STATE_IS_WINDOW)) {
// This fires when the load event is initiated
// only thrown for the current tab, not when another tab changes
- if (flags & Ci.nsIWebProgressListener.STATE_START) {
+ if (flags & L.STATE_START) {
while (document.commandDispatcher.focusedWindow == webProgress.DOMWindow
&& modes.have(modes.INPUT))
modes.pop();
}
- else if (flags & Ci.nsIWebProgressListener.STATE_STOP) {
+ else if (flags & L.STATE_STOP) {
// Workaround for bugs 591425 and 606877, dactyl bug #81
config.browser.mCurrentBrowser.collapsed = false;
if (!dactyl.focusedElement || dactyl.focusedElement === document.documentElement)
dactyl.focusContent();
}
}
+
+ onStateChange.superapply(this, arguments);
}),
onSecurityChange: util.wrapCallback(function onSecurityChange(webProgress, request, state) {
onSecurityChange.superapply(this, arguments);
["o"], "Open one or more URLs",
function () { CommandExMode().open("open "); });
+ function decode(uri) util.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",
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",
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], ["~"],
+ mappings.add([modes.NORMAL], ["<open-home-directory>", "~"],
"Open home directory",
function () { dactyl.open("~"); });
- mappings.add([modes.NORMAL], ["gh"],
+ mappings.add([modes.NORMAL], ["<open-homepage>", "gh"],
"Open homepage",
function () { BrowserHome(); });
- mappings.add([modes.NORMAL], ["gH"],
+ mappings.add([modes.NORMAL], ["<tab-open-homepage>", "gH"],
"Open homepage in a new tab",
function () {
let homepages = gHomeButton.getHomePage();
dactyl.open(homepages, { from: "homepage", where: dactyl.NEW_TAB });
});
- mappings.add([modes.MAIN], ["<C-l>"],
+ mappings.add([modes.MAIN], ["<redraw-screen>", "<C-l>"],
"Redraw the screen",
function () { ex.redraw(); });
}