]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/content/editor.js
Import r6923 from upstream hg supporting Firefox up to 22.0a1
[dactyl.git] / common / content / editor.js
index 262391ece5c0696b42388e4cc65c8082146a2764..eef3c1ded03f38f4fecd42e038b8c192b47dafa3 100644 (file)
@@ -3,7 +3,7 @@
 //
 // This work is licensed for reuse under an MIT license. Details are
 // given in the LICENSE.txt file included with this file.
-/* use strict */
+"use strict";
 
 /** @scope modules */
 
@@ -168,14 +168,14 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             this.setRegister(name, range);
     },
 
-    cut: function cut(range, name) {
+    cut: function cut(range, name, noStrip) {
         if (range)
             this.selectedRange = range;
 
         if (!this.selection.isCollapsed)
             this.setRegister(name, this.selection);
 
-        this.editor.deleteSelection(0);
+        this.editor.deleteSelection(0, this.editor[noStrip ? "eNoStrip" : "eStrip"]);
     },
 
     paste: function paste(name) {
@@ -280,7 +280,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         }
     },
 
-    findChar: function findNumber(key, count, backward, offset) {
+    findChar: function findChar(key, count, backward, offset) {
         count  = count || 1; // XXX ?
         offset = (offset || 0) - !!backward;
 
@@ -455,7 +455,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             if (textBox) {
                 textBox.value = val;
 
-                if (false) {
+                if (true) {
                     let elem = DOM(textBox);
                     elem.attrNS(NS, "modifiable", true)
                         .style.MozUserInput;
@@ -688,7 +688,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         return DOM(elem).editor;
     }
 }, {
-    modes: function init_modes() {
+    modes: function initModes() {
         modes.addMode("OPERATOR", {
             char: "o",
             description: "Mappings which move the cursor",
@@ -745,7 +745,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             bases: [modes.INSERT]
         });
     },
-    commands: function init_commands() {
+    commands: function initCommands() {
         commands.add(["reg[isters]"],
             "List the contents of known registers",
             function (args) {
@@ -753,7 +753,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             },
             { argCount: "*" });
     },
-    completion: function init_completion() {
+    completion: function initCompletion() {
         completion.register = function complete_register(context) {
             context = context.fork("registers");
             context.keys = { text: util.identity, description: editor.closure.getRegister };
@@ -777,20 +777,22 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
             });
         };
     },
-    mappings: function init_mappings() {
+    mappings: function initMappings() {
 
         Map.types["editor"] = {
             preExecute: function preExecute(args) {
                 if (editor.editor && !this.editor) {
                     this.editor = editor.editor;
-                    this.editor.beginTransaction();
+                    if (!this.noTransaction)
+                        this.editor.beginTransaction();
                 }
                 editor.inEditMap = true;
             },
             postExecute: function preExecute(args) {
                 editor.inEditMap = false;
                 if (this.editor) {
-                    this.editor.endTransaction();
+                    if (!this.noTransaction)
+                        this.editor.endTransaction();
                     this.editor = null;
                 }
             },
@@ -1033,7 +1035,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         }
 
         addMotionMap(["d", "x"], "Delete text", true,  function (editor) { editor.cut(); });
-        addMotionMap(["c"],      "Change text", true,  function (editor) { editor.cut(); }, modes.INSERT);
+        addMotionMap(["c"],      "Change text", true,  function (editor) { editor.cut(null, null, true); }, modes.INSERT);
         addMotionMap(["y"],      "Yank text",   false, function (editor, range) { editor.copy(range); }, null, true);
 
         addMotionMap(["gu"], "Lowercase text", false,
@@ -1158,17 +1160,17 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         // text edit mode
         bind(["u"], "Undo changes",
              function (args) {
-                 editor.executeCommand("cmd_undo", Math.max(args.count, 1));
+                 editor.editor.undo(Math.max(args.count, 1));
                  editor.deselect();
              },
-             { count: true });
+             { count: true, noTransaction: true });
 
         bind(["<C-r>"], "Redo undone changes",
              function (args) {
-                 editor.executeCommand("cmd_redo", Math.max(args.count, 1));
+                 editor.editor.redo(Math.max(args.count, 1));
                  editor.deselect();
              },
-             { count: true });
+             { count: true, noTransaction: true });
 
         bind(["D"], "Delete characters from the cursor to the end of the line",
              function () { editor.executeCommand("cmd_deleteToEndOfLine"); });
@@ -1344,7 +1346,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
         bind(["<C-n>"], "Select the next autocomplete result",
              function () { events.feedkeys("<Down>", { skipmap: true }); });
     },
-    options: function init_options() {
+    options: function initOptions() {
         options.add(["editor"],
             "The external text editor",
             "string", 'gvim -f +<line> +"sil! call cursor(0, <column>)" <file>', {
@@ -1389,7 +1391,7 @@ var Editor = Module("editor", XPCOM(Ci.nsIEditActionListener, ModuleBase), {
                 }
             });
     },
-    sanitizer: function () {
+    sanitizer: function initSanitizer() {
         sanitizer.addItem("registers", {
             description: "Register values",
             persistent: true,