add home/end support in rxvt and readline tests
authorJohan Euphrosine <proppy@aminche.com>
Sun, 22 Aug 2010 03:55:34 +0000 (05:55 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Mon, 23 Aug 2010 08:46:14 +0000 (01:46 -0700)
lib/readline.js
test/simple/test-readline.js [new file with mode: 0644]

index 2b2c18c..e8f4d54 100644 (file)
@@ -361,10 +361,14 @@ Interface.prototype._ttyWrite = function (b) {
           this.cursor++;
           this.output.write('\x1b[0C');
         }
-      } else if ((b[1] === 91 || b[1] === 79) && b[2] === 72) { // home
+      } else if ((b[1] === 91 && b[2] === 72) ||
+                 (b[1] === 79 && b[2] === 72) ||
+                 (b[1] === 91 && b[2] === 55)) { // home
         this.cursor = 0;
         this._refreshLine();
-      } else if ((b[1] === 91 || b[1] === 79) && b[2] === 70) { // end
+      } else if ((b[1] === 91 && b[2] === 70) ||
+                 (b[1] === 79 && b[2] === 70) ||
+                 (b[1] === 91 && b[2] === 56)) { // end
         this.cursor = this.line.length;
         this._refreshLine();
       } else if (b[1] === 91 && b[2] === 65) { // up arrow
diff --git a/test/simple/test-readline.js b/test/simple/test-readline.js
new file mode 100644 (file)
index 0000000..af1b73c
--- /dev/null
@@ -0,0 +1,43 @@
+common = require("../common");
+assert = common.assert;
+var readline = require("readline");
+
+var key = {
+  xterm: {
+    home: [27, 91, 72],
+    end: [27, 91, 70]
+  },
+  gnome: {
+    home: [27, 79, 72],
+    end: [27, 79, 70]
+  },
+  rxvt: {
+    home: [27, 91, 55],
+    end: [27, 91, 56]
+  }
+};
+
+var fakestream = {
+  fd: 1,
+  write: function(bytes) {
+  }
+};
+
+var rl = readline.createInterface(fakestream, function (text) {
+  return [[], ""];
+});
+
+rl.write('foo');
+assert.equal(3, rl.cursor);
+rl.write(key.xterm.home);
+assert.equal(0, rl.cursor);
+rl.write(key.xterm.end);
+assert.equal(3, rl.cursor);
+rl.write(key.rxvt.home);
+assert.equal(0, rl.cursor);
+rl.write(key.rxvt.end);
+assert.equal(3, rl.cursor);
+rl.write(key.gnome.home);
+assert.equal(0, rl.cursor);
+rl.write(key.gnome.end);
+assert.equal(3, rl.cursor);