]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/content/editor.js
Imported Upstream version 1.1+hg7904
[dactyl.git] / common / content / editor.js
index 01a25ebddb60346e5412d735ae2422b5716a99e1..38153e48fae087863ca8516a4746385aabb04b82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2011 Kris Maglione <maglione.k at Gmail>
+// Copyright (c) 2008-2014 Kris Maglione <maglione.k at Gmail>
 // Copyright (c) 2006-2009 by Martin Stubenschrott <stubenschrott@vimperator.org>
 //
 // This work is licensed for reuse under an MIT license. Details are
@@ -46,7 +46,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         }, this);
     },
 
-    defaultRegister: "*",
+    defaultRegister: "*+",
 
     selectionRegisters: {
         "*": "selection",
@@ -64,11 +64,12 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         if (name == null)
             name = editor.currentRegister || editor.defaultRegister;
 
+        name = String(name)[0];
         if (name == '"')
             name = 0;
         if (name == "_")
             var res = null;
-        else if (Set.has(this.selectionRegisters, name))
+        else if (hasOwnProperty(this.selectionRegisters, name))
             res = { text: dactyl.clipboardRead(this.selectionRegisters[name]) || "" };
         else if (!/^[0-9]$/.test(name))
             res = this.registers.get(name);
@@ -101,17 +102,19 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             value = DOM.stringify(value);
         value = { text: value, isLine: modes.extended & modes.LINE, timestamp: Date.now() * 1000 };
 
-        if (name == '"')
-            name = 0;
-        if (name == "_")
-            ;
-        else if (Set.has(this.selectionRegisters, name))
-            dactyl.clipboardWrite(value.text, verbose, this.selectionRegisters[name]);
-        else if (!/^[0-9]$/.test(name))
-            this.registers.set(name, value);
-        else {
-            this.registerRing.insert(value, name);
-            this.registerRing.truncate(10);
+        for (let n of String(name)) {
+            if (n == '"')
+                n = 0;
+            if (n == "_")
+                ;
+            else if (hasOwnProperty(this.selectionRegisters, n))
+                dactyl.clipboardWrite(value.text, verbose, this.selectionRegisters[n]);
+            else if (!/^[0-9]$/.test(n))
+                this.registers.set(n, value);
+            else {
+                this.registerRing.insert(value, n);
+                this.registerRing.truncate(10);
+            }
         }
     },
 
@@ -304,7 +307,9 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
 
         // Skip to any requested offset.
         count = Math.abs(offset);
-        Editor.extendRange(range, offset > 0, { test: function (c) !!count-- }, true);
+        Editor.extendRange(range, offset > 0,
+                           { test: c => !!count-- },
+                           true);
         range.collapse(offset < 0);
 
         return range;
@@ -381,11 +386,11 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             textBox = null;
 
         let line, column;
-        let keepFocus = modes.stack.some(function (m) isinstance(m.main, modes.COMMAND_LINE));
+        let keepFocus = modes.stack.some(m => isinstance(m.main, modes.COMMAND_LINE));
 
         if (!forceEditing && textBox && textBox.type == "password") {
-            commandline.input(_("editor.prompt.editPassword") + " ",
-                function (resp) {
+            commandline.input(_("editor.prompt.editPassword") + " ")
+                .then(function (resp) {
                     if (resp && resp.match(/^y(es)?$/i))
                         editor.editFieldExternally(true);
                 });
@@ -400,7 +405,9 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             var editor_ = window.GetCurrentEditor ? GetCurrentEditor()
                                                   : Editor.getEditor(document.commandDispatcher.focusedWindow);
             dactyl.assert(editor_);
-            text = Array.map(editor_.rootElement.childNodes, function (e) DOM.stringify(e, true)).join("");
+            text = Array.map(editor_.rootElement.childNodes,
+                             e => DOM.stringify(e, true))
+                        .join("");
 
             if (!editor_.selection.rangeCount)
                 var sel = "";
@@ -420,7 +427,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         column = 1 + pre.replace(/[^]*\n/, "").length;
 
         let origGroup = DOM(textBox).highlight.toString();
-        let cleanup = util.yieldable(function cleanup(error) {
+        let cleanup = promises.task(function cleanup(error) {
             if (timer)
                 timer.cancel();
 
@@ -439,9 +446,11 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
                 DOM(textBox).highlight.remove("EditorEditing");
                 if (!keepFocus)
                     dactyl.focus(textBox);
+
                 for (let group in values(blink.concat(blink, ""))) {
                     highlight.highlightNode(textBox, origGroup + " " + group);
-                    yield 100;
+
+                    yield promises.sleep(100);
                 }
             }
         });
@@ -756,9 +765,9 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
     completion: function initCompletion() {
         completion.register = function complete_register(context) {
             context = context.fork("registers");
-            context.keys = { text: util.identity, description: editor.closure.getRegister };
+            context.keys = { text: util.identity, description: editor.bound.getRegister };
 
-            context.match = function (r) !this.filter || ~this.filter.indexOf(r);
+            context.match = function (r) !this.filter || this.filter.contains(r);
 
             context.fork("clipboard", 0, this, function (ctxt) {
                 ctxt.match = context.match;
@@ -1131,7 +1140,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
              "<*-Home>", "<*-End>", "<*-PageUp>", "<*-PageDown>",
              "<M-c>", "<M-v>", "<*-Tab>"],
             "Handled by " + config.host,
-            function () Events.PASS_THROUGH);
+            () => Events.PASS_THROUGH);
 
         mappings.add([modes.INSERT],
             ["<Space>", "<Return>"], "Expand Insert mode abbreviation",
@@ -1316,7 +1325,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
                 var range = editor.selectedRange;
                 if (range.collapsed) {
                     count = count || 1;
-                    Editor.extendRange(range, true, { test: function (c) !!count-- }, true);
+                    Editor.extendRange(range, true, { test: c => !!count-- }, true);
                 }
                 editor.mungeRange(range, munger, count != null);
 
@@ -1327,19 +1336,19 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         let bind = function bind(...args) mappings.add.apply(mappings, [[modes.AUTOCOMPLETE]].concat(args));
 
         bind(["<Esc>"], "Return to Insert mode",
-             function () Events.PASS_THROUGH);
+             () => Events.PASS_THROUGH);
 
         bind(["<C-[>"], "Return to Insert mode",
              function () { events.feedkeys("<Esc>", { skipmap: true }); });
 
         bind(["<Up>"], "Select the previous autocomplete result",
-             function () Events.PASS_THROUGH);
+             () => Events.PASS_THROUGH);
 
         bind(["<C-p>"], "Select the previous autocomplete result",
              function () { events.feedkeys("<Up>", { skipmap: true }); });
 
         bind(["<Down>"], "Select the next autocomplete result",
-             function () Events.PASS_THROUGH);
+             () => Events.PASS_THROUGH);
 
         bind(["<C-n>"], "Select the next autocomplete result",
              function () { events.feedkeys("<Down>", { skipmap: true }); });
@@ -1349,17 +1358,22 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             "The external text editor",
             "string", 'gvim -f +<line> +"sil! call cursor(0, <column>)" <file>', {
                 format: function (obj, value) {
-                    let args = commands.parseArgs(value || this.value, { argCount: "*", allowUnknownOptions: true })
-                                       .map(util.compileMacro).filter(function (fmt) fmt.valid(obj))
-                                       .map(function (fmt) fmt(obj));
+                    let args = commands.parseArgs(value || this.value,
+                                                  { argCount: "*", allowUnknownOptions: true })
+                                       .map(util.compileMacro)
+                                       .filter(fmt => fmt.valid(obj))
+                                       .map(fmt => fmt(obj));
+
                     if (obj["file"] && !this.has("file"))
                         args.push(obj["file"]);
                     return args;
                 },
-                has: function (key) Set.has(util.compileMacro(this.value).seen, key),
+                has: function (key) util.compileMacro(this.value).seen.has(key),
                 validator: function (value) {
                     this.format({}, value);
-                    return Object.keys(util.compileMacro(value).seen).every(function (k) ["column", "file", "line"].indexOf(k) >= 0);
+                    let allowed = RealSet(["column", "file", "line"]);
+                    return [k for (k of util.compileMacro(value).seen)]
+                                .every(k => allowed.has(k));
                 }
             });