diff options
-rw-r--r-- | src/ansi.c | 65 | ||||
-rw-r--r-- | src/resize.c | 11 | ||||
-rw-r--r-- | src/window.h | 4 |
3 files changed, 46 insertions, 34 deletions
@@ -122,8 +122,8 @@ static void DesignateCharset __P((int, int)); static void MapCharset __P((int)); static void MapCharsetR __P((int)); #endif -static void SaveCursor __P((void)); -static void RestoreCursor __P((void)); +static void SaveCursor __P((struct cursor *)); +static void RestoreCursor __P((struct cursor *)); static void BackSpace __P((void)); static void Return __P((void)); static void LineFeed __P((int)); @@ -987,10 +987,10 @@ int c, intermediate; Report("\033[?%d;%dc", 1, 2); break; case '7': - SaveCursor(); + SaveCursor(&curr->w_saved); break; case '8': - RestoreCursor(); + RestoreCursor(&curr->w_saved); break; case 'c': ClearScreen(); @@ -1233,7 +1233,7 @@ int c, intermediate; LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); break; case 's': - SaveCursor(); + SaveCursor(&curr->w_saved); break; case 't': switch(a1) @@ -1274,7 +1274,7 @@ int c, intermediate; } break; case 'u': - RestoreCursor(); + RestoreCursor(&curr->w_saved); break; case 'I': if (!a1) @@ -1431,15 +1431,28 @@ int c, intermediate; if (use_altscreen) { if (i) - EnterAltScreen(curr); + { + if (!curr->w_alt.on) + SaveCursor(&curr->w_alt.cursor); + EnterAltScreen(curr); + } else - LeaveAltScreen(curr); + { + LeaveAltScreen(curr); + RestoreCursor(&curr->w_alt.cursor); + } if (a1 == 47 && !i) curr->w_saved.on = 0; LRefreshAll(&curr->w_layer, 0); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } break; + case 1048: + if (i) + SaveCursor(&curr->w_saved); + else + RestoreCursor(&curr->w_saved); + break; /* case 66: NKM: Numeric keypad appl mode */ /* case 68: KBUM: Keyboard usage mode (data process) */ case 1000: /* VT200 mouse tracking */ @@ -1755,34 +1768,36 @@ int n; #endif /* FONT */ static void -SaveCursor() +SaveCursor(cursor) +struct cursor *cursor; { - curr->w_saved.on = 1; - curr->w_saved.x = curr->w_x; - curr->w_saved.y = curr->w_y; - curr->w_saved.Rend = curr->w_rend; + cursor->on = 1; + cursor->x = curr->w_x; + cursor->y = curr->w_y; + cursor->Rend = curr->w_rend; #ifdef FONT - curr->w_saved.Charset = curr->w_Charset; - curr->w_saved.CharsetR = curr->w_CharsetR; - bcopy((char *) curr->w_charsets, (char *) curr->w_saved.Charsets, + cursor->Charset = curr->w_Charset; + cursor->CharsetR = curr->w_CharsetR; + bcopy((char *) curr->w_charsets, (char *) cursor->Charsets, 4 * sizeof(int)); #endif } static void -RestoreCursor() +RestoreCursor(cursor) +struct cursor *cursor; { - if (!curr->w_saved.on) + if (!cursor->on) return; - LGotoPos(&curr->w_layer, curr->w_saved.x, curr->w_saved.y); - curr->w_x = curr->w_saved.x; - curr->w_y = curr->w_saved.y; - curr->w_rend = curr->w_saved.Rend; + LGotoPos(&curr->w_layer, cursor->x, cursor->y); + curr->w_x = cursor->x; + curr->w_y = cursor->y; + curr->w_rend = cursor->Rend; #ifdef FONT - bcopy((char *) curr->w_saved.Charsets, (char *) curr->w_charsets, + bcopy((char *) cursor->Charsets, (char *) curr->w_charsets, 4 * sizeof(int)); - curr->w_Charset = curr->w_saved.Charset; - curr->w_CharsetR = curr->w_saved.CharsetR; + curr->w_Charset = cursor->Charset; + curr->w_CharsetR = cursor->CharsetR; curr->w_ss = 0; curr->w_FontL = curr->w_charsets[curr->w_Charset]; curr->w_FontR = curr->w_charsets[curr->w_CharsetR]; diff --git a/src/resize.c b/src/resize.c index 0f24ca5..ec67a7a 100644 --- a/src/resize.c +++ b/src/resize.c @@ -976,6 +976,10 @@ int wi, he, hi; p->w_saved.y = 0; if (p->w_saved.y >= he) p->w_saved.y = he - 1; + if (p->w_alt.cursor.x > wi) + p->w_alt.cursor.x = wi; + if (p->w_alt.cursor.y >= he) + p->w_alt.cursor.y = he - 1; /* reset scrolling region */ p->w_top = 0; @@ -1043,8 +1047,6 @@ struct win *p; p->w_alt.mlines = 0; p->w_alt.width = 0; p->w_alt.height = 0; - p->w_alt.x = 0; - p->w_alt.y = 0; #ifdef COPY_PASTE if (p->w_alt.hlines) { @@ -1071,8 +1073,6 @@ struct win *p; SWAP(width, t); SWAP(height, t); SWAP(histheight, t); - SWAP(x, t); - SWAP(y, t); #ifdef COPY_PASTE SWAP(hlines, ml); @@ -1085,7 +1085,6 @@ void EnterAltScreen(p) struct win *p; { - int ox = p->w_x, oy = p->w_y; if (!p->w_alt.on) { /* If not already using the alternate screen buffer, then create @@ -1101,8 +1100,6 @@ struct win *p; p->w_histheight = 0; } ChangeWindowSize(p, p->w_alt.width, p->w_alt.height, p->w_alt.histheight); - p->w_x = ox; - p->w_y = oy; p->w_alt.on = 1; } diff --git a/src/window.h b/src/window.h index 07a8fa5..1f70f39 100644 --- a/src/window.h +++ b/src/window.h @@ -188,7 +188,7 @@ struct win int w_charsets[4]; /* Font = charsets[Charset] */ #endif int w_ss; - struct { + struct cursor { int on; int x, y; struct mchar Rend; @@ -284,10 +284,10 @@ struct win int width; int height; int histheight; - int x, y; #ifdef COPY_PASTE struct mline *hlines; int histidx; + struct cursor cursor; #endif } w_alt; |