@@ -1284,7 +1284,9 @@ export class InputHandler extends Disposable implements IInputHandler {
1284
1284
case 66 :
1285
1285
this . _terminal . log ( 'Serial port requested application keypad.' ) ;
1286
1286
this . _terminal . applicationKeypad = true ;
1287
- this . _terminal . viewport . syncScrollArea ( ) ;
1287
+ if ( this . _terminal . viewport ) {
1288
+ this . _terminal . viewport . syncScrollArea ( ) ;
1289
+ }
1288
1290
break ;
1289
1291
case 9 : // X10 Mouse
1290
1292
// no release, no motion, no wheel, no modifiers.
@@ -1333,14 +1335,19 @@ export class InputHandler extends Disposable implements IInputHandler {
1333
1335
case 25 : // show cursor
1334
1336
this . _terminal . cursorHidden = false ;
1335
1337
break ;
1338
+ case 1048 : // alt screen cursor
1339
+ this . saveCursor ( params ) ;
1340
+ break ;
1336
1341
case 1049 : // alt screen buffer cursor
1337
- // TODO: Not sure if we need to save/restore after switching the buffer
1338
- // this.saveCursor(params);
1342
+ this . saveCursor ( params ) ;
1339
1343
// FALL-THROUGH
1340
1344
case 47 : // alt screen buffer
1341
1345
case 1047 : // alt screen buffer
1342
- this . _terminal . buffers . activateAltBuffer ( ) ;
1343
- this . _terminal . viewport . syncScrollArea ( ) ;
1346
+ this . _terminal . buffers . activateAltBuffer ( this . _terminal . eraseAttr ( ) ) ;
1347
+ this . _terminal . refresh ( 0 , this . _terminal . rows - 1 ) ;
1348
+ if ( this . _terminal . viewport ) {
1349
+ this . _terminal . viewport . syncScrollArea ( ) ;
1350
+ }
1344
1351
this . _terminal . showCursor ( ) ;
1345
1352
break ;
1346
1353
case 2004 : // bracketed paste mode (https://cirw.in/blog/bracketed-paste)
@@ -1473,7 +1480,9 @@ export class InputHandler extends Disposable implements IInputHandler {
1473
1480
case 66 :
1474
1481
this . _terminal . log ( 'Switching back to normal keypad.' ) ;
1475
1482
this . _terminal . applicationKeypad = false ;
1476
- this . _terminal . viewport . syncScrollArea ( ) ;
1483
+ if ( this . _terminal . viewport ) {
1484
+ this . _terminal . viewport . syncScrollArea ( ) ;
1485
+ }
1477
1486
break ;
1478
1487
case 9 : // X10 Mouse
1479
1488
case 1000 : // vt200 mouse
@@ -1501,18 +1510,22 @@ export class InputHandler extends Disposable implements IInputHandler {
1501
1510
case 25 : // hide cursor
1502
1511
this . _terminal . cursorHidden = true ;
1503
1512
break ;
1513
+ case 1048 : // alt screen cursor
1514
+ this . restoreCursor ( params ) ;
1515
+ break ;
1504
1516
case 1049 : // alt screen buffer cursor
1505
1517
// FALL-THROUGH
1506
1518
case 47 : // normal screen buffer
1507
1519
case 1047 : // normal screen buffer - clearing it first
1508
1520
// Ensure the selection manager has the correct buffer
1509
1521
this . _terminal . buffers . activateNormalBuffer ( ) ;
1510
- // TODO: Not sure if we need to save/restore after switching the buffer
1511
- // if (params[0] === 1049) {
1512
- // this.restoreCursor(params);
1513
- // }
1522
+ if ( params [ 0 ] === 1049 ) {
1523
+ this . restoreCursor ( params ) ;
1524
+ }
1514
1525
this . _terminal . refresh ( 0 , this . _terminal . rows - 1 ) ;
1515
- this . _terminal . viewport . syncScrollArea ( ) ;
1526
+ if ( this . _terminal . viewport ) {
1527
+ this . _terminal . viewport . syncScrollArea ( ) ;
1528
+ }
1516
1529
this . _terminal . showCursor ( ) ;
1517
1530
break ;
1518
1531
case 2004 : // bracketed paste mode (https://cirw.in/blog/bracketed-paste)
@@ -1791,7 +1804,9 @@ export class InputHandler extends Disposable implements IInputHandler {
1791
1804
this . _terminal . originMode = false ;
1792
1805
this . _terminal . wraparoundMode = true ; // defaults: xterm - true, vt100 - false
1793
1806
this . _terminal . applicationKeypad = false ; // ?
1794
- this . _terminal . viewport . syncScrollArea ( ) ;
1807
+ if ( this . _terminal . viewport ) {
1808
+ this . _terminal . viewport . syncScrollArea ( ) ;
1809
+ }
1795
1810
this . _terminal . applicationCursor = false ;
1796
1811
this . _terminal . buffer . scrollTop = 0 ;
1797
1812
this . _terminal . buffer . scrollBottom = this . _terminal . rows - 1 ;
@@ -1858,7 +1873,7 @@ export class InputHandler extends Disposable implements IInputHandler {
1858
1873
public saveCursor ( params : number [ ] ) : void {
1859
1874
this . _terminal . buffer . savedX = this . _terminal . buffer . x ;
1860
1875
this . _terminal . buffer . savedY = this . _terminal . buffer . y ;
1861
- this . _terminal . savedCurAttr = this . _terminal . curAttr ;
1876
+ this . _terminal . buffer . savedCurAttr = this . _terminal . curAttr ;
1862
1877
}
1863
1878
1864
1879
@@ -1870,7 +1885,7 @@ export class InputHandler extends Disposable implements IInputHandler {
1870
1885
public restoreCursor ( params : number [ ] ) : void {
1871
1886
this . _terminal . buffer . x = this . _terminal . buffer . savedX || 0 ;
1872
1887
this . _terminal . buffer . y = this . _terminal . buffer . savedY || 0 ;
1873
- this . _terminal . curAttr = this . _terminal . savedCurAttr || DEFAULT_ATTR ;
1888
+ this . _terminal . curAttr = this . _terminal . buffer . savedCurAttr || DEFAULT_ATTR ;
1874
1889
}
1875
1890
1876
1891
0 commit comments