From fd8832ccdbf807fe9a6ecd04d6166191c3b7ae90 Mon Sep 17 00:00:00 2001 From: Kipling Inscore Date: Thu, 1 Apr 2010 15:53:29 -0400 Subject: Fix 'hardcopy -h'. Make -h save scrollback with or without a file name given. Also, preserve the unlikely case in which someone actually does want to save display to '-h'; with :hardcopy -- -h or, to save both history and display to '-h' :hardcopy -h -h Also, :hardcopy -- :hardcopy -h -- will, as they always have, save display or history and display to '--'. --- src/ChangeLog | 1 + src/process.c | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b877ebc..c2e356f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -107,6 +107,7 @@ Version 4.1.0 (??/??/20??): * Romain Francoise * Emanuele Giaquinta * Yi-Hsuan Hsin + * Kipling Inscore * Chris Jones * Max Kalashnikov * Steve Kemp diff --git a/src/process.c b/src/process.c index cc2b56f..783fdd7 100644 --- a/src/process.c +++ b/src/process.c @@ -1271,14 +1271,22 @@ int key; case RC_HARDCOPY: { int mode = DUMP_HARDCOPY; + char *file = NULL; - if (argc > 1 && !strcmp(*args, "-h")) + if (args[0]) { - mode = DUMP_SCROLLBACK; - args++; - argc--; + if (!strcmp(*args, "-h")) + { + mode = DUMP_SCROLLBACK; + file = args[1]; + } + else if (!strcmp(*args, "--") && args[1]) + file = args[1]; + else + file = args[0]; } - if (*args && args[1]) + + if (args[0] && file == args[0] && args[1]) { OutputMsg(0, "%s: hardcopy: too many arguments", rc_name); break; @@ -1286,7 +1294,7 @@ int key; if (fore == 0 && *args == 0) OutputMsg(0, "%s: hardcopy: window required", rc_name); else - WriteFile(user, *args, mode); + WriteFile(user, file, mode); } break; case RC_DEFLOG: -- cgit v1.2.1 From 43db71f8b5ecb9e6f243cf940d479547ebf8c855 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Thu, 1 Apr 2010 15:59:34 -0400 Subject: Use NEED_FORE flag for 'hardcopy'. Screen wouldn't do anything with 'hardcopy' if there was no foreground window, except overwriting the specified file (when hardcopy_append is off, of course). But the NEED_FORE flag wasn't set. I am not sure why this was the case. So I have added the NEED_FORE flag so that 'hardcopy' command fails if there is no foreground window. --- src/comm.c | 2 +- src/process.c | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/comm.c b/src/comm.c index aa512de..5f4af8a 100644 --- a/src/comm.c +++ b/src/comm.c @@ -195,7 +195,7 @@ struct comm comms[RC_LAST + 1] = { "focusminsize", ARGS_02 }, { "gr", NEED_FORE|ARGS_01 }, { "group", NEED_FORE|ARGS_01 }, - { "hardcopy", ARGS_012 }, + { "hardcopy", NEED_FORE|ARGS_012 }, { "hardcopy_append", ARGS_1 }, { "hardcopydir", ARGS_01 }, { "hardstatus", ARGS_012 }, diff --git a/src/process.c b/src/process.c index 783fdd7..da9188d 100644 --- a/src/process.c +++ b/src/process.c @@ -1291,10 +1291,7 @@ int key; OutputMsg(0, "%s: hardcopy: too many arguments", rc_name); break; } - if (fore == 0 && *args == 0) - OutputMsg(0, "%s: hardcopy: window required", rc_name); - else - WriteFile(user, file, mode); + WriteFile(user, file, mode); } break; case RC_DEFLOG: -- cgit v1.2.1 From d6e9eb25e92e548f86ffd78a604022c47303aacc Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Fri, 2 Apr 2010 22:27:59 -0400 Subject: Re-organize some code. This change causes no functional change at all. This simply groups some common variables into structs. --- src/ansi.c | 34 +++++++++++++++---------------- src/resize.c | 66 ++++++++++++++++++++++++++++++------------------------------ src/window.h | 32 ++++++++++++++++------------- 3 files changed, 68 insertions(+), 64 deletions(-) diff --git a/src/ansi.c b/src/ansi.c index 5f28346..685907a 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -200,7 +200,7 @@ register struct win *p; p->w_cursorkeys = 0; p->w_top = 0; p->w_bot = p->w_height - 1; - p->w_saved = 0; + p->w_saved.on = 0; p->w_x = p->w_y = 0; p->w_state = LIT; p->w_StringType = NONE; @@ -1435,7 +1435,7 @@ int c, intermediate; else LeaveAltScreen(curr); if (a1 == 47 && !i) - curr->w_saved = 0; + curr->w_saved.on = 0; LRefreshAll(&curr->w_layer, 0); LGotoPos(&curr->w_layer, curr->w_x, curr->w_y); } @@ -1757,14 +1757,14 @@ int n; static void SaveCursor() { - curr->w_saved = 1; - curr->w_Saved_x = curr->w_x; - curr->w_Saved_y = curr->w_y; - curr->w_SavedRend = curr->w_rend; + 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; #ifdef FONT - curr->w_SavedCharset = curr->w_Charset; - curr->w_SavedCharsetR = curr->w_CharsetR; - bcopy((char *) curr->w_charsets, (char *) curr->w_SavedCharsets, + curr->w_saved.Charset = curr->w_Charset; + curr->w_saved.CharsetR = curr->w_CharsetR; + bcopy((char *) curr->w_charsets, (char *) curr->w_saved.Charsets, 4 * sizeof(int)); #endif } @@ -1772,17 +1772,17 @@ SaveCursor() static void RestoreCursor() { - if (!curr->w_saved) + if (!curr->w_saved.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_SavedRend; + 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; #ifdef FONT - bcopy((char *) curr->w_SavedCharsets, (char *) curr->w_charsets, + bcopy((char *) curr->w_saved.Charsets, (char *) curr->w_charsets, 4 * sizeof(int)); - curr->w_Charset = curr->w_SavedCharset; - curr->w_CharsetR = curr->w_SavedCharsetR; + curr->w_Charset = curr->w_saved.Charset; + curr->w_CharsetR = curr->w_saved.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 5d1df4b..0f24ca5 100644 --- a/src/resize.c +++ b/src/resize.c @@ -585,10 +585,10 @@ int wi; #ifdef COPY_PASTE RESET_LINES(p->w_hlines, p->w_histheight); - RESET_LINES(p->w_alt_hlines, p->w_alt_histheight); + RESET_LINES(p->w_alt.hlines, p->w_alt.histheight); #endif - RESET_LINES(p->w_alt_mlines, p->w_alt_height); + RESET_LINES(p->w_alt.mlines, p->w_alt.height); } } @@ -957,8 +957,8 @@ int wi, he, hi; } } - /* Change w_Saved_y - this is only an estimate... */ - p->w_Saved_y += ncy - p->w_y; + /* Change w_saved.y - this is only an estimate... */ + p->w_saved.y += ncy - p->w_y; p->w_x = ncx; p->w_y = ncy; @@ -970,12 +970,12 @@ int wi, he, hi; p->w_x = wi; if (p->w_y >= he) p->w_y = he - 1; - if (p->w_Saved_x > wi) - p->w_Saved_x = wi; - if (p->w_Saved_y < 0) - p->w_Saved_y = 0; - if (p->w_Saved_y >= he) - p->w_Saved_y = he - 1; + if (p->w_saved.x > wi) + p->w_saved.x = wi; + if (p->w_saved.y < 0) + p->w_saved.y = 0; + if (p->w_saved.y >= he) + p->w_saved.y = he - 1; /* reset scrolling region */ p->w_top = 0; @@ -1034,28 +1034,28 @@ struct win *p; { int i; - if (p->w_alt_mlines) + if (p->w_alt.mlines) { - for (i = 0; i < p->w_alt_height; i++) - FreeMline(p->w_alt_mlines + i); - free(p->w_alt_mlines); + for (i = 0; i < p->w_alt.height; i++) + FreeMline(p->w_alt.mlines + i); + free(p->w_alt.mlines); } - 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; + 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) + if (p->w_alt.hlines) { - for (i = 0; i < p->w_alt_histheight; i++) - FreeMline(p->w_alt_hlines + i); - free(p->w_alt_hlines); + for (i = 0; i < p->w_alt.histheight; i++) + FreeMline(p->w_alt.hlines + i); + free(p->w_alt.hlines); } - p->w_alt_hlines = 0; - p->w_alt_histidx = 0; + p->w_alt.hlines = 0; + p->w_alt.histidx = 0; #endif - p->w_alt_histheight = 0; + p->w_alt.histheight = 0; } static void @@ -1065,7 +1065,7 @@ struct win *p; struct mline *ml; int t; -#define SWAP(item, t) do { (t) = p->w_alt_##item; p->w_alt_##item = p->w_##item; p->w_##item = (t); } while (0) +#define SWAP(item, t) do { (t) = p->w_alt. item; p->w_alt. item = p->w_##item; p->w_##item = (t); } while (0) SWAP(mlines, ml); SWAP(width, t); @@ -1086,7 +1086,7 @@ EnterAltScreen(p) struct win *p; { int ox = p->w_x, oy = p->w_y; - if (!p->w_alt_current) + if (!p->w_alt.on) { /* If not already using the alternate screen buffer, then create a new one and swap it with the 'real' screen buffer. */ @@ -1100,20 +1100,20 @@ struct win *p; p->w_height = 0; p->w_histheight = 0; } - ChangeWindowSize(p, p->w_alt_width, p->w_alt_height, p->w_alt_histheight); + 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_current = 1; + p->w_alt.on = 1; } void LeaveAltScreen(p) struct win *p; { - if (!p->w_alt_current) + if (!p->w_alt.on) return; SwapAltScreen(p); - ChangeWindowSize(p, p->w_alt_width, p->w_alt_height, p->w_alt_histheight); + ChangeWindowSize(p, p->w_alt.width, p->w_alt.height, p->w_alt.histheight); FreeAltScreen(p); - p->w_alt_current = 0; + p->w_alt.on = 0; } diff --git a/src/window.h b/src/window.h index 47f5c9e..07a8fa5 100644 --- a/src/window.h +++ b/src/window.h @@ -188,14 +188,16 @@ struct win int w_charsets[4]; /* Font = charsets[Charset] */ #endif int w_ss; - int w_saved; - int w_Saved_x, w_Saved_y; - struct mchar w_SavedRend; + struct { + int on; + int x, y; + struct mchar Rend; #ifdef FONT - int w_SavedCharset; - int w_SavedCharsetR; - int w_SavedCharsets[4]; + int Charset; + int CharsetR; + int Charsets[4]; #endif + } w_saved; int w_top, w_bot; /* scrollregion */ int w_wrap; /* autowrap */ int w_origin; /* origin mode */ @@ -276,16 +278,18 @@ struct win int w_telsubidx; struct event w_telconnev; #endif - struct mline *w_alt_mlines; - int w_alt_width; - int w_alt_height; - int w_alt_histheight; - int w_alt_x, w_alt_y; + struct { + int on; /* Is the alternate buffer currently being used? */ + struct mline *mlines; + int width; + int height; + int histheight; + int x, y; #ifdef COPY_PASTE - struct mline *w_alt_hlines; - int w_alt_histidx; + struct mline *hlines; + int histidx; #endif - int w_alt_current; /* Is the alternate buffer currently being used? */ + } w_alt; struct event w_destroyev; /* window destroy event */ #ifdef BSDWAIT -- cgit v1.2.1 From f95352946080be803b794c9f2733d8c809c1a39a Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Sat, 3 Apr 2010 00:52:53 -0400 Subject: Improve cursor store/restore on smcup/rmcup. When going to alternate screen buffer on smcup, the terminal is supposed to store the cursor position, rendition etc. Screen used to store only the position (and that was just a little buggy anyway). So change this behaviour to store all information about the cursor, and restore everything on rmcup. Apparently, the terminal is supposed to store the cursor for smcup (CSI ? 1049 h) and DECSC (ESC 7, CSI s, CSI ? 1048 h) separately. So be it. --- src/ansi.c | 65 +++++++++++++++++++++++++++++++++++++----------------------- src/resize.c | 11 ++++------ src/window.h | 4 ++-- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/ansi.c b/src/ansi.c index 685907a..46e3e01 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -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; -- cgit v1.2.1 From 4fb0d4f6fb14f79ea8cca4b6d567769f30d9f099 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Tue, 13 Apr 2010 21:20:04 -0400 Subject: Remove cap for scrollback history. Remove the unintentionally added cap for scrollback history. --- src/resize.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/resize.c b/src/resize.c index ec67a7a..61e044f 100644 --- a/src/resize.c +++ b/src/resize.c @@ -664,14 +664,6 @@ int wi, he, hi; he = 1000; } -#ifdef COPY_PASTE - if (hi > 1000) - { - Msg(0, "Window history too big. Truncated to 1000."); - hi = 1000; - } -#endif - if (p->w_width == wi && p->w_height == he && p->w_histheight == hi) { debug("ChangeWindowSize: No change.\n"); -- cgit v1.2.1 From a2284110b51e4b7695e96bb12e63c2263765f45d Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Tue, 13 Apr 2010 21:41:30 -0400 Subject: Select window by pressing # in window number. Thanks to Martin Przyjazny for reporting. --- src/list_window.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/list_window.c b/src/list_window.c index b65600d..4fd65d0 100644 --- a/src/list_window.c +++ b/src/list_window.c @@ -427,6 +427,38 @@ gl_Window_input(struct ListData *ldata, char **inp, int *len) } break; default: + if (ch >= '0' && ch <= '9') + { + struct ListRow *row = ldata->root; + for (; row; row = row->next) + { + struct win *w = row->data; + if (w->w_number == ch - '0') + { + struct ListRow *old = ldata->selected; + if (old == row) + break; + ldata->selected = row; + if (ldata->selected->y == -1) + { + /* We need to list all the rows, since we are scrolling down. But first, + * find the top of the visible list. */ + ldata->top = row; + glist_display_all(ldata); + } + else + { + /* just redisplay the two lines. */ + ldata->list_fn->gl_printrow(ldata, old); + ldata->list_fn->gl_printrow(ldata, ldata->selected); + flayer->l_y = ldata->selected->y; + LaySetCursor(); + } + break; + } + } + break; + } --*inp; ++*len; return 0; -- cgit v1.2.1 From 1741b69d4b27fc249ffa47233622de0530042411 Mon Sep 17 00:00:00 2001 From: Alexander Gattin Date: Sat, 17 Apr 2010 16:31:13 -0400 Subject: Fix compile error for setenv in HP-UX. Closes savannah bug #29451. --- src/configure.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configure.in b/src/configure.in index bd29de2..448bafd 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1217,14 +1217,14 @@ AC_HEADER_DIRENT AC_MSG_CHECKING(for setenv) if test -z "$ac_setenv_args"; then - AC_TRY_COMPILE( + AC_TRY_LINK( [#include ], [ setenv((char *) 0, (char *) 0, 0); ], ac_setenv_args=3) fi if test -z "$ac_setenv_args"; then - AC_TRY_COMPILE( + AC_TRY_LINK( [#include ], [ setenv((char *) 0, (char *) 0); -- cgit v1.2.1 From 7f606797eee2ab6f08cc05d783be999d7b477667 Mon Sep 17 00:00:00 2001 From: Curtis Brown Date: Mon, 19 Apr 2010 20:52:31 -0400 Subject: Update doc about selecting window in windowlist. Update doc about selecting window in windowlists by pressing its number. Closes savannah bug #29603. --- src/doc/screen.1 | 3 +++ src/doc/screen.texinfo | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/doc/screen.1 b/src/doc/screen.1 index ff2fe82..88a3204 100644 --- a/src/doc/screen.1 +++ b/src/doc/screen.1 @@ -3369,6 +3369,9 @@ The following keys are used to navigate in \*Qwindowlist\*U: \fBC-b\fP or \fBC-f\fP Move one full page up or down. .br .ti -2n +\fB0..9\fP Using the number keys, move to the selected line. +.br +.ti -2n \fBmouseclick\fP Move to the selected line. Available when \*Qmousetrack\*U is set to \*Qon\*U .br diff --git a/src/doc/screen.texinfo b/src/doc/screen.texinfo index 539f23d..9274ac2 100644 --- a/src/doc/screen.texinfo +++ b/src/doc/screen.texinfo @@ -1610,6 +1610,9 @@ The following keys are used to navigate in @code{windowlist}: @noindent @kbd{C-b} or @kbd{C-f} Move one full page up or down. +@indent +@kbd{0..9} Using the number keys, move to the selected line. + @noindent @kbd{mouseclick} Move to the selected line. Available when @code{mousetrack} is set to @code{on}. -- cgit v1.2.1 From 822666fa358ec4ee33ce4c42576dd2c3ba50ff23 Mon Sep 17 00:00:00 2001 From: Curtis Brown Date: Mon, 19 Apr 2010 20:58:02 -0400 Subject: Misc updates to the man and info pages. Closes savannag bug #29602. --- src/doc/screen.1 | 29 +++++++++++++++-------------- src/doc/screen.texinfo | 16 +++++++++------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/doc/screen.1 b/src/doc/screen.1 index 88a3204..c175891 100644 --- a/src/doc/screen.1 +++ b/src/doc/screen.1 @@ -2183,7 +2183,7 @@ If no arguments are given, the current settings are displayed. .BR "ignorecase " [ on | off ] .PP Tell screen to ignore the case of characters in searches. Default is -`off'. +`off'. Without any options, the state of ignorecase is toggled. .sp .ne 3 .B info @@ -2479,11 +2479,11 @@ Like mapdefault, but don't even look in the default bindkey table. .sp .ne 3 .B maptimeout -.RI [ timo ] +.RI [ timeout ] .PP Set the inter-character timer for input sequence detection to a timeout of -.I timo +.I timeout ms. The default timeout is 300ms. Maptimeout with no arguments shows the current setting. See also \*Qbindkey\*U. @@ -2905,8 +2905,9 @@ See also chapter \*QWINDOW TYPES\*U. .PP Set the size of the scrollback buffer for the current windows to \fInum\fP lines. The default scrollback is 100 lines. -See also the \*Qdefscrollback\*U command and use \*QC-a i\*U to view the -current setting. +See also the \*Qdefscrollback\*U command and use \*Qinfo\*U to view the +current setting. To access and use the contents in the scrollback buffer, +use the \*Qcopy\*U command. .sp .ne 3 .BR "select " [ \fIWindowID ] @@ -3206,7 +3207,7 @@ man page for more information on termcap definitions. .PP Uses the message line to display the time of day, the host name, and the load averages over 1, 5, and 15 minutes (if this is available on your system). -For window specific information use \*Qinfo\*U. +For window specific information, use \*Qinfo\*U. If a string is specified, it changes the format of the time report like it is described in the \*QSTRING ESCAPES\*U chapter. Screen uses a default of @@ -3269,7 +3270,7 @@ Sets the visual bell message. \fImessage\fP is printed to the status line if the window receives a bell character (^G), vbell is set to \*Qon\*U, but the terminal does not support a visual bell. The default message is \*QWuff, Wuff!!\*U. -Without parameter, the current message is shown. +Without a parameter, the current message is shown. .sp .ne 3 .BI "vbellwait " sec @@ -3284,7 +3285,7 @@ visual bell message. The default is 1 second. .PP If verbose is switched on, the command name is echoed, whenever a window is created (or resurrected from zombie state). Default is off. -Without parameter, the current setting is shown. +Without a parameter, the current setting is shown. .sp .ne 3 .B version @@ -3447,7 +3448,7 @@ When line-wrap is on, the second consecutive printable character output at the last column of a line will wrap to the start of the following line. As an added feature, backspace (^H) will also wrap through the left margin to the previous line. -Default is `on'. +Default is `on'. Without any options, the state of wrap is toggled. .sp .ne 3 .B writebuf @@ -3613,13 +3614,12 @@ Signals that are logical low (inactive) have their name preceded by an exclamation mark (!), otherwise the signal is logical high (active). Signals not supported by the hardware but available to the ioctl() interface are usually shown low. -.br +.PP When the CLOCAL status bit is true, the whole set of modem signals is placed inside curly braces ({ and }). When the CRTSCTS or TIOCSOFTCAR bit is set, the signals `CTS' or `CD' are shown in parenthesis, respectively. - - +.PP For tty windows, the command .B break causes the Data transmission line (TxD) to go low for a specified period of @@ -3628,6 +3628,7 @@ No data is sent and no modem control line is changed when a .B break is issued. .RE + .IP \(bu If the first parameter is \*Q//telnet\*U, the second parameter is expected to be a host name, and an optional third parameter may specify a TCP port number @@ -3692,7 +3693,7 @@ day number .IP D weekday name .IP f -flags of the window +flags of the window, see \*Qwindows\*U for meanings of the various flags .IP F sets %? to true if the window has the focus .IP h @@ -4946,7 +4947,7 @@ Pablo Averbuj (pablo@averbuj.com). .SH VERSION -This is version 4.0.2. Its roots are a merge of a custom version +This is version 4.1.0. Its roots are a merge of a custom version 2.3PR7 by Wayne Davison and several enhancements to Oliver Laumann's version 2.0. Note that all versions numbered 2.x are copyright by Oliver Laumann. diff --git a/src/doc/screen.texinfo b/src/doc/screen.texinfo index 9274ac2..08ca259 100644 --- a/src/doc/screen.texinfo +++ b/src/doc/screen.texinfo @@ -1026,7 +1026,7 @@ Find previous command beginning @dots{}. @xref{History}. Change the window's hardstatus line. @xref{Hardstatus}. @item idle [@var{timeout} [@var{cmd} @var{args}]] Define a screen saver command. @xref{Screen Saver}. -@item ignorecase [@var{state}] +@item ignorecase [on|off] Ignore character case in searches. @xref{Searching}. @item info Display window settings. @xref{Info}. @@ -1222,7 +1222,7 @@ Set the width of the window. @xref{Window Size}. Present a list of all windows for selection. @xref{Windowlist}. @item windows List active windows. @xref{Windows}. -@item wrap [@var{state}] +@item wrap [ on | off ] Control line-wrap behavior. @xref{Wrap}. @item writebuf [-e @var{encoding}] [@var{filename}] Write paste buffer to screen-exchange file. @xref{Screen Exchange}. @@ -3278,13 +3278,14 @@ partial redraw mode. @kindex r @kindex C-r -@deffn Command wrap state +@deffn Command wrap [ on | off ] (@kbd{C-a r}, @kbd{C-a C-r}) @* Sets the line-wrap setting for the current window. When line-wrap is on, the second consecutive printable character output at the last column of a line will wrap to the start of the following line. As an added feature, backspace (^H) will also wrap through the left margin to the -previous line. Default is @samp{on}. +previous line. Default is @samp{on}. Without any options, the state of +@code{wrap} is toggled. @end deffn @deffn Command defwrap state @@ -3522,7 +3523,7 @@ to hold more useful lines in your scrollback buffer. @end deffn @node Copy Mode Keys, Movement, Scrollback, Copy -@subsection markkeys +@subsection Markkeys @deffn Command markkeys string (none)@* This is a method of changing the keymap used for copy/history mode. The @@ -3654,10 +3655,11 @@ will copy lines 11 to 15 into the paste buffer. @noindent @kbd{C-r} @code{emacs} style reverse i-search. -@deffn Command ignorecase [state] +@deffn Command ignorecase [on|off] (none)@* Tell screen to ignore the case of characters in searches. Default is -@code{off}. +@code{off}. Without any options, the state of @code{ignorecase} +is toggled. @end deffn @noindent -- cgit v1.2.1 From 07b5b146174d6c89a4f3c5bdd7a018b14ffc87f8 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Sat, 24 Apr 2010 15:29:47 -0400 Subject: Credit. --- src/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ChangeLog b/src/ChangeLog index c2e356f..1b29f87 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -105,6 +105,7 @@ Version 4.1.0 (??/??/20??): * Christian Ebert * Geraint Edwards * Romain Francoise + * Alexander Gattin * Emanuele Giaquinta * Yi-Hsuan Hsin * Kipling Inscore -- cgit v1.2.1 From 98bf4132c545e3880432d6866527ee0753d908fc Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 10 May 2010 22:52:51 -0400 Subject: Fix a bug with displaying blank spaces with bce on. With bce on, in some terminals, copying when applications use a theme with a custom background color other than the default ends up copying blank-spaces at the end of the lines as white-spces. This fixes that. --- src/display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/display.c b/src/display.c index 2b3eca3..5fa11cb 100644 --- a/src/display.c +++ b/src/display.c @@ -2524,7 +2524,7 @@ int from, to, y, bce; DisplayLine(oml, &mline_blank, y, from, to); return; } - bcechar = mchar_blank; + bcechar = mchar_null; rend_setbg(&bcechar, bce); for (x = from; x <= to; x++) copy_mchar2mline(&bcechar, &mline_old, x); -- cgit v1.2.1 From 4f9101fc9d78581caef72a52cdd4767529912e1b Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 10 May 2010 23:15:21 -0400 Subject: Fix updating paused regions (in split mode). Adding a multi-cell character in a split region doesn't always refresh properly. Fix that problem. --- src/layer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/layer.c b/src/layer.c index 4ae587f..aeea318 100644 --- a/src/layer.c +++ b/src/layer.c @@ -335,7 +335,13 @@ int x, y; #endif if (l->l_pause.d) - LayPauseUpdateRegion(l, x, x, y, y); + LayPauseUpdateRegion(l, x, +#ifdef DW_CHARS + x + (c->mbcs ? 1 : 0) +#else + x +#endif + , y, y); FOR_EACH_UNPAUSED_CANVAS(l, { -- cgit v1.2.1 From 2f565ead2d6cb059dba39da47a5cde105bd35125 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 10 May 2010 23:18:36 -0400 Subject: Fix compiling with SIMPLESCREEN. --- src/resize.c | 4 ++-- src/window.h | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/resize.c b/src/resize.c index 61e044f..7516751 100644 --- a/src/resize.c +++ b/src/resize.c @@ -1048,8 +1048,8 @@ struct win *p; } p->w_alt.hlines = 0; p->w_alt.histidx = 0; -#endif p->w_alt.histheight = 0; +#endif } static void @@ -1064,9 +1064,9 @@ struct win *p; SWAP(mlines, ml); SWAP(width, t); SWAP(height, t); - SWAP(histheight, t); #ifdef COPY_PASTE + SWAP(histheight, t); SWAP(hlines, ml); SWAP(histidx, t); #endif diff --git a/src/window.h b/src/window.h index 1f70f39..7311ecb 100644 --- a/src/window.h +++ b/src/window.h @@ -283,12 +283,14 @@ struct win struct mline *mlines; int width; int height; - int histheight; #ifdef COPY_PASTE + int histheight; struct mline *hlines; int histidx; - struct cursor cursor; +#else + int histheight; /* 0 */ #endif + struct cursor cursor; } w_alt; struct event w_destroyev; /* window destroy event */ -- cgit v1.2.1 From dfab4600877ee79c6ff004e88f331ff300ba2ad7 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 21 Jun 2010 22:26:54 -0400 Subject: Bring back --with-sys-screenrc configure flag. --- src/Makefile.in | 5 ++++- src/configure.in | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index 2ae57d0..d087311 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -25,7 +25,10 @@ SCREEN = screen-$(VERSION) GIT_REV = "`git describe --always 2>/dev/null`" DEFS = @DEFS@ -DGIT_REV=\"$(GIT_REV)\" -ETCSCREENRC = $(prefix)/etc/screenrc +ETCSCREENRC = @ETCSCREENRC@ +ifeq (${ETCSCREENRC}, ) +ETCSCREENRC=$(prefix)/etc/screenrc +endif SCREENENCODINGS = $(datadir)/screen/utf8encodings CC = @CC@ diff --git a/src/configure.in b/src/configure.in index 448bafd..4184947 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1294,6 +1294,11 @@ test -n "$seqptx" && LIBS="-ltermcap -lc -lsocket -linet -lnsl -lsec -lseq" AC_TRY_RUN(main(){exit(0);},,AC_MSG_ERROR(Can't run the compiler - internal error. Sorry.)) +ETCSCREENRC= +AC_MSG_CHECKING(for the global screenrc file) +AC_ARG_WITH(sys-screenrc, [ --with-sys-screenrc=path to the global screenrc file], [ ETCSCREENRC="${withval}" ]) +AC_SUBST(ETCSCREENRC) + AC_OUTPUT(Makefile doc/Makefile, [[ # a hook for preserving undef directive in config.h mv config.h conftest -- cgit v1.2.1 From a805439f6443fb0e00ac6caff92f99950c1ddda8 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Tue, 22 Jun 2010 11:19:40 -0400 Subject: Fix layout ordering. Layouts were being stored in a reversed list. This makes it confusing for both users and developers with regards to what the next layout is ('next', lay_next). So store the layouts in a properly ordered list in order to avoid the confusion. This closes savannah #29800. --- src/layout.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/layout.c b/src/layout.c index 6100b5d..196d10b 100644 --- a/src/layout.c +++ b/src/layout.c @@ -64,7 +64,7 @@ CreateLayout(title, startat) char *title; int startat; { - struct layout *lay; + struct layout *lay, **pl; int i; if (startat >= MAXLAY || startat < 0) @@ -86,8 +86,12 @@ int startat; lay->lay_autosave = 1; lay->lay_number = i; laytab[i] = lay; - lay->lay_next = layouts; - layouts = lay; + lay->lay_next = 0; + + pl = &layouts; + while (*pl) + pl = &(*pl)->lay_next; + *pl = lay; return lay; } -- cgit v1.2.1 From 066b098a312e5cafaccc0cafcf66e5c7dd33de8a Mon Sep 17 00:00:00 2001 From: Jessica McKellar Date: Wed, 10 Nov 2010 21:47:46 -0500 Subject: Spelling fix: usefull --> useful. Thank you Curtis Brown for the patch. This resolves bug #27052. --- src/NEWS.3.5 | 2 +- src/mark.c | 2 +- src/window.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NEWS.3.5 b/src/NEWS.3.5 index d0d1970..74bb7bf 100644 --- a/src/NEWS.3.5 +++ b/src/NEWS.3.5 @@ -77,7 +77,7 @@ document. * Screen can now be started detached (screen -d -m -S sockname). - This is usefull if you want to start screen in your /etc/rc file + This is useful if you want to start screen in your /etc/rc file (e.g. as a console multiplexer) * Console grabbing added ('console on' command). diff --git a/src/mark.c b/src/mark.c index ccb74f9..35c2178 100644 --- a/src/mark.c +++ b/src/mark.c @@ -771,7 +771,7 @@ processchar: LGotoPos(flayer, cx, W2D(cy)); break; case '@': - /* it may be usefull to have a key that does nothing */ + /* it may be useful to have a key that does nothing */ break; case '%': rep_cnt--; diff --git a/src/window.c b/src/window.c index 1716796..55bcf5d 100644 --- a/src/window.c +++ b/src/window.c @@ -642,7 +642,7 @@ struct NewWindow *newwin; #ifdef MULTIUSER /* * This is dangerous: without a display we use creators umask - * This is intended to be usefull for detached startup. + * This is intended to be useful for detached startup. * But is still better than default bits with a NULL user. */ if (NewWindowAcl(p, display ? D_user : users)) -- cgit v1.2.1 From 519ac9b05b05d7a026261b1a9f8d81f784eddbb7 Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 28 Mar 2011 13:27:08 -0400 Subject: Remember the bell event if there's no current display. This way, when a user logs back in, he is notified of the bell event that happened while detached. --- src/ansi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ansi.c b/src/ansi.c index 46e3e01..6a64095 100644 --- a/src/ansi.c +++ b/src/ansi.c @@ -2902,6 +2902,8 @@ struct win *p; int visual; { struct canvas *cv; + if (displays == NULL) + p->w_bell = BELL_DONE; for (display = displays; display; display = display->d_next) { for (cv = D_cvlist; cv; cv = cv->c_next) -- cgit v1.2.1 From e5b296e8af899e199d8c416da7b6e7204824ed1b Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 28 Mar 2011 17:24:59 -0400 Subject: Make 'layout' subcommands work when detached. Ideally, splits and layouts should be allowed when there's no display. At this moment, you can just create a few layouts and name them when detached. BUG=28386 --- src/layout.c | 46 ++++++++++++++++++++++++++++++----- src/layout.h | 3 +++ src/process.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 103 insertions(+), 23 deletions(-) diff --git a/src/layout.c b/src/layout.c index 196d10b..fa06865 100644 --- a/src/layout.c +++ b/src/layout.c @@ -189,12 +189,21 @@ int startat; lay = CreateLayout(title, startat); if (!lay) return; - LoadLayout(0, &D_canvas); - fcv = D_forecv; - DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); - lay->lay_forecv = D_forecv; - D_forecv = fcv; - D_layout = lay; + + if (display) + { + LoadLayout(0, &D_canvas); + fcv = D_forecv; + DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); + lay->lay_forecv = D_forecv; + D_forecv = fcv; + D_layout = lay; + } + else + { + /* TODO: Setup lay->lay_forecv somehow */ + layout_attach = lay; + } lay->lay_autosave = 1; } @@ -369,3 +378,28 @@ char *filename; return 1; } +void RenameLayout(layout, name) +struct layout *layout; +const char *name; +{ + free(layout->lay_title); + layout->lay_title = SaveStr(name); +} + +int RenumberLayout(layout, number) +struct layout *layout; +int number; +{ + int old; + struct layout *lay; + old = layout->lay_number; + if (number < 0 || number >= MAXLAY) + return 0; + lay = laytab[number]; + laytab[number] = layout; + layout->lay_number = number; + laytab[old] = lay; + if (lay) + lay->lay_number = old; + return 1; +} diff --git a/src/layout.h b/src/layout.h index 065edb7..1814226 100644 --- a/src/layout.h +++ b/src/layout.h @@ -53,5 +53,8 @@ extern void ShowLayouts __P((int)); extern struct layout *FindLayout __P((char *)); extern void UpdateLayoutCanvas __P((struct canvas *, struct win *)); +extern void RenameLayout __P((struct layout *, const char *)); +extern int RenumberLayout __P((struct layout *, int)); + #endif /* SCREEN_LAYOUT_H */ diff --git a/src/process.c b/src/process.c index da9188d..dfa7c82 100644 --- a/src/process.c +++ b/src/process.c @@ -1154,6 +1154,7 @@ int key; char ch; struct display *odisplay = display; struct acluser *user; + struct layout *layout; user = display ? D_user : users; if (nr == RC_ILLEGAL) @@ -4246,8 +4247,22 @@ int key; } break; case RC_LAYOUT: + // A number of the subcommands for "layout" are ignored, or not processed correctly when there + // is no attached display. + if (!strcmp(args[0], "title")) { + if (!display) + { + if (!args[1]) // There is no display, and there is no new title. Ignore. + break; + if (!layout_attach || layout_attach == &layout_last_marker) + layout_attach = CreateLayout(args[1], 0); + else + RenameLayout(layout_attach, args[1]); + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4258,13 +4273,17 @@ int key; OutputMsg(0, "current layout is %d (%s)", D_layout->lay_number, D_layout->lay_title); break; } - free(D_layout->lay_title); - D_layout->lay_title= SaveStr(args[1]); + RenameLayout(D_layout, args[1]); } else if (!strcmp(args[0], "number")) { - int old; - struct layout *lay; + if (!display) + { + if (args[1] && layout_attach && layout_attach != &layout_last_marker) + RenumberLayout(layout_attach, atoi(args[1])); + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4275,20 +4294,23 @@ int key; OutputMsg(0, "This is layout %d (%s).\n", D_layout->lay_number, D_layout->lay_title); break; } - old = D_layout->lay_number; - n = atoi(args[1]); - if (n < 0 || n >= MAXLAY) - break; - lay = laytab[n]; - laytab[n] = D_layout; - D_layout->lay_number = n; - laytab[old] = lay; - if (lay) - lay->lay_number = old; + RenumberLayout(D_layout, atoi(args[1])); break; } else if (!strcmp(args[0], "autosave")) { + if (!display) + { + if (args[1] && layout_attach && layout_attach != &layout_last_marker) + { + if (!strcmp(args[1], "on")) + layout_attach->lay_autosave = 1; + else if (!strcmp(args[1], "off")) + layout_attach->lay_autosave = 0; + } + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4338,10 +4360,17 @@ int key; OutputMsg(0, "usage: layout save "); break; } - SaveLayout(args[1], &D_canvas); + if (display) + SaveLayout(args[1], &D_canvas); } else if (!strcmp(args[0], "select")) { + if (!display) + { + if (args[1]) + layout_attach = FindLayout(args[1]); + break; + } if (!args[1]) { Input("Switch to layout: ", 20, INP_COOKED, SelectLayoutFin, NULL, 0); @@ -4351,6 +4380,12 @@ int key; } else if (!strcmp(args[0], "next")) { + if (!display) + { + if (layout_attach && layout_attach != &layout_last_marker) + layout_attach = layout_attach->lay_next ? layout_attach->lay_next : layouts;; + break; + } struct layout *lay = D_layout; if (lay) lay = lay->lay_next ? lay->lay_next : layouts; @@ -4368,14 +4403,22 @@ int key; } else if (!strcmp(args[0], "prev")) { - struct layout *lay = D_layout; + struct layout *lay = display ? D_layout : layout_attach; + struct layout *target = lay; if (lay) { - for (lay = layouts; lay->lay_next && lay->lay_next != D_layout; lay = lay->lay_next) + for (lay = layouts; lay->lay_next && lay->lay_next != target; lay = lay->lay_next) ; } else lay = layouts; + + if (!display) + { + layout_attach = lay; + break; + } + if (!lay) { OutputMsg(0, "no layout defined"); -- cgit v1.2.1 From 8cf5efc07048abee125a24652768f4b24fc761bf Mon Sep 17 00:00:00 2001 From: Sadrul Habib Chowdhury Date: Mon, 28 Mar 2011 18:45:20 -0400 Subject: Fix a crash when attaching to a layout that was created while detached. --- src/layout.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/layout.c b/src/layout.c index fa06865..584abbd 100644 --- a/src/layout.c +++ b/src/layout.c @@ -168,6 +168,8 @@ struct canvas *cv; FreeCanvas(D_canvas.c_slperp); D_cvlist = 0; D_forecv = lay->lay_forecv; + if (!D_forecv) + MakeDefaultCanvas(); DupLayoutCv(&lay->lay_canvas, &D_canvas, 0); D_canvas.c_ye = D_height - 1 - ((D_canvas.c_slperp && D_canvas.c_slperp->c_slnext) || captionalways) - (D_has_hstatus == HSTATUS_LASTLINE); ResizeCanvas(&D_canvas); @@ -201,7 +203,6 @@ int startat; } else { - /* TODO: Setup lay->lay_forecv somehow */ layout_attach = lay; } lay->lay_autosave = 1; -- cgit v1.2.1