]> git.proxmox.com Git - mirror_xterm.js.git/commitdiff
Fix save and restore cursor behavior
authorDaniel Imms <daimms@microsoft.com>
Thu, 27 Jul 2017 23:28:27 +0000 (16:28 -0700)
committerDaniel Imms <daimms@microsoft.com>
Thu, 27 Jul 2017 23:28:27 +0000 (16:28 -0700)
This broke in #717.

Fixes #818

src/Buffer.ts
src/InputHandler.ts
src/Parser.ts

index 93af3c460f5471fe4d4e56ccbd7164c20378ad3c..12b2137d6cde201580ff3c94563933a3b05f638c 100644 (file)
@@ -15,6 +15,9 @@ import { CircularList } from './utils/CircularList';
 export class Buffer {
   public lines: CircularList<[number, string, number][]>;
 
+  public savedY: number;
+  public savedX: number;
+
   /**
    * Create a new Buffer.
    * @param {Terminal} terminal - The terminal the Buffer will belong to
index 449a9399b974f12d360b137ff9af3c77d34470dc..64da3b3f152505a468c3d5603eae74e914dc24db 100644 (file)
@@ -948,7 +948,8 @@ export class InputHandler implements IInputHandler {
           this._terminal.cursorHidden = false;
           break;
         case 1049: // alt screen buffer cursor
-          this.saveCursor(params);
+          // TODO: Not sure if we need to save/restore after switching the buffer
+          // this.saveCursor(params);
           // FALL-THROUGH
         case 47: // alt screen buffer
         case 1047: // alt screen buffer
@@ -1118,9 +1119,10 @@ export class InputHandler implements IInputHandler {
         case 1047: // normal screen buffer - clearing it first
           // Ensure the selection manager has the correct buffer
           this._terminal.buffers.activateNormalBuffer();
-          if (params[0] === 1049) {
-            this.restoreCursor(params);
-          }
+          // TODO: Not sure if we need to save/restore after switching the buffer
+          // if (params[0] === 1049) {
+          //   this.restoreCursor(params);
+          // }
           this._terminal.selectionManager.setBuffer(this._terminal.buffer.lines);
           this._terminal.refresh(0, this._terminal.rows - 1);
           this._terminal.viewport.syncScrollArea();
@@ -1453,8 +1455,8 @@ export class InputHandler implements IInputHandler {
    *   Save cursor (ANSI.SYS).
    */
   public saveCursor(params: number[]): void {
-    this._terminal.buffers.active.x = this._terminal.buffer.x;
-    this._terminal.buffers.active.y = this._terminal.buffer.y;
+    this._terminal.buffer.savedX = this._terminal.buffer.x;
+    this._terminal.buffer.savedY = this._terminal.buffer.y;
   }
 
 
@@ -1463,8 +1465,8 @@ export class InputHandler implements IInputHandler {
    *   Restore cursor (ANSI.SYS).
    */
   public restoreCursor(params: number[]): void {
-    this._terminal.buffer.x = this._terminal.buffers.active.x || 0;
-    this._terminal.buffer.y = this._terminal.buffers.active.y || 0;
+    this._terminal.buffer.x = this._terminal.buffer.savedX || 0;
+    this._terminal.buffer.y = this._terminal.buffer.savedY || 0;
   }
 }
 
index 6679e366d14af8d8c8762a364425405da5168650..1c2fb6b038e7bacbf4ed21d18c6f6397fab04984 100644 (file)
@@ -184,6 +184,10 @@ export class Parser {
   public parse(data: string): ParserState {
     let l = data.length, j, cs, ch, code, low;
 
+    if (this._terminal.debug) {
+      this._terminal.log('data: ' + data);
+    }
+
     this._position = 0;
     // apply leftover surrogate high from last write
     if (this._terminal.surrogate_high) {
@@ -458,6 +462,9 @@ export class Parser {
 
         case ParserState.CSI:
           if (ch in csiStateHandler) {
+            if (this._terminal.debug) {
+              this._terminal.log(`CSI ${this._terminal.prefix ? this._terminal.prefix : ''} ${this._terminal.params ? this._terminal.params.join(';') : ''} ${this._terminal.postfix ? this._terminal.postfix : ''} ${ch}`);
+            }
             csiStateHandler[ch](this._inputHandler, this._terminal.params, this._terminal.prefix, this._terminal.postfix, this);
           } else {
             this._terminal.error('Unknown CSI code: %s.', ch);