diff --git a/common/content/completion.js b/common/content/completion.js index 1d8c35be..c4370555 100644 --- a/common/content/completion.js +++ b/common/content/completion.js @@ -54,7 +54,7 @@ const CompletionContext = Class("CompletionContext", { ["filters", "keys", "title", "quote"].forEach(function (key) self[key] = parent[key] && util.cloneObject(parent[key])); - ["anchored", "compare", "editor", "_filter", "filterFunc", "keys", "process", "top"].forEach(function (key) + ["anchored", "compare", "editor", "_filter", "filterFunc", "forceAnchored", "keys", "process", "top"].forEach(function (key) self[key] = parent[key]); self.__defineGetter__("value", function () this.top.value); @@ -96,6 +96,7 @@ const CompletionContext = Class("CompletionContext", { * @default true */ this.anchored = true; + this.forceAnchored = null; this.compare = function (a, b) String.localeCompare(a.text, b.text); /** @@ -405,6 +406,9 @@ const CompletionContext = Class("CompletionContext", { let self = this; delete this._substrings; + if (!this.forceAnchored) + this.anchored = options.get("wildanchor").getKey(this.name, this.anchored); + // Item matchers if (this.ignoreCase) this.matchString = this.anchored ? @@ -802,7 +806,7 @@ const Completion = Module("completion", { ); }, { - argCount: "1", + argCount: "*", completer: function (context, args) { let PREFIX = "/ex/contexts"; context.fork("ex", 0, completion, "ex"); @@ -849,6 +853,10 @@ const Completion = Module("completion", { completer: function (context) array(values(completion.urlCompleters)) }); + options.add(["wildanchor", "wia"], + "Regexp list defining which contexts require matches anchored to the begining of the result", + "regexlist", "!/ex/(back|buffer|ext|forward|help|undo),.*"); + options.add(["wildcase", "wic"], "Completion case matching mode", "regexmap", "smart", diff --git a/common/content/javascript.js b/common/content/javascript.js index e355310b..a60ecf6e 100644 --- a/common/content/javascript.js +++ b/common/content/javascript.js @@ -358,6 +358,7 @@ const JavaScript = Module("javascript", { offset: key.length }; + context.forceAnchored = true; // TODO: Make this a generic completion helper function. for (let [, obj] in Iterator(objects)) this.context.fork(obj[1], this._top.offset, this, this._fill, @@ -605,10 +606,7 @@ const JavaScript = Module("javascript", { "Switch on/off jsdebugger", "boolean", false, { setter: function (value) { - if (value) - services.get("debugger").on(); - else - services.get("debugger").off(); + services.get("debugger")[value ? "on" : "off"](); }, getter: function () services.get("debugger").isOn }); diff --git a/common/content/options.js b/common/content/options.js index ac58225c..08976352 100644 --- a/common/content/options.js +++ b/common/content/options.js @@ -382,11 +382,11 @@ const Option = Class("Option", { stringlist: function (k) this.values.indexOf(k) >= 0, get charlist() this.stringlist, - regexlist: function (k) { + regexlist: function (k, default_) { for (let re in values(this.values)) if (re.test(k)) return re.result; - return null; + return arguments.length > 1 ? default_ : null; }, get regexmap() this.regexlist }, diff --git a/common/locale/en-US/options.xml b/common/locale/en-US/options.xml index 599967f1..63079ee7 100644 --- a/common/locale/en-US/options.xml +++ b/common/locale/en-US/options.xml @@ -1376,6 +1376,24 @@ + + 'wia' 'wildanchor' + 'wildanchor' 'wia' + regexlist + !/ex/(back|buffer|ext|forward|help|undo),.* + +

+ Regular expression list defining which completion groups show only + matches anchored to the beginning of the result. The first + matching expression is the one that applies. If the match is + negated, then the current filter may match anywhere in the result. + If it is not negated, then the match may only occur at the + beginning of the result. If no items match, then a + context-dependent default value is used. +

+
+
+ 'wic' 'wildcase' 'wildcase' 'wic' diff --git a/pentadactyl/NEWS b/pentadactyl/NEWS index c927385b..c6913fc5 100644 --- a/pentadactyl/NEWS +++ b/pentadactyl/NEWS @@ -24,13 +24,14 @@ I.e., 'fo\o''bar' ≡ fo\o'bar * IMPORTANT: 'cdpath' and 'runtimepath' no longer treat ‘,,’ specially. Use ‘.’ instead. - * Replaced 'focuscontent' with 'strictfocus'. - * Added 'hintkeys' option. * Added 'altwildmode' and commandline key binding. - * Added 'banghist' option. - * Added ‘transliterated’ option to 'hintmatching'. * Added 'autocomplete' option for specifying which completion groups should be auto-completed. + * Added 'banghist' option. + * Added 'hintkeys' option. + * Replaced 'focuscontent' with 'strictfocus'. + * Added 'wildanchor' option. + * Added ‘transliterated’ option to 'hintmatching'. * Added -javascript option to :abbrev and :map. * Added several new options to :map. * Removed the :source line at the end of files generated by diff --git a/pentadactyl/TODO b/pentadactyl/TODO index 8a413356..f4e56397 100644 --- a/pentadactyl/TODO +++ b/pentadactyl/TODO @@ -42,7 +42,6 @@ BUGS: FEATURES: 9 Make 'loadplugins' a regexlist -9 Add 'wildanchor' option 9 Add quoting help tag 9 JavaScript completer: show function parameter spec 9 Fix the arbitrary distinction between 'hinttags' and