From dd53ec2a8729cc044cf48beb54462ea6e77d0ff8 Mon Sep 17 00:00:00 2001 From: Robert Siemborski Date: Tue, 4 Jul 2000 02:35:19 +0000 Subject: [PATCH] Fixed 2 FIXMEs in nano.c: do_enter: the reset_cursor was needed. code cleaned up a bit with a comment explaining the situation there. do_justify: the second edit_refresh exposed a bug in how we were updateing editbot when we needed to rebuild it. This functionality has been moved into winio.c:fix_editbot, and all places that were doing so that I could find have been updated. (files.c: do_insertfile, nano.c: handle_sigwinch and do_justify) git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@64 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- files.c | 5 +---- nano.c | 32 +++++++++++++------------------- proto.h | 1 + winio.c | 9 +++++++++ 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/files.c b/files.c index 2edf7ff5..cc1fd4d5 100644 --- a/files.c +++ b/files.c @@ -252,10 +252,7 @@ int do_insertfile(void) set_modified(); /* Here we want to rebuild the edit window */ - for (i = 0, editbot = edittop; - i <= editwinrows - 1 - && i <= totlines - && editbot->next != NULL; editbot = editbot->next, i++); + fix_editbot(); /* If we've gone off the bottom, recenter, otherwise just redraw */ if (current->lineno > editbot->lineno) diff --git a/nano.c b/nano.c index 2acb52e3..435648bd 100644 --- a/nano.c +++ b/nano.c @@ -502,19 +502,24 @@ int do_enter(filestruct * inptr) current = new; align(¤t->data); + /* The logic here is as follows: + * -> If we are at the bottom of the buffer, we want to recenter + * (read: rebuild) the screen and forcably move the cursor. + * -> otherwise, we want simply to redraw the screen and update + * where we think the cursor is. + */ if (current_y == editwinrows - 1) { edit_update(current); - - /* FIXME - figure out why the hell this is needed =) */ - reset_cursor(); - } else + reset_cursor(); + } else { current_y++; + edit_refresh(); + update_cursor(); + } totlines++; set_modified(); - update_cursor(); - edit_refresh(); placewewant = xplustabs(); return 1; } @@ -1018,7 +1023,6 @@ void exit_spell(char *tmpfilename, char *foo) * This is Chris' very ugly spell function. Someone please make this * better =-) */ - int do_spell(void) { #ifdef NANO_SMALL @@ -1226,11 +1230,7 @@ void handle_sigwinch(int s) #endif /* HAVE_WRESIZE */ #endif /* HAVE_NCURSES_H */ - editbot = edittop; - - for (i = 0; (i <= editwinrows - 1) && (editbot->next != NULL) - && (editbot->next != filebot); i++) - editbot = editbot->next; + fix_editbot(); if (current_y > editwinrows - 1) { edit_update(editbot); @@ -1428,17 +1428,11 @@ int do_justify(void) edit_update(current); center_cursor(); } else { - int i = 0; - - editbot = edittop; - for (i = 0; (i <= editwinrows - 1) && (editbot->next != NULL) - && (editbot->next != filebot); i++) - editbot = editbot->next; + fix_editbot(); } edit_refresh(); - edit_refresh(); /* XXX FIXME XXX */ statusbar("Justify Complete"); return 1; #else diff --git a/proto.h b/proto.h index 6d86025c..10da7ce5 100644 --- a/proto.h +++ b/proto.h @@ -86,6 +86,7 @@ void dump_buffer_reverse(filestruct * inptr); void reset_cursor(void); void check_statblank(void); void update_line(filestruct * fileptr, int index); +void fix_editbot(void); void statusbar(char *msg, ...); void titlebar(void); void previous_line(void); diff --git a/winio.c b/winio.c index 0e981c82..8869a765 100644 --- a/winio.c +++ b/winio.c @@ -1257,3 +1257,12 @@ void dump_buffer_reverse(filestruct * inptr) } #endif /* DEBUG */ } + +/* Fix editbot based on the assumption that edittop is correct */ +void fix_editbot(void) { + int i; + editbot = edittop; + for(i = 0; (i <= editwinrows - 1) && (editbot->next != NULL) + && (editbot != filebot); i++, editbot = editbot->next); +} +