X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=common%2Fmodules%2Fbuffer.jsm;h=357beea6556566c60eac0ce21dad1b9a82224b55;hb=5ebd29f56d17f62011cdd596b1d351947ee534ff;hp=94b1692e762d840e0759af5834058630d003804b;hpb=9044153cb63835e39b9de8ec4ade237c03e3888a;p=dactyl.git diff --git a/common/modules/buffer.jsm b/common/modules/buffer.jsm index 94b1692..357beea 100644 --- a/common/modules/buffer.jsm +++ b/common/modules/buffer.jsm @@ -13,8 +13,9 @@ defineModule("buffer", { }, this); this.lazyRequire("finder", ["RangeFind"]); +this.lazyRequire("io", ["io"]); this.lazyRequire("overlay", ["overlay"]); -this.lazyRequire("storage", ["storage"]); +this.lazyRequire("storage", ["File", "storage"]); this.lazyRequire("template", ["template"]); /** @@ -72,7 +73,7 @@ var Buffer = Module("Buffer", { dactyl.assert(url instanceof Ci.nsIURL); while (count-- && url.path != "/") - url.path = url.path.replace(/[^\/]+\/*$/, ""); + url.path = url.path.replace(/[^\/]*\/*$/, ""); dactyl.assert(!url.equals(this.documentURI)); dactyl.open(url.spec); @@ -394,7 +395,7 @@ var Buffer = Module("Buffer", { function a(regexp, elem) regexp.test(elem.textContent) === regexp.result || Array.some(elem.childNodes, function (child) regexp.test(child.alt) === regexp.result); - function b(regexp, elem) regexp.test(elem.title); + function b(regexp, elem) regexp.test(elem.title) === regexp.result; let res = Array.filter(frame.document.querySelectorAll(selector), Hints.isVisible); for (let test in values([a, b])) @@ -456,10 +457,11 @@ var Buffer = Module("Buffer", { let { dactyl } = this.modules; let ctrlKey = false, shiftKey = false; + let button = 0; switch (dactyl.forceTarget || where) { case dactyl.NEW_TAB: case dactyl.NEW_BACKGROUND_TAB: - ctrlKey = true; + button = 1; shiftKey = dactyl.forceBackground != null ? dactyl.forceBackground : where != dactyl.NEW_BACKGROUND_TAB; break; @@ -475,7 +477,7 @@ var Buffer = Module("Buffer", { prefs.withContext(function () { prefs.set("browser.tabs.loadInBackground", true); let params = { - screenX: offsetX, screenY: offsetY, + button: button, screenX: offsetX, screenY: offsetY, ctrlKey: ctrlKey, shiftKey: shiftKey, metaKey: ctrlKey }; @@ -633,18 +635,24 @@ var Buffer = Module("Buffer", { | persist.PERSIST_FLAGS_REPLACE_EXISTING_FILES; let window = this.topWindow; + if (!file.exists()) + file.create(Ci.nsIFile.NORMAL_FILE_TYPE, octal(666)); + let downloadListener = new window.DownloadListener(window, services.Transfer(uri, File(file).URI, "", null, null, null, persist)); - persist.progressListener = update(Object.create(downloadListener), { - onStateChange: util.wrapCallback(function onStateChange(progress, request, flags, status) { - if (callback && (flags & Ci.nsIWebProgressListener.STATE_STOP) && status == 0) - util.trapErrors(callback, self, uri, file, progress, request, flags, status); + if (callback) + persist.progressListener = update(Object.create(downloadListener), { + onStateChange: util.wrapCallback(function onStateChange(progress, request, flags, status) { + if (callback && (flags & Ci.nsIWebProgressListener.STATE_STOP) && status == 0) + util.trapErrors(callback, self, uri, file, progress, request, flags, status); - return onStateChange.superapply(this, arguments); - }) - }); + return onStateChange.superapply(this, arguments); + }) + }); + else + persist.progressListener = downloadListener; persist.saveURI(uri, null, null, null, null, file); }, @@ -1580,18 +1588,19 @@ var Buffer = Module("Buffer", { dactyl.assert(!arg || arg[0] == ">" && !config.OS.isWindows, _("error.trailingCharacters")); - const PRINTER = "PostScript/default"; - const BRANCH = "print.printer_" + PRINTER + "."; + const PRINTER = "PostScript/default"; + const BRANCH = "printer_" + PRINTER + "."; + const BRANCHES = ["print.", BRANCH, "print." + BRANCH]; + function set(pref, value) { + BRANCHES.forEach(function (branch) { prefs.set(branch + pref, value) }); + } prefs.withContext(function () { if (arg) { prefs.set("print.print_printer", PRINTER); - prefs.set( "print.print_to_file", true); - prefs.set(BRANCH + "print_to_file", true); - - prefs.set( "print.print_to_filename", io.File(arg.substr(1)).path); - prefs.set(BRANCH + "print_to_filename", io.File(arg.substr(1)).path); + set("print_to_file", true); + set("print_to_filename", io.File(arg.substr(1)).path); dactyl.echomsg(_("print.toFile", arg.substr(1))); } @@ -1599,19 +1608,21 @@ var Buffer = Module("Buffer", { dactyl.echomsg(_("print.sending")); prefs.set("print.always_print_silent", args.bang); - prefs.set("print.show_print_progress", !args.bang); + if (false) + prefs.set("print.show_print_progress", !args.bang); config.browser.contentWindow.print(); }); - if (arg) - dactyl.echomsg(_("print.printed", arg.substr(1))); - else - dactyl.echomsg(_("print.sent")); + dactyl.echomsg(_("print.sent")); }, { argCount: "?", bang: true, + completer: function (context, args) { + if (args.bang && /^>/.test(context.filter)) + context.fork("file", 1, modules.completion, "file"); + }, literal: 0 }); @@ -1806,7 +1817,8 @@ var Buffer = Module("Buffer", { context.incomplete = false; try { if (/filename="(.*?)"/.test(xhr.getResponseHeader("Content-Disposition"))) - context.completions.push([decodeURIComponent(RegExp.$1), _("buffer.save.suggested")]); + context.completions.push([decodeURIComponent(RegExp.$1), + _("buffer.save.suggested")]); } finally { context.completions = context.completions.slice(); @@ -2020,7 +2032,7 @@ var Buffer = Module("Buffer", { mappings.add([modes.NORMAL], ["[[", ""], "Follow the link labeled 'prev', 'previous' or '<' if it exists", function (args) { - buffer.findLink("previous", options["previouspattern"], (args.count || 1) - 1, true); + buffer.findLink("prev", options["previouspattern"], (args.count || 1) - 1, true); }, { count: true }); @@ -2230,11 +2242,14 @@ var Buffer = Module("Buffer", { options.add(["linenumbers", "ln"], "Patterns used to determine line numbers used by G", "sitemap", { + // Make sure to update the docs when you change this. + "view-source:*": 'body,[id^=line]', "code.google.com": '#nums [id^="nums_table"] a[href^="#"]', "github.com": '.line_numbers>*', "mxr.mozilla.org": 'a.l', "pastebin.com": '#code_frame>div>ol>li', "addons.mozilla.org": '.gutter>.line>a', + "bugzilla.mozilla.org": ".bz_comment:not(.bz_first_comment):not(.ih_history)", "*": '/* Hgweb/Gitweb */ .completecodeline a.codeline, a.linenr' }, { @@ -2277,12 +2292,12 @@ var Buffer = Module("Buffer", { options.add(["nextpattern"], "Patterns to use when guessing the next page in a document sequence", - "regexplist", UTF8(/'\bnext\b',^>$,^(>>|»)$,^(>|»),(>|»)$,'\bmore\b'/.source), + "regexplist", UTF8(/'^Next [>»]','^Next »','\bnext\b',^>$,^(>>|»)$,^(>|»),(>|»)$,'\bmore\b'/.source), { regexpFlags: "i" }); options.add(["previouspattern"], "Patterns to use when guessing the previous page in a document sequence", - "regexplist", UTF8(/'\bprev|previous\b',^<$,^(<<|«)$,^(<|«),(<|«)$/.source), + "regexplist", UTF8(/'[<«] Prev$','« Prev$','\bprev(ious)?\b',^<$,^(<<|«)$,^(<|«),(<|«)$/.source), { regexpFlags: "i" }); options.add(["pageinfo", "pa"],