commit 77c0357868d4a71367fcc0bad71587cc4604df74
parent cac3c3399fece253b44831aba2f1b95eaa03bb26
Author: Benno Schulenberg <bensberg@justemail.net>
Date: Tue, 8 Dec 2015 15:29:56 +0000
Making splice_node() update 'filebot', instead of doing it in
four different places.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5490 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
3 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,7 @@
+2015-12-08 Benno Schulenberg <bensberg@justemail.net>
+ * src/nano.c (splice_node): Make this function update 'filebot',
+ instead of doing it in four different places.
+
2015-12-07 Benno Schulenberg <bensberg@justemail.net>
* src/winio.c (edit_draw): Quit the loop when there is no end match.
* src/files.c (do_writeout): When --tempfile is given, make ^O not
diff --git a/src/nano.c b/src/nano.c
@@ -104,6 +104,10 @@ void splice_node(filestruct *afterthis, filestruct *newnode)
if (afterthis->next != NULL)
afterthis->next->prev = newnode;
afterthis->next = newnode;
+
+ /* Update filebot when inserting a node at the end of file. */
+ if (openfile && openfile->filebot == afterthis)
+ openfile->filebot = newnode;
}
/* Unlink a node from the rest of the filestruct and delete it. */
diff --git a/src/text.c b/src/text.c
@@ -544,8 +544,6 @@ void do_undo(void)
free(f->data);
f->data = data;
splice_node(f, t);
- if (f == openfile->filebot)
- openfile->filebot = t;
goto_line_posx(u->lineno, u->begin);
break;
case CUT_EOF:
@@ -678,8 +676,6 @@ void do_redo(void)
free(f->data);
f->data = data;
splice_node(f, shoveline);
- if (f == openfile->filebot)
- openfile->filebot = shoveline;
renumber(shoveline);
goto_line_posx(u->lineno + 1, u->mark_begin_x);
break;
@@ -798,9 +794,6 @@ void do_enter()
openfile->current_x = extra;
splice_node(openfile->current, newnode);
-
- if (openfile->current == openfile->filebot)
- openfile->filebot = newnode;
openfile->current = newnode;
renumber(newnode);
@@ -2162,9 +2155,7 @@ void do_justify(bool full_justify)
assert(break_pos <= line_len);
- /* Make a new line, and copy the text after where we're
- * going to break this line to the beginning of the new
- * line. */
+ /* Insert a new line after the current one. */
splice_node(openfile->current, make_new_node(openfile->current));
/* If this paragraph is non-quoted, and autoindent isn't
@@ -2203,11 +2194,6 @@ void do_justify(bool full_justify)
/* Break the current line. */
null_at(&openfile->current->data, break_pos);
- /* If the current line is the last line of the file, move
- * the last line of the file down to the next line. */
- if (openfile->filebot == openfile->current)
- openfile->filebot = openfile->filebot->next;
-
/* Go to the next line. */
par_len--;
openfile->current_y++;