diff options
author | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2010-03-10 09:46:22 -0500 |
---|---|---|
committer | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2010-03-10 09:46:22 -0500 |
commit | fec4e0c1aa599ee3d86bb8dd6c3adc4639d0aafe (patch) | |
tree | 9bc91d459674a9fb30d90848dd9ab41e60e2e79e | |
parent | 895b2211f9222b55ca804a181c47dbe3054727b3 (diff) | |
parent | cd874b642ce9f86d63583b6a2d012d5f445895da (diff) | |
download | screen-fec4e0c1aa599ee3d86bb8dd6c3adc4639d0aafe.tar.gz |
Merge branch 'master' into unicode++
-rw-r--r-- | src/ChangeLog | 2 | ||||
-rw-r--r-- | src/attacher.c | 2 | ||||
-rw-r--r-- | src/display.c | 28 | ||||
-rw-r--r-- | src/fileio.c | 8 | ||||
-rw-r--r-- | src/list_generic.c | 27 | ||||
-rw-r--r-- | src/list_window.c | 4 | ||||
-rw-r--r-- | src/misc.c | 4 | ||||
-rw-r--r-- | src/process.c | 16 | ||||
-rw-r--r-- | src/resize.c | 79 | ||||
-rw-r--r-- | src/screen.c | 10 | ||||
-rw-r--r-- | src/socket.c | 2 | ||||
-rw-r--r-- | src/termcap.c | 8 | ||||
-rw-r--r-- | src/utmp.c | 2 | ||||
-rw-r--r-- | src/window.c | 6 |
14 files changed, 112 insertions, 86 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index aba306d..9d9d768 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -92,6 +92,7 @@ Version 4.1.0 (??/??/20??): * Dick <dick@mrns.nl> * Gabriel <g2p.code@gmail.com> * Benjamin Andresen <bandresen@gmail.com> + * Takeshi Banse <takebi@laafc.net> * Maarten Billemont <lhunath@gmail.com> * Curtis Brown <mrbrown8@juno.com> * Cyril Brulebois <kibi@debian.org> @@ -109,6 +110,7 @@ Version 4.1.0 (??/??/20??): * Ryan Niebur <ryan@debian.org> * Jan Christoph Nordholz <hesso@pool.math.tu-berlin.de> * William Pursell <bill.pursell@gmail.com> + * Michael Scherer <misc@mandriva.org> * Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> * Peter Teichman <peter@teichman.org> diff --git a/src/attacher.c b/src/attacher.c index 88da744..370d594 100644 --- a/src/attacher.c +++ b/src/attacher.c @@ -756,7 +756,7 @@ LockTerminal() debug2("Lock: %s: return code %d\n", prg, WEXITSTATUS(wstat)); } else - printf(LockEnd); + printf("%s", LockEnd); } } else diff --git a/src/display.c b/src/display.c index 6ec0911..4bdc887 100644 --- a/src/display.c +++ b/src/display.c @@ -2327,26 +2327,7 @@ int y, from, to, isblank; return; /* can't refresh status */ } - /* The following check makes plenty of sense. Unfortunately, - vte-based terminals (notably gnome-terminal) experience a quirk - that causes the final line not to update properly when it falls outside - the scroll region; clearing the line with D_CE avoids the glitch, - so we'll disable this perfectly sensible shortcut until such a time - as widespread vte installations lack the glitch. - - See http://bugzilla.gnome.org/show_bug.cgi?id=542087 for current - status of the VTE bug report, and - https://savannah.gnu.org/bugs/index.php?23699 for the history from - the Savannah BTS. */ -#if 0 - if (y == D_height - 1 && D_has_hstatus == HSTATUS_LASTLINE) - { - RefreshHStatus(); - return; - } -#endif - - if (isblank == 0 && D_CE && to == D_width - 1 && from < to) + if (isblank == 0 && D_CE && to == D_width - 1 && from < to && D_status != STATUS_ON_HS) { GotoPos(from, y); if (D_UT || D_BE) @@ -2354,6 +2335,13 @@ int y, from, to, isblank; AddCStr(D_CE); isblank = 1; } + + if (y == D_height - 1 && D_has_hstatus == HSTATUS_LASTLINE) + { + RefreshHStatus(); + return; + } + while (from <= to) { lcv = 0; diff --git a/src/fileio.c b/src/fileio.c index 6a9dc23..5f17327 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -75,7 +75,7 @@ register char *str1, *str2; { len2 = strlen(str2); if ((cp = realloc(str2, (unsigned) len1 + len2 + add_colon + 1)) == NULL) - Panic(0, strnomem); + Panic(0, "%s", strnomem); bcopy(cp, cp + len1 + add_colon, len2 + 1); } else @@ -83,8 +83,8 @@ register char *str1, *str2; if (len1 == 0) return 0; if ((cp = malloc((unsigned) len1 + add_colon + 1)) == NULL) - Panic(0, strnomem); - cp[len1 + add_colon] = '\0'; + Panic(0, "%s", strnomem); + cp[len1 + add_colon] = '\0'; } bcopy(str1, cp, len1); if (add_colon) @@ -631,7 +631,7 @@ int *lenp; if ((buf = malloc(size)) == NULL) { close(i); - Msg(0, strnomem); + Msg(0, "%s", strnomem); return NULL; } errno = 0; diff --git a/src/list_generic.c b/src/list_generic.c index 2b3be4c..e32acf7 100644 --- a/src/list_generic.c +++ b/src/list_generic.c @@ -344,18 +344,33 @@ static void ListFree(void *d) static void ListRedisplayLine(int y, int xs, int xe, int isblank) { + struct ListData *ldata; ASSERT(flayer); + + ldata = flayer->l_data; if (y < 0) { - glist_display_all(flayer->l_data); + glist_display_all(ldata); return; } - if (y != 0 && y != flayer->l_height - 1) - return; - if (isblank) - return; - LClearArea(flayer, xs, y, xe, y, 0, 0); + if (!isblank) + LClearArea(flayer, xs, y, xe, y, 0, 0); + + if (ldata->top && y < ldata->top->y) + ldata->list_fn->gl_printheader(ldata); + else if (y + 1 == flayer->l_height) + ldata->list_fn->gl_printfooter(ldata); + else + { + struct ListRow *row; + for (row = ldata->top; row && row->y != -1; row = row->next) + if (row->y == y) + { + ldata->list_fn->gl_printrow(ldata, row); + break; + } + } } static void ListClearLine(int y, int xs, int xe, int bce) diff --git a/src/list_window.c b/src/list_window.c index c46aa9e..ee71fde 100644 --- a/src/list_window.c +++ b/src/list_window.c @@ -413,10 +413,10 @@ gl_Window_input(struct ListData *ldata, char **inp, int *len) case 007: /* ^G */ if (!WLIST_FOR_GROUP(wdata)) { - int fnumber = wdata->fore->w_number; + int fnumber = wdata->onblank ? wdata->fore->w_number : -1; glist_abort(); display = cd; - if (wdata->onblank) + if (fnumber >= 0) SwitchWindow(fnumber); *len = 0; } @@ -57,7 +57,7 @@ register const char *str; register char *cp; if ((cp = malloc(strlen(str) + 1)) == NULL) - Panic(0, strnomem); + Panic(0, "%s", strnomem); else strcpy(cp, str); return cp; @@ -71,7 +71,7 @@ int n; register char *cp; if ((cp = malloc(n + 1)) == NULL) - Panic(0, strnomem); + Panic(0, "%s", strnomem); else { bcopy((char *)str, cp, n); diff --git a/src/process.c b/src/process.c index 137037d..d685501 100644 --- a/src/process.c +++ b/src/process.c @@ -691,7 +691,7 @@ int create; kp = malloc(sizeof(*kp)); if (kp == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return 0; } kp->name = SaveStr(class); @@ -2380,7 +2380,7 @@ int key; */ if ((dbuf = (char *)malloc(l)) == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); break; } l = 0; @@ -2467,7 +2467,7 @@ int key; newbuf = malloc(l + 1); if (!newbuf) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); break; } user->u_plop.len = RecodeBuf((unsigned char *)oldplop.buf, oldplop.len, oldplop.enc, enc, (unsigned char *)newbuf); @@ -4501,9 +4501,9 @@ int *argl; return; } if ((pp = (char **)malloc((unsigned)(argc + 1) * sizeof(char **))) == 0) - Panic(0, strnomem); + Panic(0, "%s", strnomem); if ((lp = (int *)malloc((unsigned)(argc) * sizeof(int *))) == 0) - Panic(0, strnomem); + Panic(0, "%s", strnomem); act->nr = nr; act->args = pp; act->argl = lp; @@ -4525,7 +4525,7 @@ char **args; while (args[argc]) argc++; if ((pp = ap = (char **)malloc((unsigned)(argc + 1) * sizeof(char **))) == 0) - Panic(0, strnomem); + Panic(0, "%s", strnomem); while (argc--) *pp++ = SaveStr(*args++); *pp = 0; @@ -6074,7 +6074,7 @@ char *data; /* dummy */ { if ((pp->buf = (char *)malloc(D_user->u_plop.len)) == NULL) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return; } bcopy(D_user->u_plop.buf, pp->buf, D_user->u_plop.len); @@ -6281,7 +6281,7 @@ char *data; #endif if (!(u->u_plop.buf = SaveStr(u->u_password))) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); D_user->u_plop.len = 0; } else diff --git a/src/resize.c b/src/resize.c index 901455c..ba70482 100644 --- a/src/resize.c +++ b/src/resize.c @@ -324,6 +324,34 @@ kaablamm() Msg(0, "Aborted because of window size change."); } +/* Kills non-resizable layers. */ +#define RESIZE_OR_KILL_LAYERS(l, wi, he) do \ + { \ + struct layer *_last = NULL, *_iter; \ + flayer = (l); \ + while (flayer->l_next) \ + { \ + if (LayResize(wi, he) == 0) \ + { \ + _last = flayer; \ + flayer = flayer->l_next; \ + } \ + else \ + { \ + struct canvas *_cv; \ + for (_cv = flayer->l_cvlist; _cv; _cv = _cv->c_lnext) \ + _cv->c_display->d_kaablamm = 1; \ + ExitOverlayPage(); \ + if (_last) \ + _last->l_next = flayer; \ + } \ + } \ + /* We assume that the bottom-most layer, i.e. when flayer->l_next == 0, \ + * is always resizable. Currently, WinLf and BlankLf can be the bottom-most layers. \ + */ \ + LayResize(wi, he); \ + } while (0) + void ResizeLayer(l, wi, he, norefdisp) struct layer *l; @@ -339,52 +367,40 @@ struct display *norefdisp; return; p = Layer2Window(l); + /* If 'flayer' and 'l' are for the same window, then we will not + * restore 'flayer'. */ if (oldflayer && (l == oldflayer || Layer2Window(oldflayer) == p)) while (oldflayer->l_next) oldflayer = oldflayer->l_next; - + + flayer = l; + if (p) { + /* It's a window layer. Kill the overlays on it in all displays. */ for (d = displays; d; d = d->d_next) for (cv = d->d_cvlist; cv; cv = cv->c_next) { if (p == Layer2Window(cv->c_layer)) { - flayer = cv->c_layer; - if (flayer->l_next) - d->d_kaablamm = 1; - while (flayer->l_next) - ExitOverlayPage(); + /* Canvas 'cv' on display 'd' shows this window. Remove any non-resizable + * layers over it. */ + RESIZE_OR_KILL_LAYERS(cv->c_layer, wi, he); } } - l = p->w_savelayer; - } - flayer = l; - if (p == 0 && flayer->l_next && flayer->l_next->l_next == 0 && LayResize(wi, he) == 0) - { - flayer = flayer->l_next; - LayResize(wi, he); - flayer = l; } else { - if (flayer->l_next) - for (cv = flayer->l_cvlist; cv; cv = cv->c_lnext) - cv->c_display->d_kaablamm = 1; - while (flayer->l_next) - ExitOverlayPage(); + /* It's a Blank layer. Just kill the non-resizable overlays over it. */ + RESIZE_OR_KILL_LAYERS(flayer, wi, he); } - if (p) - flayer = &p->w_layer; - LayResize(wi, he); - /* now everybody is on flayer, redisplay */ - l = flayer; + for (display = displays; display; display = display->d_next) { if (display == norefdisp) continue; for (cv = D_cvlist; cv; cv = cv->c_next) - if (cv->c_layer == l) + if (Layer2Window(cv->c_layer) == p) { CV_CALL(cv, LayRedisplayLine(-1, -1, -1, 0)); RefreshArea(cv->c_xs, cv->c_ys, cv->c_xe, cv->c_ye, 0); @@ -395,11 +411,14 @@ struct display *norefdisp; D_kaablamm = 0; } } - flayer = oldflayer; + + /* If we started resizing a non-flayer layer, then restore the flayer. + * Otherwise, flayer should already be updated to the topmost foreground layer. */ + if (Layer2Window(flayer) != Layer2Window(oldflayer)) + flayer = oldflayer; display = olddisplay; } - static void FreeMline(ml) struct mline *ml; @@ -522,7 +541,7 @@ int wi; # endif #endif if (!(blank && null && mline_old.image && mline_old.attr IFFONT(&& mline_old.font) IFCOLOR(&& mline_old.color) IFCOLORX(&& mline_old.colorx))) - Panic(0, strnomem); + Panic(0, "%s", strnomem); MakeBlankLine(blank, maxwidth); bzero((char *)null, maxwidth * sizeof(int)); @@ -692,7 +711,7 @@ int wi, he, hi; if ((nmlines = (struct mline *)calloc(he, sizeof(struct mline))) == 0) { KillWindow(p); - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } } @@ -925,7 +944,7 @@ int wi, he, hi; #endif } KillWindow(p); - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } for (; t < wi; t++) diff --git a/src/screen.c b/src/screen.c index 06441dd..2a905a8 100644 --- a/src/screen.c +++ b/src/screen.c @@ -818,7 +818,7 @@ char **av; size_t newsz; char *newbuf = malloc(3 * len); if (!newbuf) - Panic(0, strnomem); + Panic(0, "%s", strnomem); newsz = RecodeBuf(nwin_options.aka, len, nwin_options.encoding, 0, newbuf); newbuf[newsz] = '\0'; @@ -2052,7 +2052,7 @@ MakeNewEnv() free((char *)NewEnv); NewEnv = np = (char **) malloc((unsigned) (op - environ + 7 + 1) * sizeof(char **)); if (!NewEnv) - Panic(0, strnomem); + Panic(0, "%s", strnomem); sprintf(stybuf, "STY=%s", strlen(SockName) <= MAXSTR - 5 ? SockName : "?"); *np++ = stybuf; /* NewEnv[0] */ *np++ = Term; /* NewEnv[1] */ @@ -2389,7 +2389,7 @@ char **cmdv; bt = (struct backtick *)malloc(sizeof *bt); if (!bt) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return; } bzero(bt, sizeof(*bt)); @@ -2411,7 +2411,7 @@ char **cmdv; bt->buf = (char *)malloc(MAXSTR); if (bt->buf == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); setbacktick(num, 0, 0, (char **)0); return; } @@ -2847,6 +2847,7 @@ int rec; break; case 'P': p--; +#ifdef COPY_PASTE if (display && ev && ev != &D_hstatusev) /* Hack */ { /* Is the layer in the current canvas in copy mode? */ @@ -2854,6 +2855,7 @@ int rec; if (ev == &cv->c_captev && cv->c_layer->l_layfn == &MarkLf) qmflag = 1; } +#endif break; case '>': truncpos = p - winmsg_buf; diff --git a/src/socket.c b/src/socket.c index 9e61816..9dbf461 100644 --- a/src/socket.c +++ b/src/socket.c @@ -1540,7 +1540,7 @@ struct msg *m; ASSERT(display); pwdata = (struct pwdata *)malloc(sizeof(struct pwdata)); if (!pwdata) - Panic(0, strnomem); + Panic(0, "%s", strnomem); pwdata->l = 0; pwdata->m = *m; D_processinputdata = (char *)pwdata; diff --git a/src/termcap.c b/src/termcap.c index 8f6b8b9..32ae63d 100644 --- a/src/termcap.c +++ b/src/termcap.c @@ -137,7 +137,7 @@ int he; if ((D_tentry = (char *)malloc(TERMCAP_BUFSIZE + (extra_incap ? strlen(extra_incap) + 1 : 0))) == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } @@ -1198,7 +1198,7 @@ char *s; if ((D_xtable = (char ***)calloc(256, sizeof(char **))) == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } @@ -1216,7 +1216,7 @@ char *s; { if ((D_xtable[curchar] = (char **)calloc(257, sizeof(char *))) == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); FreeTransTable(); return -1; } @@ -1250,7 +1250,7 @@ char *s; l = l * templnsub + templlen; if ((ctable[c] = (char *)malloc(l + 1)) == 0) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); FreeTransTable(); return -1; } @@ -268,7 +268,7 @@ InitUtmp() if ((utmpfd = open(UtmpName, O_RDWR)) == -1) { if (errno != EACCES) - Msg(errno, UtmpName); + Msg(errno, "%s", UtmpName); debug("InitUtmp failed.\n"); utmpok = 0; return; diff --git a/src/window.c b/src/window.c index 7fe80e8..2ad3615 100644 --- a/src/window.c +++ b/src/window.c @@ -614,7 +614,7 @@ struct NewWindow *newwin; if ((p = (struct win *)calloc(1, sizeof(struct win))) == 0) { close(f); - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } @@ -650,7 +650,7 @@ struct NewWindow *newwin; { free((char *)p); close(f); - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } #endif @@ -1531,7 +1531,7 @@ char **av; } if (!(pwin = (struct pseudowin *)calloc(1, sizeof(struct pseudowin)))) { - Msg(0, strnomem); + Msg(0, "%s", strnomem); return -1; } |