minibuffer.read_object_property: replacement for complete_with_mappings
authorJohn Foerch <jjfoerch@earthlink.net>
Sun, 2 Dec 2012 04:04:53 +0000 (1 23:04 -0500)
committerJohn Foerch <jjfoerch@earthlink.net>
Sun, 2 Dec 2012 04:43:41 +0000 (1 23:43 -0500)
complete_with_mappings was misnamed, miscategorized, and generally a bad
way to do what it did.

resolves issue426

modules/minibuffer-completion.js
modules/minibuffer-read.js
modules/page-modes/wikipedia.js

index 929df24..f1811b9 100644 (file)
@@ -355,25 +355,4 @@ function nest_completions (completions, prefix, suffix) {
 }
 
 
-/**
- * Generic simple completer for associative arrays.
- *
- * - `options' is an associative array, where the key represents a string that the
- *   user can complete to.
- * - `prompt' is the string to show in the minibuffer.
- */
-function completer_with_mappings (options, prompt) {
-    var completer = all_word_completer(
-        $completions = function (push) {
-            for (var i in options)
-                push(i);
-        });
-    yield co_return(
-        yield get_recent_conkeror_window().minibuffer.read(
-            $prompt = prompt,
-            $completer = completer
-        )
-    );
-}
-
 provide("minibuffer-completion");
index fde7669..6911507 100644 (file)
@@ -577,4 +577,23 @@ minibuffer.prototype.read_preference = function () {
     yield co_return(result);
 };
 
+
+define_keywords("$object");
+minibuffer.prototype.read_object_property = function () {
+    keywords(arguments,
+             $prompt = "Property:");
+    var o = arguments.$object || {};
+    var result = yield this.read(
+        $prompt = arguments.$prompt,
+        $completer = new prefix_completer(
+            $completions = function (push) {
+                for (var i in o)
+                    push(i);
+            }),
+        $match_required,
+        $space_completes);
+    yield co_return(result);
+};
+
+
 provide("minibuffer-read");
index dfb6a15..9556a32 100644 (file)
@@ -14,9 +14,6 @@
  * - Probably more to come.
  **/
 
-require("minibuffer-completion.js");
-
-
 /*** VARIABLES ***/
 
 define_variable("wikipedia_didyoumean_follow_first_hit", false,
@@ -116,7 +113,9 @@ interactive("wikipedia-other-language",
     "Queries the user for another language to view the current article in.",
     function (I) {
         var options = wikipedia_other_language(I);
-        var chosen = yield completer_with_mappings(options, "Languages:");
+        var chosen = yield I.minibuffer.read_object_property(
+            $prompt = "Languages:",
+            $object = options);
         I.buffer.document.location = options[chosen];
     });