diff --git a/common/content/commandline.js b/common/content/commandline.js index fb4a8cd7..7be14c3e 100644 --- a/common/content/commandline.js +++ b/common/content/commandline.js @@ -479,8 +479,10 @@ const CommandLine = Module("commandline", { this.hideCompletions(); if (!this._keepCommand || this._silent || this._quiet) { - commandline.updateMorePrompt(); - this.hide(); + modes.delay(function () { + this.updateMorePrompt(); + this.hide(); + }, this); } }, @@ -490,7 +492,7 @@ const CommandLine = Module("commandline", { return this._lastCommand; }, set command(val) { - if (this.commandVisible) + if (this.commandVisible && (modes.extended & modes.EX)) return this.widgets.command = val; return this._lastCommand = val; }, diff --git a/common/content/help.xsl b/common/content/help.xsl index e844c9d0..727e21ed 100644 --- a/common/content/help.xsl +++ b/common/content/help.xsl @@ -232,9 +232,13 @@ (default: - + + + + (empty) + diff --git a/common/content/hints.js b/common/content/hints.js index a5638970..758ca533 100644 --- a/common/content/hints.js +++ b/common/content/hints.js @@ -72,7 +72,14 @@ const Hints = Module("hints", { _reset: function (slight) { if (!slight) { this.__reset(); + this.prevInput = ""; + this.escNumbers = false; + this._usedTabKey = false; this._canUpdate = false; + this._hintNumber = 0; + this._hintString = ""; + statusline.updateInputBuffer(""); + commandline.command = ""; } this._pageHints = []; this._validHints = []; @@ -83,13 +90,8 @@ const Hints = Module("hints", { this._activeTimeout = null; }, __reset: function () { - statusline.updateInputBuffer(""); - this._hintString = ""; - this._hintNumber = 0; - this._usedTabKey = false; - this.prevInput = ""; - this.escNumbers = false; - commandline.command = ""; + if (!this._usedTabKey) + this._hintNumber = 0; }, /** @@ -478,7 +480,8 @@ const Hints = Module("hints", { let top = this._top; if (this._continue) { this.__reset(); - this._showHints(); + if (this._validHints.length <= 1) + this._showHints(); } else { this._removeHints(timeout); @@ -491,7 +494,8 @@ const Hints = Module("hints", { if ((modes.extended & modes.HINTS) && !this._continue) modes.pop(); commandline._lastEcho = null; // Hack. - this._hintMode.action(elem, elem.href || "", this._extendedhintCount, top); + this._hintMode.action(elem, elem.href || elem.src || "", + this._extendedhintCount, top); }, timeout); return true; }, @@ -764,7 +768,10 @@ const Hints = Module("hints", { commandline.input(this._hintMode.prompt + ": ", null, { extended: modes.HINTS, - leave: function () { hints.hide(); }, + leave: function (stack) { + if (!stack.push) + hints.hide(); + }, onChange: this.closure._onInput }); modes.extended = modes.HINTS; @@ -1078,7 +1085,9 @@ const Hints = Module("hints", { options.add(["extendedhinttags", "eht"], "XPath string of hintable elements activated by ';'", - "regexmap", "[iI]:" + Option.quote(util.makeXPath(["img"])), + "regexmap", "[iI]:" + Option.quote(util.makeXPath(["img"])) + + ",[OTivVWy]:" + Option.quote(util.makeXPath( + ["{a,area}[@href]", "{img,iframe}[@src]"])), { validator: Option.validateXPath }); options.add(["hinttags", "ht"], diff --git a/common/content/modes.js b/common/content/modes.js index ec78fca5..141c6afa 100644 --- a/common/content/modes.js +++ b/common/content/modes.js @@ -185,6 +185,9 @@ const Modes = Module("modes", { this.show(); }, + delayed: [], + delay: function (callback, self) { this.delayed.push([callback, self]) }, + save: function (id, obj, prop) { if (!(id in this.boundProperties)) for (let elem in values(this._modeStack)) @@ -226,9 +229,18 @@ const Modes = Module("modes", { } } + this.delayed.forEach(function ([fn, self]) fn.call(self)); + this.delayed = []; + let prev = stack && stack.pop || this.topOfStack; if (push) this._modeStack.push(push); + + if (stack && stack.pop) { + for (let [k, { obj, prop, value }] in Iterator(this.topOfStack.saved)) + obj[prop] = value; + } + if (this.topOfStack.params.enter && prev) this.topOfStack.params.enter(push ? { push: push } : stack || {}, prev); @@ -244,10 +256,8 @@ const Modes = Module("modes", { pop: function (mode) { while (this._modeStack.length > 1 && this.main != mode) { let a = this._modeStack.pop(); - this.set(this.topOfStack.main, this.topOfStack.extended, this.topOfStack.params, { pop: a }); - - for (let [k, { obj, prop, value }] in Iterator(this.topOfStack.saved)) - obj[prop] = value; + this.set(this.topOfStack.main, this.topOfStack.extended, this.topOfStack.params, + { pop: a }); if (mode == null) return; diff --git a/common/locale/en-US/autocommands.xml b/common/locale/en-US/autocommands.xml index 3de965dc..e2a06c3b 100644 --- a/common/locale/en-US/autocommands.xml +++ b/common/locale/en-US/autocommands.xml @@ -96,13 +96,11 @@ :autocmd LocationChange .* js modes.passAllKeys = /(www|mail)\.google\.com/.test(buffer.URL) -

- Set the filetype to mail when editing email at Gmail: -

+

Set the filetype to mail when editing email at Gmail:

-:autocmd LocationChange .* :set editor=gvim -f -:autocmd LocationChange 'mail\.google\.com' :set editor=gvim -f -c 'set ft=mail' +:autocmd LocationChange !'mail\.google\.com' :set editor=gvim -f +:autocmd LocationChange 'mail\.google\.com' :set editor=gvim -f -c 'set ft=mail' diff --git a/common/locale/en-US/options.xml b/common/locale/en-US/options.xml index 5cddc7c7..9ba44d68 100644 --- a/common/locale/en-US/options.xml +++ b/common/locale/en-US/options.xml @@ -320,7 +320,7 @@ 'activate' 'act' stringlist addons,downloads,extoptions,help, - homepage,quickmark,tabopen,paste + homepage,quickmark,tabopen,paste

A list of items which, when opened in a new tab, are @@ -556,7 +556,11 @@ 'extendedhinttags' 'eht' regexmap - [iI]:'//img | //xhtml:img' + [iI]:'//img | //xhtml:img', + [OTivVWy]:'//a[@href] | //xhtml:a[@href] | + //area[@href] | //xhtml:area[@href] | + //img[@src] | //xhtml:img[@src] | + //iframe[@src] | //xhtml:iframe[@src]'

Defines specialized XPath expressions for arbitrary @@ -891,7 +895,7 @@ 'noloadplugins' 'loadplugins' 'loadplugins' 'lpl' regexlist - \.(js|&dactyl.fileExt;)$ + '\.(js|&dactyl.fileExt;)$'

A regular expression list that defines which plugins are loaded at @@ -1000,7 +1004,7 @@ 'nextpattern' 'nextpattern' stringlist - \bnext,^>$,^(>>|»)$,^(>|»),(>|»)$,\bmore\b + '\bnext',^>$,'^(>>|»)$','^(>|»)','(>|»)$','\bmore\b'

Patterns to use when guessing the next page in a document @@ -1393,7 +1397,7 @@ 'wia' 'wildanchor' 'wildanchor' 'wia' regexlist - !/ex/(back|buffer|ext|forward|help|undo) + !'/ex/(back|buffer|ext|forward|help|undo)'

Regular expression list defining which completion groups show only diff --git a/common/modules/util.jsm b/common/modules/util.jsm index 3d4ecf10..311932f0 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -244,7 +244,7 @@ const Util = Module("Util", { let stack = Error().stack.replace(/(?:.*\n){2}/, ""); if (frames != null) [stack] = stack.match(RegExp("(?:.*\n){0," + frames + "}")); - util.dump((msg || "Stack") + "\n" + stack + "\n"); + util.dump((arguments.length == 0 ? "Stack" : msg) + "\n" + stack + "\n"); }, /**