]> git.proxmox.com Git - mirror_xterm.js.git/blobdiff - src/xterm.js
Merge remote-tracking branch 'upstream/master' into 118_support_custom_keydown_handler
[mirror_xterm.js.git] / src / xterm.js
index f506e8e14aee823b539500284547119ac74f3573..89473aaf0dde1e42babcad5f422b3369c30aa72a 100644 (file)
      *   - cursorBlink (boolean): Whether the terminal cursor blinks
      *
      * @public
+     * @class Xterm Xterm
+     * @alias module:xterm/src/xterm
      */
     function Terminal(options) {
       var self = this;
 
     inherits(Terminal, EventEmitter);
 
-    // back_color_erase feature for xterm.
+               /**
+                * back_color_erase feature for xterm.
+                */
     Terminal.prototype.eraseAttr = function() {
       // if (this.is('screen')) return this.defAttr;
       return (this.defAttr & ~0x1ff) | (this.curAttr & 0x1ff);
 
     /**
      * Focus the terminal. Delegates focus handling to the terminal's DOM element.
-     *
-     * @public
      */
     Terminal.prototype.focus = function() {
       return this.element.focus();
 
     /**
      * Blur the terminal. Delegates blur handling to the terminal's DOM element.
-     *
-     * @public
      */
     Terminal.prototype.blur = function() {
       return this.element.blur();
       Terminal.bindBlur(this);
     };
 
-       /**
-        * Clears all selected text, inside the terminal.
-        */
+    /**
+     * Clears all selected text, inside the terminal.
+     */
                Terminal.prototype.clearSelection = function() {
       var selectionBaseNode = window.getSelection().baseNode;
 
       }
     };
 
-       /**
-        * This function temporarily enables (leases) the contentEditable value of the terminal, which
-        * should be set back to false within 5 seconds at most.
-        */
-       Terminal.prototype.leaseContentEditable = function (ms, callback) {
+    /**
+     * This function temporarily enables (leases) the contentEditable value of the terminal, which
+     * should be set back to false within 5 seconds at most.
+     */
+    Terminal.prototype.leaseContentEditable = function (ms, callback) {
       var term = this;
 
       term.element.contentEditable = true;
     };
 
 
-    /*
+    /**
      * Apply key handling to the terminal
+     *
+     * @param {Xterm} term The terminal on which to bind key handling
+     * @static
      */
     Terminal.bindKeys = function(term) {
       on(term.element, 'keydown', function(ev) {
      * @returns {string}
      * @static
      */
-       Terminal.prepareCopiedTextForClipboard = function (text) {
+    Terminal.prepareCopiedTextForClipboard = function (text) {
       var space = String.fromCharCode(32),
           nonBreakingSpace = String.fromCharCode(160),
           allNonBreakingSpaces = new RegExp(nonBreakingSpace, 'g'),
       });
     };
 
-       /**
-        * Cancel the cut event completely
-        */
-       Terminal.bindCut = function(term) {
+    /**
+     * Cancel the cut event completely.
+     * @param {Xterm} term The terminal on which to bind the cut event handling functionality.
+     * @static
+     */
+    Terminal.bindCut = function(term) {
       on(term.element, 'cut', function (ev) {
         ev.preventDefault();
       });
     };
 
 
+    /**
+     * Do not perform the "drop" event. Altering the contents of the
+     * terminal with drag n drop is unwanted behavior.
+     * @param {Xterm} term The terminal on which to bind the drop event handling functionality.
+     * @static
+     */
     Terminal.bindDrop = function (term) {
-      /*
-       * Do not perform the "drop" event. Altering the contents of the
-       * terminal with drag n drop is unwanted behavior.
-       */
       on(term.element, 'drop', function (ev) {
         term.cancel(ev, true);
       });
     };
 
-
+    /**
+     * Cancel click handling on the given terminal
+     * @param {Xterm} term The terminal on which to bind the click event handling functionality.
+     * @static
+     */
     Terminal.click = function (term) {
-      /*
-       * Do not perform the "drop" event. Altering the contents of the
-       * terminal with drag n drop is unwanted behavior.
-       */
       on(term.element, 'click', function (ev) {
         term.cancel(ev, true);
       });
     };
 
 
-    /*
+    /**
      * Insert the given row to the terminal or produce a new one
      * if no row argument is passed. Return the inserted row.
+     * @param {HTMLElement} row (optional) The row to append to the terminal.
      */
     Terminal.prototype.insertRow = function (row) {
       if (typeof row != 'object') {
      * Opens the terminal within an element.
      *
      * @param {HTMLElement} parent The element to create the terminal within.
-     *
-     * @public
      */
     Terminal.prototype.open = function(parent) {
       var self=this, i=0, div;
     };
 
 
-    // XTerm mouse events
-    // http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking
-    // To better understand these
-    // the xterm code is very helpful:
-    // Relevant files:
-    //   button.c, charproc.c, misc.c
-    // Relevant functions in xterm/button.c:
-    //   BtnCode, EmitButtonCode, EditorButton, SendMousePosition
+    /**
+     * XTerm mouse events
+     * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#Mouse%20Tracking
+     * To better understand these
+     * the xterm code is very helpful:
+     * Relevant files:
+     *   button.c, charproc.c, misc.c
+     * Relevant functions in xterm/button.c:
+     *   BtnCode, EmitButtonCode, EditorButton, SendMousePosition
+     */
     Terminal.prototype.bindMouse = function() {
-      var el = this.element
-        , self = this
-        , pressed = 32;
-
-      var wheelEvent = 'onmousewheel' in this.context
-        ? 'mousewheel'
-        : 'DOMMouseScroll';
+      var el = this.element, self = this, pressed = 32;
+      var wheelEvent = ('onmousewheel' in this.context) ? 'mousewheel' : 'DOMMouseScroll';
 
       // mouseup, mousedown, mousewheel
       // left click: ^[[M 3<^[[M#3<
 
     /**
      * Destroys the terminal.
-     *
-     * @public
      */
     Terminal.prototype.destroy = function() {
       this.readable = false;
       INVISIBLE: 16
     }
 
-    /*
-     * Rendering Engine
-     *
-     * In the screen buffer, each character
-     * is stored as a an array with a character
-     * and a 32-bit integer.
-     * First value: a utf-16 character.
-     * Second value:
-     * Next 9 bits: background color (0-511).
-     * Next 9 bits: foreground color (0-511).
-     * Next 14 bits: a mask for misc. flags:
-     *   1=bold, 2=underline, 4=blink, 8=inverse, 16=invisible
-    */
-
     /**
-     * Refreshes terminal content within two rows (inclusive).
+     * Refreshes (re-renders) terminal content within two rows (inclusive)
+     *
+     * Rendering Engine:
+     *
+     * In the screen buffer, each character is stored as a an array with a character
+     * and a 32-bit integer:
+     *   - First value: a utf-16 character.
+     *   - Second value:
+     *   - Next 9 bits: background color (0-511).
+     *   - Next 9 bits: foreground color (0-511).
+     *   - Next 14 bits: a mask for misc. flags:
+     *     - 1=bold
+     *     - 2=underline
+     *     - 4=blink
+     *     - 8=inverse
+     *     - 16=invisible
      *
      * @param {number} start The row to start from (between 0 and terminal's height terminal - 1)
      * @param {number} end The row to end at (between fromRow and terminal's height terminal - 1)
      * @param {boolean} queue Whether the refresh should ran right now or be queued
-     *
-     * @public
      */
     Terminal.prototype.refresh = function(start, end, queue) {
       var self = this;
       this.emit('refresh', {element: this.element, start: start, end: end});
     };
 
+    /**
+     * Display the cursor element
+     */
     Terminal.prototype.showCursor = function() {
       if (!this.cursorState) {
         this.cursorState = 1;
       }
     };
 
+    /**
+     * Scroll the terminal
+     */
     Terminal.prototype.scroll = function() {
       var row;
 
       this.updateRange(this.scrollBottom);
     };
 
+    /**
+     * Scroll the display of the terminal
+     * @param {number} disp The number of lines to scroll down (negatives scroll up).
+     */
     Terminal.prototype.scrollDisp = function(disp) {
       this.ydisp += disp;
 
 
     /**
      * Writes text to the terminal.
-     *
      * @param {string} text The text to write to the terminal.
-     *
-     * @public
      */
     Terminal.prototype.write = function(data) {
       var l = data.length, i = 0, j, cs, ch, code, low, ch_width, row;
       this.refresh(this.refreshStart, this.refreshEnd);
     };
 
+    /**
+     * Writes text to the terminal, followed by a break line character (\n).
+     * @param {string} text The text to write to the terminal.
+     */
     Terminal.prototype.writeln = function(data) {
       this.write(data + '\r\n');
     };
       this.customKeydownHandler = customKeydownHandler;
     }
 
-    // Key Resources:
-    // https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent
+    /**
+     * Handle a keydown event
+     * Key Resources:
+     *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent
+     * @param {KeyboardEvent} ev The keydown event to be handled.
+     */
     Terminal.prototype.keyDown = function(ev) {
       if (this.customKeydownHandler && !this.customKeydownHandler(ev)) {
         return;
      * returned value is the new key code to pass to the PTY.
      *
      * Reference: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
+     * @param {KeyboardEvent} ev The keyboard event to be translated to key escape sequence.
      */
     Terminal.prototype.evaluateKeyEscapeSequence = function(ev) {
       var result = {
       return result;
     };
 
+    /**
+     * Set the G level of the terminal
+     * @param g
+     */
     Terminal.prototype.setgLevel = function(g) {
       this.glevel = g;
       this.charset = this.charsets[g];
     };
 
+    /**
+     * Set the charset for the given G level of the terminal
+     * @param g
+     * @param charset
+     */
     Terminal.prototype.setgCharset = function(g, charset) {
       this.charsets[g] = charset;
       if (this.glevel === g) {
       }
     };
 
+    /**
+     * Handle a keypress event.
+     * Key Resources:
+     *   - https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent
+     * @param {KeyboardEvent} ev The keypress event to be handled.
+     */
     Terminal.prototype.keyPress = function(ev) {
       var key;
 
       return false;
     };
 
+    /**
+     * Send data for handling to the terminal
+     * @param {string} data
+     */
     Terminal.prototype.send = function(data) {
       var self = this;
 
       this.queue += data;
     };
 
+    /**
+     * Ring the bell.
+     * Note: We could do sweet things with webaudio here
+     */
     Terminal.prototype.bell = function() {
       if (!this.visualBell) return;
       var self = this;
       if (this.popOnBell) this.focus();
     };
 
+    /**
+     * Log the current state to the console.
+     */
     Terminal.prototype.log = function() {
       if (!this.debug) return;
       if (!this.context.console || !this.context.console.log) return;
       this.context.console.log.apply(this.context.console, args);
     };
 
+    /**
+     * Log the current state as error to the console.
+     */
     Terminal.prototype.error = function() {
       if (!this.debug) return;
       if (!this.context.console || !this.context.console.error) return;
      *
      * @param {number} x The number of columns to resize to.
      * @param {number} y The number of rows to resize to.
-     *
-     * @public
      */
     Terminal.prototype.resize = function(x, y) {
       var line
       this.emit('resize', {terminal: this, cols: x, rows: y});
     };
 
+    /**
+     * Updates the range of rows to refresh
+     * @param {number} y The number of rows to refresh next.
+     */
     Terminal.prototype.updateRange = function(y) {
       if (y < this.refreshStart) this.refreshStart = y;
       if (y > this.refreshEnd) this.refreshEnd = y;
       // }
     };
 
+    /**
+     * Set the range of refreshing to the maximyum value
+     */
     Terminal.prototype.maxRange = function() {
       this.refreshStart = 0;
       this.refreshEnd = this.rows - 1;
     };
 
+
+
+    /**
+     * Setup the tab stops.
+     * @param {number} i
+     */
     Terminal.prototype.setupStops = function(i) {
       if (i != null) {
         if (!this.tabs[i]) {
       }
     };
 
+
+    /**
+     * Move the cursor to the previous tab stop from the given position (default is current).
+     * @param {number} x The position to move the cursor to the previous tab stop.
+     */
     Terminal.prototype.prevStop = function(x) {
       if (x == null) x = this.x;
       while (!this.tabs[--x] && x > 0);
         : x < 0 ? 0 : x;
     };
 
+
+    /**
+     * Move the cursor one tab stop forward from the given position (default is current).
+     * @param {number} x The position to move the cursor one tab stop forward.
+     */
     Terminal.prototype.nextStop = function(x) {
       if (x == null) x = this.x;
       while (!this.tabs[++x] && x < this.cols);
         : x < 0 ? 0 : x;
     };
 
+
+    /**
+     * Erase in the identified line everything from "x" to the end of the line (right).
+     * @param {number} x The column from which to start erasing to the end of the line.
+     * @param {number} y The line in which to operate.
+     */
     Terminal.prototype.eraseRight = function(x, y) {
       var line = this.lines[this.ybase + y]
         , ch = [this.eraseAttr(), ' ', 1]; // xterm
       this.updateRange(y);
     };
 
+
+
+    /**
+     * Erase in the identified line everything from "x" to the start of the line (left).
+     * @param {number} x The column from which to start erasing to the start of the line.
+     * @param {number} y The line in which to operate.
+     */
     Terminal.prototype.eraseLeft = function(x, y) {
       var line = this.lines[this.ybase + y]
         , ch = [this.eraseAttr(), ' ', 1]; // xterm
       this.updateRange(y);
     };
 
+
+    /**
+     * Erase all content in the given line
+     * @param {number} y The line to erase all of its contents.
+     */
     Terminal.prototype.eraseLine = function(y) {
       this.eraseRight(0, y);
     };
 
+
+    /**
+     * Return the data array of a blank line/
+     * @param {number} cur First bunch of data for each "blank" character.
+     */
     Terminal.prototype.blankLine = function(cur) {
       var attr = cur
         ? this.eraseAttr()
       return line;
     };
 
+
+    /**
+     * If cur return the back color xterm feature attribute. Else return defAttr.
+     * @param {object} cur
+     */
     Terminal.prototype.ch = function(cur) {
       return cur
         ? [this.eraseAttr(), ' ', 1]
         : [this.defAttr, ' ', 1];
     };
 
+
+    /**
+     * Evaluate if the current erminal is the given argument.
+     * @param {object} term The terminal to evaluate
+     */
     Terminal.prototype.is = function(term) {
       var name = this.termName;
       return (name + '').indexOf(term) === 0;
     };
 
+
+    /**
+     * Emit the 'data' event and populate the given data.
+     * @param {string} data The data to populate in the event.
+     */
     Terminal.prototype.handler = function(data) {
       this.emit('data', data);
     };
 
+
+    /**
+     * Emit the 'title' event and populate the given title.
+     * @param {string} title The title to populate in the event.
+     */
     Terminal.prototype.handleTitle = function(title) {
       this.emit('title', title);
     };
 
+
     /**
      * ESC
      */
 
-    // ESC D Index (IND is 0x84).
+    /**
+     * ESC D Index (IND is 0x84).
+     */
     Terminal.prototype.index = function() {
       this.y++;
       if (this.y > this.scrollBottom) {
       this.state = normal;
     };
 
-    // ESC M Reverse Index (RI is 0x8d).
+
+    /**
+     * ESC M Reverse Index (RI is 0x8d).
+     */
     Terminal.prototype.reverseIndex = function() {
       var j;
       this.y--;
       this.state = normal;
     };
 
-    // ESC c Full Reset (RIS).
+
+    /**
+     * ESC c Full Reset (RIS).
+     */
     Terminal.prototype.reset = function() {
       this.options.rows = this.rows;
       this.options.cols = this.cols;
       this.refresh(0, this.rows - 1);
     };
 
-    // ESC H Tab Set (HTS is 0x88).
+
+    /**
+     * ESC H Tab Set (HTS is 0x88).
+     */
     Terminal.prototype.tabSet = function() {
       this.tabs[this.x] = true;
       this.state = normal;
     };
 
+
     /**
      * CSI
      */
 
-    // CSI Ps A
-    // Cursor Up Ps Times (default = 1) (CUU).
+    /**
+     * CSI Ps A
+     * Cursor Up Ps Times (default = 1) (CUU).
+     */
     Terminal.prototype.cursorUp = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       if (this.y < 0) this.y = 0;
     };
 
-    // CSI Ps B
-    // Cursor Down Ps Times (default = 1) (CUD).
+
+    /**
+     * CSI Ps B
+     * Cursor Down Ps Times (default = 1) (CUD).
+     */
     Terminal.prototype.cursorDown = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // CSI Ps C
-    // Cursor Forward Ps Times (default = 1) (CUF).
+
+    /**
+     * CSI Ps C
+     * Cursor Forward Ps Times (default = 1) (CUF).
+     */
     Terminal.prototype.cursorForward = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // CSI Ps D
-    // Cursor Backward Ps Times (default = 1) (CUB).
+
+    /**
+     * CSI Ps D
+     * Cursor Backward Ps Times (default = 1) (CUB).
+     */
     Terminal.prototype.cursorBackward = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       if (this.x < 0) this.x = 0;
     };
 
-    // CSI Ps ; Ps H
-    // Cursor Position [row;column] (default = [1,1]) (CUP).
+
+    /**
+     * CSI Ps ; Ps H
+     * Cursor Position [row;column] (default = [1,1]) (CUP).
+     */
     Terminal.prototype.cursorPos = function(params) {
       var row, col;
 
       this.y = row;
     };
 
-    // CSI Ps J  Erase in Display (ED).
-    //     Ps = 0  -> Erase Below (default).
-    //     Ps = 1  -> Erase Above.
-    //     Ps = 2  -> Erase All.
-    //     Ps = 3  -> Erase Saved Lines (xterm).
-    // CSI ? Ps J
-    //   Erase in Display (DECSED).
-    //     Ps = 0  -> Selective Erase Below (default).
-    //     Ps = 1  -> Selective Erase Above.
-    //     Ps = 2  -> Selective Erase All.
+
+    /**
+     * CSI Ps J  Erase in Display (ED).
+     *     Ps = 0  -> Erase Below (default).
+     *     Ps = 1  -> Erase Above.
+     *     Ps = 2  -> Erase All.
+     *     Ps = 3  -> Erase Saved Lines (xterm).
+     * CSI ? Ps J
+     *   Erase in Display (DECSED).
+     *     Ps = 0  -> Selective Erase Below (default).
+     *     Ps = 1  -> Selective Erase Above.
+     *     Ps = 2  -> Selective Erase All.
+     */
     Terminal.prototype.eraseInDisplay = function(params) {
       var j;
       switch (params[0]) {
       }
     };
 
-    // CSI Ps K  Erase in Line (EL).
-    //     Ps = 0  -> Erase to Right (default).
-    //     Ps = 1  -> Erase to Left.
-    //     Ps = 2  -> Erase All.
-    // CSI ? Ps K
-    //   Erase in Line (DECSEL).
-    //     Ps = 0  -> Selective Erase to Right (default).
-    //     Ps = 1  -> Selective Erase to Left.
-    //     Ps = 2  -> Selective Erase All.
+
+    /**
+     * CSI Ps K  Erase in Line (EL).
+     *     Ps = 0  -> Erase to Right (default).
+     *     Ps = 1  -> Erase to Left.
+     *     Ps = 2  -> Erase All.
+     * CSI ? Ps K
+     *   Erase in Line (DECSEL).
+     *     Ps = 0  -> Selective Erase to Right (default).
+     *     Ps = 1  -> Selective Erase to Left.
+     *     Ps = 2  -> Selective Erase All.
+     */
     Terminal.prototype.eraseInLine = function(params) {
       switch (params[0]) {
         case 0:
       }
     };
 
-    // CSI Pm m  Character Attributes (SGR).
-    //     Ps = 0  -> Normal (default).
-    //     Ps = 1  -> Bold.
-    //     Ps = 4  -> Underlined.
-    //     Ps = 5  -> Blink (appears as Bold).
-    //     Ps = 7  -> Inverse.
-    //     Ps = 8  -> Invisible, i.e., hidden (VT300).
-    //     Ps = 2 2  -> Normal (neither bold nor faint).
-    //     Ps = 2 4  -> Not underlined.
-    //     Ps = 2 5  -> Steady (not blinking).
-    //     Ps = 2 7  -> Positive (not inverse).
-    //     Ps = 2 8  -> Visible, i.e., not hidden (VT300).
-    //     Ps = 3 0  -> Set foreground color to Black.
-    //     Ps = 3 1  -> Set foreground color to Red.
-    //     Ps = 3 2  -> Set foreground color to Green.
-    //     Ps = 3 3  -> Set foreground color to Yellow.
-    //     Ps = 3 4  -> Set foreground color to Blue.
-    //     Ps = 3 5  -> Set foreground color to Magenta.
-    //     Ps = 3 6  -> Set foreground color to Cyan.
-    //     Ps = 3 7  -> Set foreground color to White.
-    //     Ps = 3 9  -> Set foreground color to default (original).
-    //     Ps = 4 0  -> Set background color to Black.
-    //     Ps = 4 1  -> Set background color to Red.
-    //     Ps = 4 2  -> Set background color to Green.
-    //     Ps = 4 3  -> Set background color to Yellow.
-    //     Ps = 4 4  -> Set background color to Blue.
-    //     Ps = 4 5  -> Set background color to Magenta.
-    //     Ps = 4 6  -> Set background color to Cyan.
-    //     Ps = 4 7  -> Set background color to White.
-    //     Ps = 4 9  -> Set background color to default (original).
-
-    //   If 16-color support is compiled, the following apply.  Assume
-    //   that xterm's resources are set so that the ISO color codes are
-    //   the first 8 of a set of 16.  Then the aixterm colors are the
-    //   bright versions of the ISO colors:
-    //     Ps = 9 0  -> Set foreground color to Black.
-    //     Ps = 9 1  -> Set foreground color to Red.
-    //     Ps = 9 2  -> Set foreground color to Green.
-    //     Ps = 9 3  -> Set foreground color to Yellow.
-    //     Ps = 9 4  -> Set foreground color to Blue.
-    //     Ps = 9 5  -> Set foreground color to Magenta.
-    //     Ps = 9 6  -> Set foreground color to Cyan.
-    //     Ps = 9 7  -> Set foreground color to White.
-    //     Ps = 1 0 0  -> Set background color to Black.
-    //     Ps = 1 0 1  -> Set background color to Red.
-    //     Ps = 1 0 2  -> Set background color to Green.
-    //     Ps = 1 0 3  -> Set background color to Yellow.
-    //     Ps = 1 0 4  -> Set background color to Blue.
-    //     Ps = 1 0 5  -> Set background color to Magenta.
-    //     Ps = 1 0 6  -> Set background color to Cyan.
-    //     Ps = 1 0 7  -> Set background color to White.
-
-    //   If xterm is compiled with the 16-color support disabled, it
-    //   supports the following, from rxvt:
-    //     Ps = 1 0 0  -> Set foreground and background color to
-    //     default.
-
-    //   If 88- or 256-color support is compiled, the following apply.
-    //     Ps = 3 8  ; 5  ; Ps -> Set foreground color to the second
-    //     Ps.
-    //     Ps = 4 8  ; 5  ; Ps -> Set background color to the second
-    //     Ps.
+
+       /**
+     * CSI Pm m  Character Attributes (SGR).
+     *     Ps = 0  -> Normal (default).
+     *     Ps = 1  -> Bold.
+     *     Ps = 4  -> Underlined.
+     *     Ps = 5  -> Blink (appears as Bold).
+     *     Ps = 7  -> Inverse.
+     *     Ps = 8  -> Invisible, i.e., hidden (VT300).
+     *     Ps = 2 2  -> Normal (neither bold nor faint).
+     *     Ps = 2 4  -> Not underlined.
+     *     Ps = 2 5  -> Steady (not blinking).
+     *     Ps = 2 7  -> Positive (not inverse).
+     *     Ps = 2 8  -> Visible, i.e., not hidden (VT300).
+     *     Ps = 3 0  -> Set foreground color to Black.
+     *     Ps = 3 1  -> Set foreground color to Red.
+     *     Ps = 3 2  -> Set foreground color to Green.
+     *     Ps = 3 3  -> Set foreground color to Yellow.
+     *     Ps = 3 4  -> Set foreground color to Blue.
+     *     Ps = 3 5  -> Set foreground color to Magenta.
+     *     Ps = 3 6  -> Set foreground color to Cyan.
+     *     Ps = 3 7  -> Set foreground color to White.
+     *     Ps = 3 9  -> Set foreground color to default (original).
+     *     Ps = 4 0  -> Set background color to Black.
+     *     Ps = 4 1  -> Set background color to Red.
+     *     Ps = 4 2  -> Set background color to Green.
+     *     Ps = 4 3  -> Set background color to Yellow.
+     *     Ps = 4 4  -> Set background color to Blue.
+     *     Ps = 4 5  -> Set background color to Magenta.
+     *     Ps = 4 6  -> Set background color to Cyan.
+     *     Ps = 4 7  -> Set background color to White.
+     *     Ps = 4 9  -> Set background color to default (original).
+                *
+     *   If 16-color support is compiled, the following apply.  Assume
+     *   that xterm's resources are set so that the ISO color codes are
+     *   the first 8 of a set of 16.  Then the aixterm colors are the
+     *   bright versions of the ISO colors:
+     *     Ps = 9 0  -> Set foreground color to Black.
+     *     Ps = 9 1  -> Set foreground color to Red.
+     *     Ps = 9 2  -> Set foreground color to Green.
+     *     Ps = 9 3  -> Set foreground color to Yellow.
+     *     Ps = 9 4  -> Set foreground color to Blue.
+     *     Ps = 9 5  -> Set foreground color to Magenta.
+     *     Ps = 9 6  -> Set foreground color to Cyan.
+     *     Ps = 9 7  -> Set foreground color to White.
+     *     Ps = 1 0 0  -> Set background color to Black.
+     *     Ps = 1 0 1  -> Set background color to Red.
+     *     Ps = 1 0 2  -> Set background color to Green.
+     *     Ps = 1 0 3  -> Set background color to Yellow.
+     *     Ps = 1 0 4  -> Set background color to Blue.
+     *     Ps = 1 0 5  -> Set background color to Magenta.
+     *     Ps = 1 0 6  -> Set background color to Cyan.
+     *     Ps = 1 0 7  -> Set background color to White.
+                *
+     *   If xterm is compiled with the 16-color support disabled, it
+     *   supports the following, from rxvt:
+     *     Ps = 1 0 0  -> Set foreground and background color to
+     *     default.
+                *
+     *   If 88- or 256-color support is compiled, the following apply.
+     *     Ps = 3 8  ; 5  ; Ps -> Set foreground color to the second
+     *     Ps.
+     *     Ps = 4 8  ; 5  ; Ps -> Set background color to the second
+     *     Ps.
+     */
     Terminal.prototype.charAttributes = function(params) {
       // Optimize a single SGR0.
       if (params.length === 1 && params[0] === 0) {
       this.curAttr = (flags << 18) | (fg << 9) | bg;
     };
 
-    // CSI Ps n  Device Status Report (DSR).
-    //     Ps = 5  -> Status Report.  Result (``OK'') is
-    //   CSI 0 n
-    //     Ps = 6  -> Report Cursor Position (CPR) [row;column].
-    //   Result is
-    //   CSI r ; c R
-    // CSI ? Ps n
-    //   Device Status Report (DSR, DEC-specific).
-    //     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI
-    //     ? r ; c R (assumes page is zero).
-    //     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).
-    //     or CSI ? 1 1  n  (not ready).
-    //     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)
-    //     or CSI ? 2 1  n  (locked).
-    //     Ps = 2 6  -> Report Keyboard status as
-    //   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).
-    //   The last two parameters apply to VT400 & up, and denote key-
-    //   board ready and LK01 respectively.
-    //     Ps = 5 3  -> Report Locator status as
-    //   CSI ? 5 3  n  Locator available, if compiled-in, or
-    //   CSI ? 5 0  n  No Locator, if not.
+
+       /**
+     * CSI Ps n  Device Status Report (DSR).
+     *     Ps = 5  -> Status Report.  Result (``OK'') is
+     *   CSI 0 n
+     *     Ps = 6  -> Report Cursor Position (CPR) [row;column].
+     *   Result is
+     *   CSI r ; c R
+     * CSI ? Ps n
+     *   Device Status Report (DSR, DEC-specific).
+     *     Ps = 6  -> Report Cursor Position (CPR) [row;column] as CSI
+     *     ? r ; c R (assumes page is zero).
+     *     Ps = 1 5  -> Report Printer status as CSI ? 1 0  n  (ready).
+     *     or CSI ? 1 1  n  (not ready).
+     *     Ps = 2 5  -> Report UDK status as CSI ? 2 0  n  (unlocked)
+     *     or CSI ? 2 1  n  (locked).
+     *     Ps = 2 6  -> Report Keyboard status as
+     *   CSI ? 2 7  ;  1  ;  0  ;  0  n  (North American).
+     *   The last two parameters apply to VT400 & up, and denote key-
+     *   board ready and LK01 respectively.
+     *     Ps = 5 3  -> Report Locator status as
+     *   CSI ? 5 3  n  Locator available, if compiled-in, or
+     *   CSI ? 5 0  n  No Locator, if not.
+     */
     Terminal.prototype.deviceStatus = function(params) {
       if (!this.prefix) {
         switch (params[0]) {
       }
     };
 
+
     /**
      * Additions
      */
 
-    // CSI Ps @
-    // Insert Ps (Blank) Character(s) (default = 1) (ICH).
+       /**
+     * CSI Ps @
+     * Insert Ps (Blank) Character(s) (default = 1) (ICH).
+     */
     Terminal.prototype.insertChars = function(params) {
       var param, row, j, ch;
 
       }
     };
 
-    // CSI Ps E
-    // Cursor Next Line Ps Times (default = 1) (CNL).
-    // same as CSI Ps B ?
+       /**
+     * CSI Ps E
+     * Cursor Next Line Ps Times (default = 1) (CNL).
+     * same as CSI Ps B ?
+     */
     Terminal.prototype.cursorNextLine = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       this.x = 0;
     };
 
-    // CSI Ps F
-    // Cursor Preceding Line Ps Times (default = 1) (CNL).
-    // reuse CSI Ps A ?
+
+    /**
+     * CSI Ps F
+     * Cursor Preceding Line Ps Times (default = 1) (CNL).
+     * reuse CSI Ps A ?
+     */
     Terminal.prototype.cursorPrecedingLine = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       this.x = 0;
     };
 
-    // CSI Ps G
-    // Cursor Character Absolute  [column] (default = [row,1]) (CHA).
+
+    /**
+     * CSI Ps G
+     * Cursor Character Absolute  [column] (default = [row,1]) (CHA).
+     */
     Terminal.prototype.cursorCharAbsolute = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       this.x = param - 1;
     };
 
-    // CSI Ps L
-    // Insert Ps Line(s) (default = 1) (IL).
+
+    /**
+     * CSI Ps L
+     * Insert Ps Line(s) (default = 1) (IL).
+     */
     Terminal.prototype.insertLines = function(params) {
       var param, row, j;
 
       this.updateRange(this.scrollBottom);
     };
 
-    // CSI Ps M
-    // Delete Ps Line(s) (default = 1) (DL).
+
+    /**
+     * CSI Ps M
+     * Delete Ps Line(s) (default = 1) (DL).
+     */
     Terminal.prototype.deleteLines = function(params) {
       var param, row, j;
 
       this.updateRange(this.scrollBottom);
     };
 
-    // CSI Ps P
-    // Delete Ps Character(s) (default = 1) (DCH).
+
+    /**
+     * CSI Ps P
+     * Delete Ps Character(s) (default = 1) (DCH).
+     */
     Terminal.prototype.deleteChars = function(params) {
       var param, row, ch;
 
       }
     };
 
-    // CSI Ps X
-    // Erase Ps Character(s) (default = 1) (ECH).
+    /**
+     * CSI Ps X
+     * Erase Ps Character(s) (default = 1) (ECH).
+     */
     Terminal.prototype.eraseChars = function(params) {
       var param, row, j, ch;
 
       }
     };
 
-    // CSI Pm `  Character Position Absolute
-    //   [column] (default = [row,1]) (HPA).
+    /**
+     * CSI Pm `  Character Position Absolute
+     *   [column] (default = [row,1]) (HPA).
+     */
     Terminal.prototype.charPosAbsolute = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // 141 61 a * HPR -
-    // Horizontal Position Relative
-    // reuse CSI Ps C ?
+
+    /**
+     * 141 61 a * HPR -
+     * Horizontal Position Relative
+     * reuse CSI Ps C ?
+     */
     Terminal.prototype.HPositionRelative = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // CSI Ps c  Send Device Attributes (Primary DA).
-    //     Ps = 0  or omitted -> request attributes from terminal.  The
-    //     response depends on the decTerminalID resource setting.
-    //     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')
-    //     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')
-    //     -> CSI ? 6 c  (``VT102'')
-    //     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')
-    //   The VT100-style response parameters do not mean anything by
-    //   themselves.  VT220 parameters do, telling the host what fea-
-    //   tures the terminal supports:
-    //     Ps = 1  -> 132-columns.
-    //     Ps = 2  -> Printer.
-    //     Ps = 6  -> Selective erase.
-    //     Ps = 8  -> User-defined keys.
-    //     Ps = 9  -> National replacement character sets.
-    //     Ps = 1 5  -> Technical characters.
-    //     Ps = 2 2  -> ANSI color, e.g., VT525.
-    //     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).
-    // CSI > Ps c
-    //   Send Device Attributes (Secondary DA).
-    //     Ps = 0  or omitted -> request the terminal's identification
-    //     code.  The response depends on the decTerminalID resource set-
-    //     ting.  It should apply only to VT220 and up, but xterm extends
-    //     this to VT100.
-    //     -> CSI  > Pp ; Pv ; Pc c
-    //   where Pp denotes the terminal type
-    //     Pp = 0  -> ``VT100''.
-    //     Pp = 1  -> ``VT220''.
-    //   and Pv is the firmware version (for xterm, this was originally
-    //   the XFree86 patch number, starting with 95).  In a DEC termi-
-    //   nal, Pc indicates the ROM cartridge registration number and is
-    //   always zero.
-    // More information:
-    //   xterm/charproc.c - line 2012, for more information.
-    //   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)
+
+    /**
+     * CSI Ps c  Send Device Attributes (Primary DA).
+     *     Ps = 0  or omitted -> request attributes from terminal.  The
+     *     response depends on the decTerminalID resource setting.
+     *     -> CSI ? 1 ; 2 c  (``VT100 with Advanced Video Option'')
+     *     -> CSI ? 1 ; 0 c  (``VT101 with No Options'')
+     *     -> CSI ? 6 c  (``VT102'')
+     *     -> CSI ? 6 0 ; 1 ; 2 ; 6 ; 8 ; 9 ; 1 5 ; c  (``VT220'')
+     *   The VT100-style response parameters do not mean anything by
+     *   themselves.  VT220 parameters do, telling the host what fea-
+     *   tures the terminal supports:
+     *     Ps = 1  -> 132-columns.
+     *     Ps = 2  -> Printer.
+     *     Ps = 6  -> Selective erase.
+     *     Ps = 8  -> User-defined keys.
+     *     Ps = 9  -> National replacement character sets.
+     *     Ps = 1 5  -> Technical characters.
+     *     Ps = 2 2  -> ANSI color, e.g., VT525.
+     *     Ps = 2 9  -> ANSI text locator (i.e., DEC Locator mode).
+     * CSI > Ps c
+     *   Send Device Attributes (Secondary DA).
+     *     Ps = 0  or omitted -> request the terminal's identification
+     *     code.  The response depends on the decTerminalID resource set-
+     *     ting.  It should apply only to VT220 and up, but xterm extends
+     *     this to VT100.
+     *     -> CSI  > Pp ; Pv ; Pc c
+     *   where Pp denotes the terminal type
+     *     Pp = 0  -> ``VT100''.
+     *     Pp = 1  -> ``VT220''.
+     *   and Pv is the firmware version (for xterm, this was originally
+     *   the XFree86 patch number, starting with 95).  In a DEC termi-
+     *   nal, Pc indicates the ROM cartridge registration number and is
+     *   always zero.
+     * More information:
+     *   xterm/charproc.c - line 2012, for more information.
+     *   vim responds with ^[[?0c or ^[[?1c after the terminal's response (?)
+                */
     Terminal.prototype.sendDeviceAttributes = function(params) {
       if (params[0] > 0) return;
 
       }
     };
 
-    // CSI Pm d
-    // Line Position Absolute  [row] (default = [1,column]) (VPA).
+
+    /**
+     * CSI Pm d
+     * Line Position Absolute  [row] (default = [1,column]) (VPA).
+     */
     Terminal.prototype.linePosAbsolute = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // 145 65 e * VPR - Vertical Position Relative
-    // reuse CSI Ps B ?
+
+    /**
+     * 145 65 e * VPR - Vertical Position Relative
+     * reuse CSI Ps B ?
+     */
     Terminal.prototype.VPositionRelative = function(params) {
       var param = params[0];
       if (param < 1) param = 1;
       }
     };
 
-    // CSI Ps ; Ps f
-    //   Horizontal and Vertical Position [row;column] (default =
-    //   [1,1]) (HVP).
+
+    /**
+     * CSI Ps ; Ps f
+     *   Horizontal and Vertical Position [row;column] (default =
+     *   [1,1]) (HVP).
+     */
     Terminal.prototype.HVPosition = function(params) {
       if (params[0] < 1) params[0] = 1;
       if (params[1] < 1) params[1] = 1;
       }
     };
 
-    // CSI Pm h  Set Mode (SM).
-    //     Ps = 2  -> Keyboard Action Mode (AM).
-    //     Ps = 4  -> Insert Mode (IRM).
-    //     Ps = 1 2  -> Send/receive (SRM).
-    //     Ps = 2 0  -> Automatic Newline (LNM).
-    // CSI ? Pm h
-    //   DEC Private Mode Set (DECSET).
-    //     Ps = 1  -> Application Cursor Keys (DECCKM).
-    //     Ps = 2  -> Designate USASCII for character sets G0-G3
-    //     (DECANM), and set VT100 mode.
-    //     Ps = 3  -> 132 Column Mode (DECCOLM).
-    //     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).
-    //     Ps = 5  -> Reverse Video (DECSCNM).
-    //     Ps = 6  -> Origin Mode (DECOM).
-    //     Ps = 7  -> Wraparound Mode (DECAWM).
-    //     Ps = 8  -> Auto-repeat Keys (DECARM).
-    //     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-
-    //     tion Mouse Tracking.
-    //     Ps = 1 0  -> Show toolbar (rxvt).
-    //     Ps = 1 2  -> Start Blinking Cursor (att610).
-    //     Ps = 1 8  -> Print form feed (DECPFF).
-    //     Ps = 1 9  -> Set print extent to full screen (DECPEX).
-    //     Ps = 2 5  -> Show Cursor (DECTCEM).
-    //     Ps = 3 0  -> Show scrollbar (rxvt).
-    //     Ps = 3 5  -> Enable font-shifting functions (rxvt).
-    //     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).
-    //     Ps = 4 0  -> Allow 80 -> 132 Mode.
-    //     Ps = 4 1  -> more(1) fix (see curses resource).
-    //     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-
-    //     RCM).
-    //     Ps = 4 4  -> Turn On Margin Bell.
-    //     Ps = 4 5  -> Reverse-wraparound Mode.
-    //     Ps = 4 6  -> Start Logging.  This is normally disabled by a
-    //     compile-time option.
-    //     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-
-    //     abled by the titeInhibit resource).
-    //     Ps = 6 6  -> Application keypad (DECNKM).
-    //     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).
-    //     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and
-    //     release.  See the section Mouse Tracking.
-    //     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.
-    //     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.
-    //     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.
-    //     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.
-    //     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.
-    //     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).
-    //     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).
-    //     Ps = 1 0 3 4  -> Interpret "meta" key, sets eighth bit.
-    //     (enables the eightBitInput resource).
-    //     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-
-    //     Lock keys.  (This enables the numLock resource).
-    //     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This
-    //     enables the metaSendsEscape resource).
-    //     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete
-    //     key.
-    //     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This
-    //     enables the altSendsEscape resource).
-    //     Ps = 1 0 4 0  -> Keep selection even if not highlighted.
-    //     (This enables the keepSelection resource).
-    //     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables
-    //     the selectToClipboard resource).
-    //     Ps = 1 0 4 2  -> Enable Urgency window manager hint when
-    //     Control-G is received.  (This enables the bellIsUrgent
-    //     resource).
-    //     Ps = 1 0 4 3  -> Enable raising of the window when Control-G
-    //     is received.  (enables the popOnBell resource).
-    //     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be
-    //     disabled by the titeInhibit resource).
-    //     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-
-    //     abled by the titeInhibit resource).
-    //     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate
-    //     Screen Buffer, clearing it first.  (This may be disabled by
-    //     the titeInhibit resource).  This combines the effects of the 1
-    //     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based
-    //     applications rather than the 4 7  mode.
-    //     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.
-    //     Ps = 1 0 5 1  -> Set Sun function-key mode.
-    //     Ps = 1 0 5 2  -> Set HP function-key mode.
-    //     Ps = 1 0 5 3  -> Set SCO function-key mode.
-    //     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).
-    //     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.
-    //     Ps = 2 0 0 4  -> Set bracketed paste mode.
-    // Modes:
-    //   http://vt100.net/docs/vt220-rm/chapter4.html
+
+    /**
+     * CSI Pm h  Set Mode (SM).
+     *     Ps = 2  -> Keyboard Action Mode (AM).
+     *     Ps = 4  -> Insert Mode (IRM).
+     *     Ps = 1 2  -> Send/receive (SRM).
+     *     Ps = 2 0  -> Automatic Newline (LNM).
+     * CSI ? Pm h
+     *   DEC Private Mode Set (DECSET).
+     *     Ps = 1  -> Application Cursor Keys (DECCKM).
+     *     Ps = 2  -> Designate USASCII for character sets G0-G3
+     *     (DECANM), and set VT100 mode.
+     *     Ps = 3  -> 132 Column Mode (DECCOLM).
+     *     Ps = 4  -> Smooth (Slow) Scroll (DECSCLM).
+     *     Ps = 5  -> Reverse Video (DECSCNM).
+     *     Ps = 6  -> Origin Mode (DECOM).
+     *     Ps = 7  -> Wraparound Mode (DECAWM).
+     *     Ps = 8  -> Auto-repeat Keys (DECARM).
+     *     Ps = 9  -> Send Mouse X & Y on button press.  See the sec-
+     *     tion Mouse Tracking.
+     *     Ps = 1 0  -> Show toolbar (rxvt).
+     *     Ps = 1 2  -> Start Blinking Cursor (att610).
+     *     Ps = 1 8  -> Print form feed (DECPFF).
+     *     Ps = 1 9  -> Set print extent to full screen (DECPEX).
+     *     Ps = 2 5  -> Show Cursor (DECTCEM).
+     *     Ps = 3 0  -> Show scrollbar (rxvt).
+     *     Ps = 3 5  -> Enable font-shifting functions (rxvt).
+     *     Ps = 3 8  -> Enter Tektronix Mode (DECTEK).
+     *     Ps = 4 0  -> Allow 80 -> 132 Mode.
+     *     Ps = 4 1  -> more(1) fix (see curses resource).
+     *     Ps = 4 2  -> Enable Nation Replacement Character sets (DECN-
+     *     RCM).
+     *     Ps = 4 4  -> Turn On Margin Bell.
+     *     Ps = 4 5  -> Reverse-wraparound Mode.
+     *     Ps = 4 6  -> Start Logging.  This is normally disabled by a
+     *     compile-time option.
+     *     Ps = 4 7  -> Use Alternate Screen Buffer.  (This may be dis-
+     *     abled by the titeInhibit resource).
+     *     Ps = 6 6  -> Application keypad (DECNKM).
+     *     Ps = 6 7  -> Backarrow key sends backspace (DECBKM).
+     *     Ps = 1 0 0 0  -> Send Mouse X & Y on button press and
+     *     release.  See the section Mouse Tracking.
+     *     Ps = 1 0 0 1  -> Use Hilite Mouse Tracking.
+     *     Ps = 1 0 0 2  -> Use Cell Motion Mouse Tracking.
+     *     Ps = 1 0 0 3  -> Use All Motion Mouse Tracking.
+     *     Ps = 1 0 0 4  -> Send FocusIn/FocusOut events.
+     *     Ps = 1 0 0 5  -> Enable Extended Mouse Mode.
+     *     Ps = 1 0 1 0  -> Scroll to bottom on tty output (rxvt).
+     *     Ps = 1 0 1 1  -> Scroll to bottom on key press (rxvt).
+     *     Ps = 1 0 3 4  -> Interpret "meta" key, sets eighth bit.
+     *     (enables the eightBitInput resource).
+     *     Ps = 1 0 3 5  -> Enable special modifiers for Alt and Num-
+     *     Lock keys.  (This enables the numLock resource).
+     *     Ps = 1 0 3 6  -> Send ESC   when Meta modifies a key.  (This
+     *     enables the metaSendsEscape resource).
+     *     Ps = 1 0 3 7  -> Send DEL from the editing-keypad Delete
+     *     key.
+     *     Ps = 1 0 3 9  -> Send ESC  when Alt modifies a key.  (This
+     *     enables the altSendsEscape resource).
+     *     Ps = 1 0 4 0  -> Keep selection even if not highlighted.
+     *     (This enables the keepSelection resource).
+     *     Ps = 1 0 4 1  -> Use the CLIPBOARD selection.  (This enables
+     *     the selectToClipboard resource).
+     *     Ps = 1 0 4 2  -> Enable Urgency window manager hint when
+     *     Control-G is received.  (This enables the bellIsUrgent
+     *     resource).
+     *     Ps = 1 0 4 3  -> Enable raising of the window when Control-G
+     *     is received.  (enables the popOnBell resource).
+     *     Ps = 1 0 4 7  -> Use Alternate Screen Buffer.  (This may be
+     *     disabled by the titeInhibit resource).
+     *     Ps = 1 0 4 8  -> Save cursor as in DECSC.  (This may be dis-
+     *     abled by the titeInhibit resource).
+     *     Ps = 1 0 4 9  -> Save cursor as in DECSC and use Alternate
+     *     Screen Buffer, clearing it first.  (This may be disabled by
+     *     the titeInhibit resource).  This combines the effects of the 1
+     *     0 4 7  and 1 0 4 8  modes.  Use this with terminfo-based
+     *     applications rather than the 4 7  mode.
+     *     Ps = 1 0 5 0  -> Set terminfo/termcap function-key mode.
+     *     Ps = 1 0 5 1  -> Set Sun function-key mode.
+     *     Ps = 1 0 5 2  -> Set HP function-key mode.
+     *     Ps = 1 0 5 3  -> Set SCO function-key mode.
+     *     Ps = 1 0 6 0  -> Set legacy keyboard emulation (X11R6).
+     *     Ps = 1 0 6 1  -> Set VT220 keyboard emulation.
+     *     Ps = 2 0 0 4  -> Set bracketed paste mode.
+     * Modes:
+     *   http: *vt100.net/docs/vt220-rm/chapter4.html
+     */
     Terminal.prototype.setMode = function(params) {
       if (typeof params === 'object') {
         var l = params.length
       }
     };
 
-    // CSI Pm l  Reset Mode (RM).
-    //     Ps = 2  -> Keyboard Action Mode (AM).
-    //     Ps = 4  -> Replace Mode (IRM).
-    //     Ps = 1 2  -> Send/receive (SRM).
-    //     Ps = 2 0  -> Normal Linefeed (LNM).
-    // CSI ? Pm l
-    //   DEC Private Mode Reset (DECRST).
-    //     Ps = 1  -> Normal Cursor Keys (DECCKM).
-    //     Ps = 2  -> Designate VT52 mode (DECANM).
-    //     Ps = 3  -> 80 Column Mode (DECCOLM).
-    //     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).
-    //     Ps = 5  -> Normal Video (DECSCNM).
-    //     Ps = 6  -> Normal Cursor Mode (DECOM).
-    //     Ps = 7  -> No Wraparound Mode (DECAWM).
-    //     Ps = 8  -> No Auto-repeat Keys (DECARM).
-    //     Ps = 9  -> Don't send Mouse X & Y on button press.
-    //     Ps = 1 0  -> Hide toolbar (rxvt).
-    //     Ps = 1 2  -> Stop Blinking Cursor (att610).
-    //     Ps = 1 8  -> Don't print form feed (DECPFF).
-    //     Ps = 1 9  -> Limit print to scrolling region (DECPEX).
-    //     Ps = 2 5  -> Hide Cursor (DECTCEM).
-    //     Ps = 3 0  -> Don't show scrollbar (rxvt).
-    //     Ps = 3 5  -> Disable font-shifting functions (rxvt).
-    //     Ps = 4 0  -> Disallow 80 -> 132 Mode.
-    //     Ps = 4 1  -> No more(1) fix (see curses resource).
-    //     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-
-    //     NRCM).
-    //     Ps = 4 4  -> Turn Off Margin Bell.
-    //     Ps = 4 5  -> No Reverse-wraparound Mode.
-    //     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a
-    //     compile-time option).
-    //     Ps = 4 7  -> Use Normal Screen Buffer.
-    //     Ps = 6 6  -> Numeric keypad (DECNKM).
-    //     Ps = 6 7  -> Backarrow key sends delete (DECBKM).
-    //     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and
-    //     release.  See the section Mouse Tracking.
-    //     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.
-    //     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.
-    //     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.
-    //     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.
-    //     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.
-    //     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output
-    //     (rxvt).
-    //     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).
-    //     Ps = 1 0 3 4  -> Don't interpret "meta" key.  (This disables
-    //     the eightBitInput resource).
-    //     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-
-    //     Lock keys.  (This disables the numLock resource).
-    //     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.
-    //     (This disables the metaSendsEscape resource).
-    //     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad
-    //     Delete key.
-    //     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.
-    //     (This disables the altSendsEscape resource).
-    //     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.
-    //     (This disables the keepSelection resource).
-    //     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables
-    //     the selectToClipboard resource).
-    //     Ps = 1 0 4 2  -> Disable Urgency window manager hint when
-    //     Control-G is received.  (This disables the bellIsUrgent
-    //     resource).
-    //     Ps = 1 0 4 3  -> Disable raising of the window when Control-
-    //     G is received.  (This disables the popOnBell resource).
-    //     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen
-    //     first if in the Alternate Screen.  (This may be disabled by
-    //     the titeInhibit resource).
-    //     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be
-    //     disabled by the titeInhibit resource).
-    //     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor
-    //     as in DECRC.  (This may be disabled by the titeInhibit
-    //     resource).  This combines the effects of the 1 0 4 7  and 1 0
-    //     4 8  modes.  Use this with terminfo-based applications rather
-    //     than the 4 7  mode.
-    //     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.
-    //     Ps = 1 0 5 1  -> Reset Sun function-key mode.
-    //     Ps = 1 0 5 2  -> Reset HP function-key mode.
-    //     Ps = 1 0 5 3  -> Reset SCO function-key mode.
-    //     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).
-    //     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.
-    //     Ps = 2 0 0 4  -> Reset bracketed paste mode.
+    /**
+     * CSI Pm l  Reset Mode (RM).
+     *     Ps = 2  -> Keyboard Action Mode (AM).
+     *     Ps = 4  -> Replace Mode (IRM).
+     *     Ps = 1 2  -> Send/receive (SRM).
+     *     Ps = 2 0  -> Normal Linefeed (LNM).
+     * CSI ? Pm l
+     *   DEC Private Mode Reset (DECRST).
+     *     Ps = 1  -> Normal Cursor Keys (DECCKM).
+     *     Ps = 2  -> Designate VT52 mode (DECANM).
+     *     Ps = 3  -> 80 Column Mode (DECCOLM).
+     *     Ps = 4  -> Jump (Fast) Scroll (DECSCLM).
+     *     Ps = 5  -> Normal Video (DECSCNM).
+     *     Ps = 6  -> Normal Cursor Mode (DECOM).
+     *     Ps = 7  -> No Wraparound Mode (DECAWM).
+     *     Ps = 8  -> No Auto-repeat Keys (DECARM).
+     *     Ps = 9  -> Don't send Mouse X & Y on button press.
+     *     Ps = 1 0  -> Hide toolbar (rxvt).
+     *     Ps = 1 2  -> Stop Blinking Cursor (att610).
+     *     Ps = 1 8  -> Don't print form feed (DECPFF).
+     *     Ps = 1 9  -> Limit print to scrolling region (DECPEX).
+     *     Ps = 2 5  -> Hide Cursor (DECTCEM).
+     *     Ps = 3 0  -> Don't show scrollbar (rxvt).
+     *     Ps = 3 5  -> Disable font-shifting functions (rxvt).
+     *     Ps = 4 0  -> Disallow 80 -> 132 Mode.
+     *     Ps = 4 1  -> No more(1) fix (see curses resource).
+     *     Ps = 4 2  -> Disable Nation Replacement Character sets (DEC-
+     *     NRCM).
+     *     Ps = 4 4  -> Turn Off Margin Bell.
+     *     Ps = 4 5  -> No Reverse-wraparound Mode.
+     *     Ps = 4 6  -> Stop Logging.  (This is normally disabled by a
+     *     compile-time option).
+     *     Ps = 4 7  -> Use Normal Screen Buffer.
+     *     Ps = 6 6  -> Numeric keypad (DECNKM).
+     *     Ps = 6 7  -> Backarrow key sends delete (DECBKM).
+     *     Ps = 1 0 0 0  -> Don't send Mouse X & Y on button press and
+     *     release.  See the section Mouse Tracking.
+     *     Ps = 1 0 0 1  -> Don't use Hilite Mouse Tracking.
+     *     Ps = 1 0 0 2  -> Don't use Cell Motion Mouse Tracking.
+     *     Ps = 1 0 0 3  -> Don't use All Motion Mouse Tracking.
+     *     Ps = 1 0 0 4  -> Don't send FocusIn/FocusOut events.
+     *     Ps = 1 0 0 5  -> Disable Extended Mouse Mode.
+     *     Ps = 1 0 1 0  -> Don't scroll to bottom on tty output
+     *     (rxvt).
+     *     Ps = 1 0 1 1  -> Don't scroll to bottom on key press (rxvt).
+     *     Ps = 1 0 3 4  -> Don't interpret "meta" key.  (This disables
+     *     the eightBitInput resource).
+     *     Ps = 1 0 3 5  -> Disable special modifiers for Alt and Num-
+     *     Lock keys.  (This disables the numLock resource).
+     *     Ps = 1 0 3 6  -> Don't send ESC  when Meta modifies a key.
+     *     (This disables the metaSendsEscape resource).
+     *     Ps = 1 0 3 7  -> Send VT220 Remove from the editing-keypad
+     *     Delete key.
+     *     Ps = 1 0 3 9  -> Don't send ESC  when Alt modifies a key.
+     *     (This disables the altSendsEscape resource).
+     *     Ps = 1 0 4 0  -> Do not keep selection when not highlighted.
+     *     (This disables the keepSelection resource).
+     *     Ps = 1 0 4 1  -> Use the PRIMARY selection.  (This disables
+     *     the selectToClipboard resource).
+     *     Ps = 1 0 4 2  -> Disable Urgency window manager hint when
+     *     Control-G is received.  (This disables the bellIsUrgent
+     *     resource).
+     *     Ps = 1 0 4 3  -> Disable raising of the window when Control-
+     *     G is received.  (This disables the popOnBell resource).
+     *     Ps = 1 0 4 7  -> Use Normal Screen Buffer, clearing screen
+     *     first if in the Alternate Screen.  (This may be disabled by
+     *     the titeInhibit resource).
+     *     Ps = 1 0 4 8  -> Restore cursor as in DECRC.  (This may be
+     *     disabled by the titeInhibit resource).
+     *     Ps = 1 0 4 9  -> Use Normal Screen Buffer and restore cursor
+     *     as in DECRC.  (This may be disabled by the titeInhibit
+     *     resource).  This combines the effects of the 1 0 4 7  and 1 0
+     *     4 8  modes.  Use this with terminfo-based applications rather
+     *     than the 4 7  mode.
+     *     Ps = 1 0 5 0  -> Reset terminfo/termcap function-key mode.
+     *     Ps = 1 0 5 1  -> Reset Sun function-key mode.
+     *     Ps = 1 0 5 2  -> Reset HP function-key mode.
+     *     Ps = 1 0 5 3  -> Reset SCO function-key mode.
+     *     Ps = 1 0 6 0  -> Reset legacy keyboard emulation (X11R6).
+     *     Ps = 1 0 6 1  -> Reset keyboard emulation to Sun/PC style.
+     *     Ps = 2 0 0 4  -> Reset bracketed paste mode.
+     */
     Terminal.prototype.resetMode = function(params) {
       if (typeof params === 'object') {
         var l = params.length
       }
     };
 
-    // CSI Ps ; Ps r
-    //   Set Scrolling Region [top;bottom] (default = full size of win-
-    //   dow) (DECSTBM).
-    // CSI ? Pm r
+
+    /**
+     * CSI Ps ; Ps r
+     *   Set Scrolling Region [top;bottom] (default = full size of win-
+     *   dow) (DECSTBM).
+     * CSI ? Pm r
+     */
     Terminal.prototype.setScrollRegion = function(params) {
       if (this.prefix) return;
       this.scrollTop = (params[0] || 1) - 1;
       this.y = 0;
     };
 
-    // CSI s
-    //   Save cursor (ANSI.SYS).
+
+    /**
+     * CSI s
+     *   Save cursor (ANSI.SYS).
+     */
     Terminal.prototype.saveCursor = function(params) {
       this.savedX = this.x;
       this.savedY = this.y;
     };
 
-    // CSI u
-    //   Restore cursor (ANSI.SYS).
+
+    /**
+     * CSI u
+     *   Restore cursor (ANSI.SYS).
+     */
     Terminal.prototype.restoreCursor = function(params) {
       this.x = this.savedX || 0;
       this.y = this.savedY || 0;
     };
 
+
     /**
      * Lesser Used
      */
 
-    // CSI Ps I
-    //   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).
+    /**
+     * CSI Ps I
+     *   Cursor Forward Tabulation Ps tab stops (default = 1) (CHT).
+     */
     Terminal.prototype.cursorForwardTab = function(params) {
       var param = params[0] || 1;
       while (param--) {
       }
     };
 
-    // CSI Ps S  Scroll up Ps lines (default = 1) (SU).
+
+    /**
+     * CSI Ps S  Scroll up Ps lines (default = 1) (SU).
+     */
     Terminal.prototype.scrollUp = function(params) {
       var param = params[0] || 1;
       while (param--) {
       this.updateRange(this.scrollBottom);
     };
 
-    // CSI Ps T  Scroll down Ps lines (default = 1) (SD).
+
+    /**
+     * CSI Ps T  Scroll down Ps lines (default = 1) (SD).
+     */
     Terminal.prototype.scrollDown = function(params) {
       var param = params[0] || 1;
       while (param--) {
       this.updateRange(this.scrollBottom);
     };
 
-    // CSI Ps ; Ps ; Ps ; Ps ; Ps T
-    //   Initiate highlight mouse tracking.  Parameters are
-    //   [func;startx;starty;firstrow;lastrow].  See the section Mouse
-    //   Tracking.
+
+    /**
+     * CSI Ps ; Ps ; Ps ; Ps ; Ps T
+     *   Initiate highlight mouse tracking.  Parameters are
+     *   [func;startx;starty;firstrow;lastrow].  See the section Mouse
+     *   Tracking.
+     */
     Terminal.prototype.initMouseTracking = function(params) {
       // Relevant: DECSET 1001
     };
 
-    // CSI > Ps; Ps T
-    //   Reset one or more features of the title modes to the default
-    //   value.  Normally, "reset" disables the feature.  It is possi-
-    //   ble to disable the ability to reset features by compiling a
-    //   different default for the title modes into xterm.
-    //     Ps = 0  -> Do not set window/icon labels using hexadecimal.
-    //     Ps = 1  -> Do not query window/icon labels using hexadeci-
-    //     mal.
-    //     Ps = 2  -> Do not set window/icon labels using UTF-8.
-    //     Ps = 3  -> Do not query window/icon labels using UTF-8.
-    //   (See discussion of "Title Modes").
+
+    /**
+     * CSI > Ps; Ps T
+     *   Reset one or more features of the title modes to the default
+     *   value.  Normally, "reset" disables the feature.  It is possi-
+     *   ble to disable the ability to reset features by compiling a
+     *   different default for the title modes into xterm.
+     *     Ps = 0  -> Do not set window/icon labels using hexadecimal.
+     *     Ps = 1  -> Do not query window/icon labels using hexadeci-
+     *     mal.
+     *     Ps = 2  -> Do not set window/icon labels using UTF-8.
+     *     Ps = 3  -> Do not query window/icon labels using UTF-8.
+     *   (See discussion of "Title Modes").
+     */
     Terminal.prototype.resetTitleModes = function(params) {
       ;
     };
 
-    // CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).
+
+    /**
+     * CSI Ps Z  Cursor Backward Tabulation Ps tab stops (default = 1) (CBT).
+     */
     Terminal.prototype.cursorBackwardTab = function(params) {
       var param = params[0] || 1;
       while (param--) {
       }
     };
 
-    // CSI Ps b  Repeat the preceding graphic character Ps times (REP).
+
+    /**
+     * CSI Ps b  Repeat the preceding graphic character Ps times (REP).
+     */
     Terminal.prototype.repeatPrecedingCharacter = function(params) {
       var param = params[0] || 1
         , line = this.lines[this.ybase + this.y]
       while (param--) line[this.x++] = ch;
     };
 
-    // CSI Ps g  Tab Clear (TBC).
-    //     Ps = 0  -> Clear Current Column (default).
-    //     Ps = 3  -> Clear All.
-    // Potentially:
-    //   Ps = 2  -> Clear Stops on Line.
-    //   http://vt100.net/annarbor/aaa-ug/section6.html
+
+    /**
+     * CSI Ps g  Tab Clear (TBC).
+     *     Ps = 0  -> Clear Current Column (default).
+     *     Ps = 3  -> Clear All.
+     * Potentially:
+     *   Ps = 2  -> Clear Stops on Line.
+     *   http://vt100.net/annarbor/aaa-ug/section6.html
+     */
     Terminal.prototype.tabClear = function(params) {
       var param = params[0];
       if (param <= 0) {
       }
     };
 
-    // CSI Pm i  Media Copy (MC).
-    //     Ps = 0  -> Print screen (default).
-    //     Ps = 4  -> Turn off printer controller mode.
-    //     Ps = 5  -> Turn on printer controller mode.
-    // CSI ? Pm i
-    //   Media Copy (MC, DEC-specific).
-    //     Ps = 1  -> Print line containing cursor.
-    //     Ps = 4  -> Turn off autoprint mode.
-    //     Ps = 5  -> Turn on autoprint mode.
-    //     Ps = 1  0  -> Print composed display, ignores DECPEX.
-    //     Ps = 1  1  -> Print all pages.
+
+    /**
+     * CSI Pm i  Media Copy (MC).
+     *     Ps = 0  -> Print screen (default).
+     *     Ps = 4  -> Turn off printer controller mode.
+     *     Ps = 5  -> Turn on printer controller mode.
+     * CSI ? Pm i
+     *   Media Copy (MC, DEC-specific).
+     *     Ps = 1  -> Print line containing cursor.
+     *     Ps = 4  -> Turn off autoprint mode.
+     *     Ps = 5  -> Turn on autoprint mode.
+     *     Ps = 1  0  -> Print composed display, ignores DECPEX.
+     *     Ps = 1  1  -> Print all pages.
+     */
     Terminal.prototype.mediaCopy = function(params) {
       ;
     };
 
-    // CSI > Ps; Ps m
-    //   Set or reset resource-values used by xterm to decide whether
-    //   to construct escape sequences holding information about the
-    //   modifiers pressed with a given key.  The first parameter iden-
-    //   tifies the resource to set/reset.  The second parameter is the
-    //   value to assign to the resource.  If the second parameter is
-    //   omitted, the resource is reset to its initial value.
-    //     Ps = 1  -> modifyCursorKeys.
-    //     Ps = 2  -> modifyFunctionKeys.
-    //     Ps = 4  -> modifyOtherKeys.
-    //   If no parameters are given, all resources are reset to their
-    //   initial values.
+
+    /**
+     * CSI > Ps; Ps m
+     *   Set or reset resource-values used by xterm to decide whether
+     *   to construct escape sequences holding information about the
+     *   modifiers pressed with a given key.  The first parameter iden-
+     *   tifies the resource to set/reset.  The second parameter is the
+     *   value to assign to the resource.  If the second parameter is
+     *   omitted, the resource is reset to its initial value.
+     *     Ps = 1  -> modifyCursorKeys.
+     *     Ps = 2  -> modifyFunctionKeys.
+     *     Ps = 4  -> modifyOtherKeys.
+     *   If no parameters are given, all resources are reset to their
+     *   initial values.
+     */
     Terminal.prototype.setResources = function(params) {
       ;
     };
 
-    // CSI > Ps n
-    //   Disable modifiers which may be enabled via the CSI > Ps; Ps m
-    //   sequence.  This corresponds to a resource value of "-1", which
-    //   cannot be set with the other sequence.  The parameter identi-
-    //   fies the resource to be disabled:
-    //     Ps = 1  -> modifyCursorKeys.
-    //     Ps = 2  -> modifyFunctionKeys.
-    //     Ps = 4  -> modifyOtherKeys.
-    //   If the parameter is omitted, modifyFunctionKeys is disabled.
-    //   When modifyFunctionKeys is disabled, xterm uses the modifier
-    //   keys to make an extended sequence of functions rather than
-    //   adding a parameter to each function key to denote the modi-
-    //   fiers.
+
+    /**
+     * CSI > Ps n
+     *   Disable modifiers which may be enabled via the CSI > Ps; Ps m
+     *   sequence.  This corresponds to a resource value of "-1", which
+     *   cannot be set with the other sequence.  The parameter identi-
+     *   fies the resource to be disabled:
+     *     Ps = 1  -> modifyCursorKeys.
+     *     Ps = 2  -> modifyFunctionKeys.
+     *     Ps = 4  -> modifyOtherKeys.
+     *   If the parameter is omitted, modifyFunctionKeys is disabled.
+     *   When modifyFunctionKeys is disabled, xterm uses the modifier
+     *   keys to make an extended sequence of functions rather than
+     *   adding a parameter to each function key to denote the modi-
+     *   fiers.
+     */
     Terminal.prototype.disableModifiers = function(params) {
       ;
     };
 
-    // CSI > Ps p
-    //   Set resource value pointerMode.  This is used by xterm to
-    //   decide whether to hide the pointer cursor as the user types.
-    //   Valid values for the parameter:
-    //     Ps = 0  -> never hide the pointer.
-    //     Ps = 1  -> hide if the mouse tracking mode is not enabled.
-    //     Ps = 2  -> always hide the pointer.  If no parameter is
-    //     given, xterm uses the default, which is 1 .
+
+    /**
+     * CSI > Ps p
+     *   Set resource value pointerMode.  This is used by xterm to
+     *   decide whether to hide the pointer cursor as the user types.
+     *   Valid values for the parameter:
+     *     Ps = 0  -> never hide the pointer.
+     *     Ps = 1  -> hide if the mouse tracking mode is not enabled.
+     *     Ps = 2  -> always hide the pointer.  If no parameter is
+     *     given, xterm uses the default, which is 1 .
+     */
     Terminal.prototype.setPointerMode = function(params) {
       ;
     };
 
-    // CSI ! p   Soft terminal reset (DECSTR).
-    // http://vt100.net/docs/vt220-rm/table4-10.html
+
+               /**
+     * CSI ! p   Soft terminal reset (DECSTR).
+     * http://vt100.net/docs/vt220-rm/table4-10.html
+     */
     Terminal.prototype.softReset = function(params) {
       this.cursorHidden = false;
       this.insertMode = false;
       this.charsets = [null]; // ??
     };
 
-    // CSI Ps$ p
-    //   Request ANSI mode (DECRQM).  For VT300 and up, reply is
-    //     CSI Ps; Pm$ y
-    //   where Ps is the mode number as in RM, and Pm is the mode
-    //   value:
-    //     0 - not recognized
-    //     1 - set
-    //     2 - reset
-    //     3 - permanently set
-    //     4 - permanently reset
+
+    /**
+     * CSI Ps$ p
+     *   Request ANSI mode (DECRQM).  For VT300 and up, reply is
+     *     CSI Ps; Pm$ y
+     *   where Ps is the mode number as in RM, and Pm is the mode
+     *   value:
+     *     0 - not recognized
+     *     1 - set
+     *     2 - reset
+     *     3 - permanently set
+     *     4 - permanently reset
+     */
     Terminal.prototype.requestAnsiMode = function(params) {
       ;
     };
 
-    // CSI ? Ps$ p
-    //   Request DEC private mode (DECRQM).  For VT300 and up, reply is
-    //     CSI ? Ps; Pm$ p
-    //   where Ps is the mode number as in DECSET, Pm is the mode value
-    //   as in the ANSI DECRQM.
+
+    /**
+     * CSI ? Ps$ p
+     *   Request DEC private mode (DECRQM).  For VT300 and up, reply is
+     *     CSI ? Ps; Pm$ p
+     *   where Ps is the mode number as in DECSET, Pm is the mode value
+     *   as in the ANSI DECRQM.
+     */
     Terminal.prototype.requestPrivateMode = function(params) {
       ;
     };
 
-    // CSI Ps ; Ps " p
-    //   Set conformance level (DECSCL).  Valid values for the first
-    //   parameter:
-    //     Ps = 6 1  -> VT100.
-    //     Ps = 6 2  -> VT200.
-    //     Ps = 6 3  -> VT300.
-    //   Valid values for the second parameter:
-    //     Ps = 0  -> 8-bit controls.
-    //     Ps = 1  -> 7-bit controls (always set for VT100).
-    //     Ps = 2  -> 8-bit controls.
+
+    /**
+     * CSI Ps ; Ps " p
+     *   Set conformance level (DECSCL).  Valid values for the first
+     *   parameter:
+     *     Ps = 6 1  -> VT100.
+     *     Ps = 6 2  -> VT200.
+     *     Ps = 6 3  -> VT300.
+     *   Valid values for the second parameter:
+     *     Ps = 0  -> 8-bit controls.
+     *     Ps = 1  -> 7-bit controls (always set for VT100).
+     *     Ps = 2  -> 8-bit controls.
+     */
     Terminal.prototype.setConformanceLevel = function(params) {
       ;
     };
 
-    // CSI Ps q  Load LEDs (DECLL).
-    //     Ps = 0  -> Clear all LEDS (default).
-    //     Ps = 1  -> Light Num Lock.
-    //     Ps = 2  -> Light Caps Lock.
-    //     Ps = 3  -> Light Scroll Lock.
-    //     Ps = 2  1  -> Extinguish Num Lock.
-    //     Ps = 2  2  -> Extinguish Caps Lock.
-    //     Ps = 2  3  -> Extinguish Scroll Lock.
+
+    /**
+     * CSI Ps q  Load LEDs (DECLL).
+     *     Ps = 0  -> Clear all LEDS (default).
+     *     Ps = 1  -> Light Num Lock.
+     *     Ps = 2  -> Light Caps Lock.
+     *     Ps = 3  -> Light Scroll Lock.
+     *     Ps = 2  1  -> Extinguish Num Lock.
+     *     Ps = 2  2  -> Extinguish Caps Lock.
+     *     Ps = 2  3  -> Extinguish Scroll Lock.
+     */
     Terminal.prototype.loadLEDs = function(params) {
       ;
     };
 
-    // CSI Ps SP q
-    //   Set cursor style (DECSCUSR, VT520).
-    //     Ps = 0  -> blinking block.
-    //     Ps = 1  -> blinking block (default).
-    //     Ps = 2  -> steady block.
-    //     Ps = 3  -> blinking underline.
-    //     Ps = 4  -> steady underline.
+
+    /**
+     * CSI Ps SP q
+     *   Set cursor style (DECSCUSR, VT520).
+     *     Ps = 0  -> blinking block.
+     *     Ps = 1  -> blinking block (default).
+     *     Ps = 2  -> steady block.
+     *     Ps = 3  -> blinking underline.
+     *     Ps = 4  -> steady underline.
+     */
     Terminal.prototype.setCursorStyle = function(params) {
       ;
     };
 
-    // CSI Ps " q
-    //   Select character protection attribute (DECSCA).  Valid values
-    //   for the parameter:
-    //     Ps = 0  -> DECSED and DECSEL can erase (default).
-    //     Ps = 1  -> DECSED and DECSEL cannot erase.
-    //     Ps = 2  -> DECSED and DECSEL can erase.
+
+    /**
+     * CSI Ps " q
+     *   Select character protection attribute (DECSCA).  Valid values
+     *   for the parameter:
+     *     Ps = 0  -> DECSED and DECSEL can erase (default).
+     *     Ps = 1  -> DECSED and DECSEL cannot erase.
+     *     Ps = 2  -> DECSED and DECSEL can erase.
+     */
     Terminal.prototype.setCharProtectionAttr = function(params) {
       ;
     };
 
-    // CSI ? Pm r
-    //   Restore DEC Private Mode Values.  The value of Ps previously
-    //   saved is restored.  Ps values are the same as for DECSET.
+
+    /**
+     * CSI ? Pm r
+     *   Restore DEC Private Mode Values.  The value of Ps previously
+     *   saved is restored.  Ps values are the same as for DECSET.
+     */
     Terminal.prototype.restorePrivateValues = function(params) {
       ;
     };
 
-    // CSI Pt; Pl; Pb; Pr; Ps$ r
-    //   Change Attributes in Rectangular Area (DECCARA), VT400 and up.
-    //     Pt; Pl; Pb; Pr denotes the rectangle.
-    //     Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7.
-    // NOTE: xterm doesn't enable this code by default.
+
+    /**
+     * CSI Pt; Pl; Pb; Pr; Ps$ r
+     *   Change Attributes in Rectangular Area (DECCARA), VT400 and up.
+     *     Pt; Pl; Pb; Pr denotes the rectangle.
+     *     Ps denotes the SGR attributes to change: 0, 1, 4, 5, 7.
+     * NOTE: xterm doesn't enable this code by default.
+     */
     Terminal.prototype.setAttrInRectangle = function(params) {
       var t = params[0]
         , l = params[1]
     };
 
 
-    // CSI Pc; Pt; Pl; Pb; Pr$ x
-    //   Fill Rectangular Area (DECFRA), VT420 and up.
-    //     Pc is the character to use.
-    //     Pt; Pl; Pb; Pr denotes the rectangle.
-    // NOTE: xterm doesn't enable this code by default.
+    /**
+     * CSI Pc; Pt; Pl; Pb; Pr$ x
+     *   Fill Rectangular Area (DECFRA), VT420 and up.
+     *     Pc is the character to use.
+     *     Pt; Pl; Pb; Pr denotes the rectangle.
+     * NOTE: xterm doesn't enable this code by default.
+     */
     Terminal.prototype.fillRectangle = function(params) {
       var ch = params[0]
         , t = params[1]
       this.updateRange(params[3]);
     };
 
-    // CSI Ps ; Pu ' z
-    //   Enable Locator Reporting (DECELR).
-    //   Valid values for the first parameter:
-    //     Ps = 0  -> Locator disabled (default).
-    //     Ps = 1  -> Locator enabled.
-    //     Ps = 2  -> Locator enabled for one report, then disabled.
-    //   The second parameter specifies the coordinate unit for locator
-    //   reports.
-    //   Valid values for the second parameter:
-    //     Pu = 0  <- or omitted -> default to character cells.
-    //     Pu = 1  <- device physical pixels.
-    //     Pu = 2  <- character cells.
+
+    /**
+     * CSI Ps ; Pu ' z
+     *   Enable Locator Reporting (DECELR).
+     *   Valid values for the first parameter:
+     *     Ps = 0  -> Locator disabled (default).
+     *     Ps = 1  -> Locator enabled.
+     *     Ps = 2  -> Locator enabled for one report, then disabled.
+     *   The second parameter specifies the coordinate unit for locator
+     *   reports.
+     *   Valid values for the second parameter:
+     *     Pu = 0  <- or omitted -> default to character cells.
+     *     Pu = 1  <- device physical pixels.
+     *     Pu = 2  <- character cells.
+     */
     Terminal.prototype.enableLocatorReporting = function(params) {
       var val = params[0] > 0;
       //this.mouseEvents = val;
       //this.decLocator = val;
     };
 
-    // CSI Pt; Pl; Pb; Pr$ z
-    //   Erase Rectangular Area (DECERA), VT400 and up.
-    //     Pt; Pl; Pb; Pr denotes the rectangle.
-    // NOTE: xterm doesn't enable this code by default.
+
+    /**
+     * CSI Pt; Pl; Pb; Pr$ z
+     *   Erase Rectangular Area (DECERA), VT400 and up.
+     *     Pt; Pl; Pb; Pr denotes the rectangle.
+     * NOTE: xterm doesn't enable this code by default.
+     */
     Terminal.prototype.eraseRectangle = function(params) {
       var t = params[0]
         , l = params[1]
     };
 
 
-    // CSI P m SP }
-    // Insert P s Column(s) (default = 1) (DECIC), VT420 and up.
-    // NOTE: xterm doesn't enable this code by default.
+    /**
+     * CSI P m SP }
+     * Insert P s Column(s) (default = 1) (DECIC), VT420 and up.
+     * NOTE: xterm doesn't enable this code by default.
+     */
     Terminal.prototype.insertColumns = function() {
       var param = params[0]
         , l = this.ybase + this.rows
     };
 
 
-    // CSI P m SP ~
-    // Delete P s Column(s) (default = 1) (DECDC), VT420 and up
-    // NOTE: xterm doesn't enable this code by default.
+    /**
+     * CSI P m SP ~
+     * Delete P s Column(s) (default = 1) (DECDC), VT420 and up
+     * NOTE: xterm doesn't enable this code by default.
+     */
     Terminal.prototype.deleteColumns = function() {
       var param = params[0]
         , l = this.ybase + this.rows
           (term.isMac && ev.altKey && !ev.ctrlKey && !ev.metaKey) ||
           (term.isMSWindows && ev.altKey && ev.ctrlKey && !ev.metaKey);
 
-      // Don't invoke for arrows, pageDown, home, backspace, etc.
+       if (ev.type == 'keypress') {
+        return thirdLevelKey;
+      }
+
+      // Don't invoke for arrows, pageDown, home, backspace, etc. (on non-keypress events)
       return thirdLevelKey && (!ev.keyCode || ev.keyCode > 47);
     }
 
      *
      * @param {string} event The name of the event. TODO: Document all event types
      * @param {function} callback The function to call when the event is triggered.
-     *
-     * @public
      */
     Terminal.on = on;
     Terminal.off = off;
     Terminal.cancel = cancel;
 
+
     return Terminal;
 });