in do_insertfile(), make sure the mark is always properly positioned

after inserting a one-line file with the mark on


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4152 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
David Lawrence Ramsey 2007-08-16 02:34:23 +00:00
parent bf70087541
commit 908b127b44
2 changed files with 28 additions and 5 deletions

View File

@ -3,6 +3,8 @@
* Makefile.am: Remove erroneous backslash after * Makefile.am: Remove erroneous backslash after
ChangeLog.pre-2.1 in EXTRA_DIST, so that "make dist" works ChangeLog.pre-2.1 in EXTRA_DIST, so that "make dist" works
again. again.
* files.c (do_insertfile): Make sure the mark is always properly
positioned after inserting a one-line file with the mark on.
2007-08-11 David Lawrence Ramsey <pooka109@gmail.com> 2007-08-11 David Lawrence Ramsey <pooka109@gmail.com>

View File

@ -697,6 +697,9 @@ void do_insertfile(
ssize_t current_y_save = openfile->current_y; ssize_t current_y_save = openfile->current_y;
bool at_edittop = FALSE; bool at_edittop = FALSE;
/* Whether we're at the top of the edit window. */ /* Whether we're at the top of the edit window. */
#ifndef NANO_TINY
bool do_mark_shift = FALSE;
#endif
while (TRUE) { while (TRUE) {
#ifndef NANO_TINY #ifndef NANO_TINY
@ -800,14 +803,20 @@ void do_insertfile(
#endif #endif
/* If we're not inserting into a new buffer, partition /* If we're not inserting into a new buffer, partition
* the filestruct so that it contains no text and hence * the filestruct so that it contains no text and hence
* looks like a new buffer, and keep track of whether * looks like a new buffer, keep track of whether the
* the top of the partition is the top of the edit * top of the partition is the top of the edit
* window. */ * window, and keep track of whether the mark begins
* inside the partition and will need adjustment. */
filepart = partition_filestruct(openfile->current, filepart = partition_filestruct(openfile->current,
openfile->current_x, openfile->current, openfile->current_x, openfile->current,
openfile->current_x); openfile->current_x);
at_edittop = at_edittop =
(openfile->fileage == openfile->edittop); (openfile->fileage == openfile->edittop);
#ifndef NANO_TINY
if (openfile->mark_set)
do_mark_shift = (openfile->current_x <=
openfile->mark_begin_x);
#endif
#ifdef ENABLE_MULTIBUFFER #ifdef ENABLE_MULTIBUFFER
} }
#endif #endif
@ -870,8 +879,20 @@ void do_insertfile(
/* Update the current x-coordinate to account for the /* Update the current x-coordinate to account for the
* number of characters inserted on the current line. */ * number of characters inserted on the current line. */
openfile->current_x = strlen(openfile->filebot->data); openfile->current_x = strlen(openfile->filebot->data);
if (openfile->fileage == openfile->filebot) if (openfile->fileage == openfile->filebot) {
openfile->current_x += current_x_save; #ifndef NANO_TINY
/* If the mark begins inside the partition, update
* the mark coordinates to account for the number of
* characters inserted on the current line. */
if (openfile->mark_set) {
openfile->mark_begin = openfile->current;
if (do_mark_shift)
openfile->mark_begin_x +=
openfile->current_x;
}
#endif
openfile->current_x += strlen(filepart->top_data);
}
/* Update the current y-coordinate to account for the /* Update the current y-coordinate to account for the
* number of lines inserted. */ * number of lines inserted. */