From: Chris Allegretta Date: Tue, 28 Jan 2003 01:16:47 +0000 (+0000) Subject: - Fix constant curos updates from obliterating other system messages, and fix statusb... X-Git-Tag: v1.1.99pre2~17 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=d26ab913f16eeaefc3a3ed459e11f84ea34ce579;p=nano.git - Fix constant curos updates from obliterating other system messages, and fix statusbar message length. Affects files.c:load_open_file(), nano.c:main(), search.c:findnextstr(), winio.c:statusbar() and do_cursorpos() (David Benbennick) git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1403 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index 5b8876c5..b5acc186 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,11 @@ CVS Code - of nanogetstr with keys like ^Y and ^V. New arg resetpos to nanogetstr(), added static int resetpos in statusq() (bug found by DLR). + - Fix constant curos updates from obliterating other + system messages, and fix statusbar message length. + Affects files.c:load_open_file(), nano.c:main(), + search.c:findnextstr(), winio.c:statusbar() and + do_cursorpos() (David Benbennick). - cut.c: do_cut_text() - Fix incorrect cursor location when cutting long lines diff --git a/files.c b/files.c index b967d258..88056320 100644 --- a/files.c +++ b/files.c @@ -840,13 +840,6 @@ int load_open_file(void) clearok(topwin, FALSE); titlebar(NULL); - /* if we're constantly displaying the cursor position and - DISABLE_CURPOS isn't set, update it (and do so unconditionally, - in the rare case that the character count is the same but the - line count isn't) */ - if (ISSET(CONSTUPDATE) && !ISSET(DISABLE_CURPOS)) - do_cursorpos(0); - /* now we're done */ return 0; } diff --git a/nano.c b/nano.c index aff98d0f..b4a05526 100644 --- a/nano.c +++ b/nano.c @@ -3451,6 +3451,9 @@ int main(int argc, char *argv[]) int keyhandled = 0; /* Have we handled the keystroke yet? */ int kbinput; /* Input from keyboard */ + if (ISSET(CONSTUPDATE)) + do_cursorpos(1); + #if !defined(DISABLE_BROWSER) || !defined(DISABLE_HELP) || (!defined(DISABLE_MOUSE) && defined(NCURSES_MOUSE_VERSION)) currshortcut = main_list; #endif @@ -3751,11 +3754,6 @@ int main(int argc, char *argv[]) do_char(kbinput); } - if (ISSET(DISABLE_CURPOS)) - UNSET(DISABLE_CURPOS); - else if (ISSET(CONSTUPDATE)) - do_cursorpos(1); - reset_cursor(); wrefresh(edit); } diff --git a/search.c b/search.c index a8d4921e..2966594c 100644 --- a/search.c +++ b/search.c @@ -270,10 +270,8 @@ filestruct *findnextstr(int quiet, int bracket_mode, return NULL; fileptr = fileage; search_offscreen = 1; - if (!quiet) { + if (!quiet) statusbar(_("Search Wrapped")); - SET(DISABLE_CURPOS); - } } /* Original start line reached */ @@ -324,10 +322,8 @@ filestruct *findnextstr(int quiet, int bracket_mode, return NULL; fileptr = filebot; search_offscreen = 1; - if (!quiet) { + if (!quiet) statusbar(_("Search Wrapped")); - SET(DISABLE_CURPOS); - } } /* Original start line reached */ if (fileptr == begin) diff --git a/winio.c b/winio.c index 1f221bd9..e4419cda 100644 --- a/winio.c +++ b/winio.c @@ -1417,67 +1417,66 @@ void statusbar(const char *msg, ...) wrefresh(bottomwin); - if (ISSET(CONSTUPDATE)) - statblank = 1; - else - statblank = 25; + SET(DISABLE_CURPOS); + statblank = 26; } +/* + * If constant is false, the user typed ^C so we unconditionally display + * the cursor position. Otherwise, we display it only if the character + * position changed, and DISABLE_CURPOS is not set. + * + * If constant and DISABLE_CURPOS is set, we unset it and update old_i and + * old_totsize. That way, we leave the current statusbar alone, but next + * time we will display. */ int do_cursorpos(int constant) { - filestruct *fileptr; - float linepct = 0.0, bytepct = 0.0, colpct = 0.0; - long i = 0, j = 0; - static long old_i = -1, old_totsize = -1; + const filestruct *fileptr; + unsigned long i = 0; + static unsigned long old_i = 0; + static long old_totsize = -1; - if (current == NULL || fileage == NULL) - return 0; - - if (old_i == -1) - old_i = i; + assert(current != NULL && fileage != NULL && totlines != 0); if (old_totsize == -1) old_totsize = totsize; - colpct = 100 * (xplustabs() + 1) / (strlenpt(current->data) + 1); - - for (fileptr = fileage; fileptr != current && fileptr != NULL; - fileptr = fileptr->next) + for (fileptr = fileage; fileptr != current; fileptr = fileptr->next) { + assert(fileptr != NULL); i += strlen(fileptr->data) + 1; - - if (fileptr == NULL) - return -1; - + } i += current_x; - j = totsize; - - if (totsize > 0) - bytepct = 100 * i / totsize; - - if (totlines > 0) - linepct = 100 * current->lineno / totlines; - -#ifdef DEBUG - fprintf(stderr, "%s: linepct = %f, bytepct = %f\n", - "do_cursorpos()", linepct, bytepct); -#endif + if (constant && ISSET(DISABLE_CURPOS)) { + UNSET(DISABLE_CURPOS); + old_i = i; + old_totsize = totsize; + return 0; + } - /* if constant is zero, display the position on the statusbar + /* if constant is false, display the position on the statusbar unconditionally; otherwise, only display the position when the character values have changed */ - if (!constant || (old_i != i || old_totsize != totsize)) { - statusbar(_ - ("line %d/%d (%.0f%%), col %ld/%ld (%.0f%%), char %ld/%ld (%.0f%%)"), - current->lineno, totlines, linepct, xplustabs() + 1, - strlenpt(current->data) + 1, colpct, i, j, bytepct); + if (!constant || old_i != i || old_totsize != totsize) { + unsigned long xpt = xplustabs() + 1; + unsigned long cur_len = strlenpt(current->data) + 1; + int linepct = 100 * current->lineno / totlines; + int colpct = 100 * xpt / cur_len; + int bytepct = totsize == 0 ? 0 : 100 * i / totsize; + + statusbar( + _("line %ld/%ld (%d%%), col %lu/%lu (%d%%), char %lu/%ld (%d%%)"), + current->lineno, totlines, linepct, + xpt, cur_len, colpct, + i, totsize, bytepct); + UNSET(DISABLE_CURPOS); } old_i = i; old_totsize = totsize; reset_cursor(); - return 1; + return 0; } int do_cursorpos_void(void)