From: David Lawrence Ramsey Date: Thu, 16 Aug 2007 03:23:30 +0000 (+0000) Subject: more fixes for uncutting text/inserting files with the mark on X-Git-Tag: v2.1.0~72 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=ee89418102903972f8965d3e29b22dcfc43cc25c;p=nano.git more fixes for uncutting text/inserting files with the mark on git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4156 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/ChangeLog b/ChangeLog index 2fb39cde..17b94a12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,7 +4,9 @@ ChangeLog.pre-2.1 in EXTRA_DIST, so that "make dist" works again. * files.c (do_insertfile): Make sure the mark is always properly - positioned after inserting a one-line file with the mark on. + positioned after inserting a file with the mark on. + * nano.c (copy_from_file): Make sure the mark is always properly + positioned after uncutting multiple lines with the mark on. 2007-08-11 David Lawrence Ramsey diff --git a/src/files.c b/src/files.c index a4246e0f..87ee50cb 100644 --- a/src/files.c +++ b/src/files.c @@ -814,7 +814,10 @@ void do_insertfile( #ifndef NANO_TINY if (openfile->mark_set) do_mark_shift = (openfile->current_x <= - openfile->mark_begin_x); + openfile->mark_begin_x || + openfile->current->lineno <= + openfile->mark_begin->lineno); + #endif #ifdef ENABLE_MULTIBUFFER } @@ -890,8 +893,12 @@ void do_insertfile( openfile->current_x; } #endif - openfile->current_x += strlen(filepart->top_data); + openfile->current_x += current_x_save; } +#ifndef NANO_TINY + else if (openfile->mark_set && do_mark_shift) + openfile->mark_begin_x -= current_x_save; +#endif /* Update the current y-coordinate to account for the * number of lines inserted. */ diff --git a/src/nano.c b/src/nano.c index 1a67d036..bb9047db 100644 --- a/src/nano.c +++ b/src/nano.c @@ -393,6 +393,7 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot, void copy_from_filestruct(filestruct *file_top, filestruct *file_bot) { filestruct *top_save; + size_t current_x_save = openfile->current_x; bool edittop_inside; #ifndef NANO_TINY bool do_mark_shift = FALSE; @@ -409,7 +410,9 @@ void copy_from_filestruct(filestruct *file_top, filestruct *file_bot) edittop_inside = (openfile->edittop == openfile->fileage); #ifndef NANO_TINY if (openfile->mark_set) - do_mark_shift = (openfile->current_x <= openfile->mark_begin_x); + do_mark_shift = (openfile->current_x <= + openfile->mark_begin_x || openfile->current->lineno <= + openfile->mark_begin->lineno); #endif /* Put the top and bottom of the filestruct at copies of file_top @@ -432,8 +435,12 @@ void copy_from_filestruct(filestruct *file_top, filestruct *file_bot) openfile->mark_begin_x += openfile->current_x; } #endif - openfile->current_x += strlen(filepart->top_data); + openfile->current_x += current_x_save; } +#ifndef NANO_TINY + else if (openfile->mark_set && do_mark_shift) + openfile->mark_begin_x -= current_x_save; +#endif /* Get the number of characters in the copied text, and add it to * totsize. */