From 244a503ddc614edf7b4a7bf88edc6b26ebbb23a0 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Mon, 27 Mar 2017 17:34:13 +0200 Subject: [PATCH] moving: the current chunk cannot be beyond the last chunk of a line When determining the leftedge of the current chunk, it is not simply the leftedge that corresponds to the placewewant, but the leftedge that corresponds to the minimum of the placewewant and the full line span. This fixes https://savannah.gnu.org/bugs/?50653. --- src/move.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/move.c b/src/move.c index 39ddc2b8..ebafa82b 100644 --- a/src/move.c +++ b/src/move.c @@ -463,7 +463,12 @@ void do_up(bool scroll_only) #ifndef NANO_TINY if (ISSET(SOFTWRAP)) { - leftedge = (openfile->placewewant / editwincols) * editwincols; + size_t realspan = strlenpt(openfile->current->data); + + if (openfile->placewewant < realspan) + realspan = openfile->placewewant; + + leftedge = (realspan / editwincols) * editwincols; target_column = openfile->placewewant % editwincols; } #endif @@ -514,7 +519,12 @@ void do_down(bool scroll_only) #ifndef NANO_TINY if (ISSET(SOFTWRAP)) { - leftedge = (openfile->placewewant / editwincols) * editwincols; + size_t realspan = strlenpt(openfile->current->data); + + if (openfile->placewewant < realspan) + realspan = openfile->placewewant; + + leftedge = (realspan / editwincols) * editwincols; target_column = openfile->placewewant % editwincols; } #endif