replacing: compensate cursor position only for replacements /before/ it

When a replacement happens right at where the cursor sits, the position
of the cursor should not be adjusted, because the real cursor position
is between the current character and the preceding one: the place where
the cursor is shown is in fact right /after/ the insertion point.

This fixes https://savannah.gnu.org/bugs/?50134,
and fixes https://savannah.gnu.org/bugs/?50135.
This commit is contained in:
Benno Schulenberg 2017-01-24 16:42:42 +01:00
parent a8a70f0f29
commit 3534d8ff25

View File

@ -710,7 +710,7 @@ ssize_t do_replace_loop(const char *needle, bool whole_word_only,
if (!old_mark_set || right_side_up) {
#endif
if (openfile->current == real_current &&
openfile->current_x <= *real_current_x) {
openfile->current_x < *real_current_x) {
if (*real_current_x < openfile->current_x + match_len)
*real_current_x = openfile->current_x + match_len;
*real_current_x += length_change;