commit dd53ec2a8729cc044cf48beb54462ea6e77d0ff8
parent 48fd2cb833c1caf88afd904ae5017425c01f9bb5
Author: Robert Siemborski <rjs3@andrew.cmu.edu>
Date: Tue, 4 Jul 2000 02:35:19 +0000
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
Diffstat:
4 files changed, 24 insertions(+), 23 deletions(-)
diff --git 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
@@ -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
@@ -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
@@ -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);
+}
+