diff --git a/BUGS b/BUGS index 9a4fcd61098ce5712a3ed7a4b22a81baccf0e626..fc43cf2fc1963e727dc308623f3f428ddd3174ea 100644 --- a/BUGS +++ b/BUGS @@ -32,3 +32,8 @@ until a pageup/down occurs (22). - edit_refresh() and update_line() (and related functions), have trouble when a tab is the character that is the boundry at COLS (23) +- there is an off-by-one error in keeping track of totsize. It is caused + by the fact that we count the newline at the end when we read in a file + but we do not, in fact, display this newline. This should go away + implicitly when the "Magic Line" returns, but it is noted here for + documentation's sake. (24) diff --git a/cut.c b/cut.c index 24b0b32acb7d99a814978f8930cd4f5dd40913bd..3a3cf65370be5b6ca9b65ee9223340b3029b4f7b 100644 --- a/cut.c +++ b/cut.c @@ -44,7 +44,7 @@ void add_to_cutbuffer(filestruct * inptr) inptr->data); #endif - totsize -= strlen(inptr->data) + 1; + totsize -= strlen(inptr->data); tmp = cutbuffer; if (cutbuffer == NULL) { cutbuffer = inptr; @@ -82,6 +82,7 @@ void cut_marked_segment(filestruct * top, int top_x, filestruct * bot, next = tmp->next; add_to_cutbuffer(tmp); totlines--; + totsize--; /* newline (add_to_cutbuffer doesn't count newlines) */ tmp = next; } while (next != bot && next != NULL); @@ -101,7 +102,8 @@ void cut_marked_segment(filestruct * top, int top_x, filestruct * bot, next = bot->next; /* We explicitly don't decrement totlines here because we don't snarf - * up a newline when we're grabbing the last line of the mark */ + * up a newline when we're grabbing the last line of the mark. For + * the same reason we don't do an extra totsize decrement */ add_to_cutbuffer(bot); top->next = next; @@ -183,7 +185,7 @@ int do_cut_text(void) UNSET(MARK_ISSET); marked_cut = 1; set_modified(); - edit_update_top(edittop); + edit_update(current); return 1; #else if (0) { @@ -201,10 +203,9 @@ int do_cut_text(void) current = fileptr; } else { add_to_cutbuffer(fileptr); - totlines--; fileage = make_new_node(NULL); fileage->data = nmalloc(1); - strcpy(fileage->data, ""); + fileage->data[0] = '\0'; current = fileage; } } else { diff --git a/winio.c b/winio.c index 784b9734b65237e0061a03489f23ba712d0d2f95..96a1e0e15f47fd670fc361e690e8d7ed9d34c7d7 100644 --- a/winio.c +++ b/winio.c @@ -1066,11 +1066,6 @@ int do_cursorpos(void) for (fileptr = current->next; fileptr != NULL; fileptr = fileptr->next) tot += strlen(fileptr->data) + 1; - /* FIXME - This is gardly elegant */ -/* if (current == fileage && strlen(current->data) == 0) - i = 0; -*/ - if (totlines > 0) linepct = 100 * current->lineno / totlines; else