From d221e4719e48c67886b149c3412a52f9a5daf697 Mon Sep 17 00:00:00 2001 From: Waldo Bastian Date: Thu, 1 Nov 2001 02:50:59 +0000 Subject: [PATCH] Fix "joe" under konsole: * Setting a scroll region takes effect on both primary and alternate screen. * Some cleanups to make konsole follow xterm behaviour more closely. svn path=/trunk/kdebase/konsole/; revision=120208 --- konsole/TEmuVt102.cpp | 27 ++++++++++++++++++++------- konsole/TEmuVt102.h | 2 ++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/konsole/TEmuVt102.cpp b/konsole/TEmuVt102.cpp index 5aa08882..0b72224e 100644 --- a/konsole/TEmuVt102.cpp +++ b/konsole/TEmuVt102.cpp @@ -100,7 +100,7 @@ void TEmuVt102::reset() //kdDebug(1211)<<"TEmuVt102::reset() resetCharSet()"<reset(); + screen[1]->reset(); //kdDebug(1211)<<"TEmuVt102::reset() setCodec()"<setCursorY (p ); break; //LINUX case TY_CSI_PN('f' ) : scr->setCursorYX (p, q); break; //VT100 - case TY_CSI_PN('r' ) : scr->setMargins (p, q); break; //VT100 + case TY_CSI_PN('r' ) : setMargins (p, q); break; //VT100 case TY_CSI_PN('y' ) : /* IGNORED: Confidence test */ break; //VT100 case TY_CSI_PR('h', 1) : setMode (MODE_AppCuKeys); break; //VT100 @@ -573,6 +573,8 @@ void TEmuVt102::tau( int token, int p, int q ) case TY_CSI_PR('h', 47) : setMode (MODE_AppScreen); break; //VT100 case TY_CSI_PR('l', 47) : resetMode (MODE_AppScreen); break; //VT100 + case TY_CSI_PR('s', 47) : saveMode (MODE_AppScreen); break; //XTERM + case TY_CSI_PR('r', 47) : restoreMode (MODE_AppScreen); break; //XTERM // XTerm defines the following modes: // SET_VT200_MOUSE 1000 @@ -604,16 +606,20 @@ void TEmuVt102::tau( int token, int p, int q ) case TY_CSI_PR('r', 1003) : restoreMode (MODE_Mouse1000); break; //XTERM case TY_CSI_PR('h', 1047) : setMode (MODE_AppScreen); break; //XTERM - case TY_CSI_PR('l', 1047) : resetMode (MODE_AppScreen); break; //XTERM + case TY_CSI_PR('l', 1047) : screen[1]->clearEntireScreen(); resetMode(MODE_AppScreen); break; //XTERM + case TY_CSI_PR('s', 1047) : saveMode (MODE_AppScreen); break; //XTERM + case TY_CSI_PR('r', 1047) : restoreMode (MODE_AppScreen); break; //XTERM //FIXME: Unitoken: save translations case TY_CSI_PR('h', 1048) : saveCursor ( ); break; //XTERM case TY_CSI_PR('l', 1048) : restoreCursor ( ); break; //XTERM + case TY_CSI_PR('s', 1048) : saveCursor ( ); break; //XTERM + case TY_CSI_PR('r', 1048) : restoreCursor ( ); break; //XTERM //FIXME: every once new sequences like this pop up in xterm. // Here's a guess of what they could mean. - case TY_CSI_PR('h', 1049) : setMode (MODE_AppScreen); break; //XTERM - case TY_CSI_PR('l', 1049) : resetMode (MODE_AppScreen); break; //XTERM + case TY_CSI_PR('h', 1049) : saveCursor(); screen[1]->clearEntireScreen(); setMode(MODE_AppScreen); break; //XTERM + case TY_CSI_PR('l', 1049) : resetMode(MODE_AppScreen); restoreCursor(); break; //XTERM //FIXME: when changing between vt52 and ansi mode evtl do some resetting. case TY_VT52__('A' ) : scr->cursorUp ( 1); break; //VT52 @@ -942,6 +948,12 @@ void TEmuVt102::useCharset(int n) CHARSET.pound = (CHARSET.charset[n&3] == 'A'); //This mode is obsolete } +void TEmuVt102::setMargins(int t, int b) +{ + screen[0]->setMargins(t, b); + screen[1]->setMargins(t, b); +} + /*! Save the cursor position and the rendition attribute settings. */ void TEmuVt102::saveCursor() @@ -1001,10 +1013,10 @@ void TEmuVt102::setMode(int m) { case MODE_Mouse1000 : gui->setMouseMarks(FALSE); break; + case MODE_AppScreen : screen[1]->clearSelection(); - screen[1]->clearEntireScreen(); setScreen(1); - break; + break; } if (m < MODES_SCREEN || m == MODE_NewLine) { @@ -1020,6 +1032,7 @@ void TEmuVt102::resetMode(int m) { case MODE_Mouse1000 : gui->setMouseMarks(TRUE); break; + case MODE_AppScreen : screen[0]->clearSelection(); setScreen(0); break; diff --git a/konsole/TEmuVt102.h b/konsole/TEmuVt102.h index 1ef4b19e..9291ddb9 100644 --- a/konsole/TEmuVt102.h +++ b/konsole/TEmuVt102.h @@ -128,6 +128,8 @@ protected: void saveCursor(); void restoreCursor(); void resetCharset(int scrno); + void setMargins(int t, int b); + CharCodes charset[2]; DECpar currParm;