]> git.proxmox.com Git - mirror_xterm.js.git/commitdiff
Fix buffer corruption after resizing rows
authorDaniel Imms <daimms@microsoft.com>
Thu, 9 Jun 2016 02:08:30 +0000 (19:08 -0700)
committerDaniel Imms <daimms@microsoft.com>
Thu, 9 Jun 2016 02:08:32 +0000 (19:08 -0700)
Lines from the buffer were incorrectly being removed when the viewport was
resized. This change removes the lines when the cursor is above them, if not it
shifts the viewport down. Some basic jsdoc comments were added to some Terminal
properties for future reference.

Fixes #98
Fixes #99

src/xterm.js

index 9f9b85aeaecbb2885aaf847dc32a5eb8511c216b..8093043af6962cdd105c6e539ffb5049c7669a38 100644 (file)
         this.on('data', options.handler);
       }
 
+      /**
+       * The scroll position of the y cursor, ie. ybase + y = the y position within the entire
+       */
       this.ybase = 0;
+
+      /**
+       * The scroll position of the viewport
+       */
       this.ydisp = 0;
+
+      /**
+       * The cursor's x position after ybase
+       */
       this.x = 0;
+
+      /**
+       * The cursor's y position after ybase
+       */
       this.y = 0;
+
       this.cursorState = 0;
       this.cursorHidden = false;
       this.convertEol;
       this.prefix = '';
       this.postfix = '';
 
+      /**
+       * An array of all lines in the entire buffer, including the prompt. The lines are array of
+       * characters which are 2-length arrays where [0] is an attribute and [1] is the character.
+       */
       this.lines = [];
       var i = this.rows;
       while (i--) {
       } else if (j > y) {
         while (j-- > y) {
           if (this.lines.length > y + this.ybase) {
-            this.lines.shift();
+            if (this.y + this.ybase < j) {
+              // The line is after the cursor, remove it
+              this.lines.pop();
+            } else {
+              // The line is the cursor, push the viewport down
+              this.ybase++;
+              this.ydisp++;
+            }
           }
           if (this.children.length > y) {
             el = this.children.shift();