From 3018ab4706b5764fe16ae061bdc1284583bb8be9 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Fri, 20 Oct 2017 20:00:12 +0200 Subject: [PATCH] moving: don't slither and slide over tabs when they are overlong This fixes https://savannah.gnu.org/bugs/?52183. Tested-by: David Lawrence Ramsey Improved-by: David Lawrence Ramsey --- src/move.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/move.c b/src/move.c index 9e25fe9a..d9f4871e 100644 --- a/src/move.c +++ b/src/move.c @@ -80,11 +80,12 @@ size_t proper_x(filestruct *line, size_t *leftedge, bool forward, column / tabsize < (*leftedge + editwincols - 1) / tabsize))) { index++; - *leftedge = leftedge_for(strnlenpt(line->data, index), line); - if (shifted != NULL) *shifted = TRUE; } + + if (ISSET(SOFTWRAP)) + *leftedge = leftedge_for(strnlenpt(line->data, index), line); #endif return index; @@ -95,17 +96,15 @@ size_t proper_x(filestruct *line, size_t *leftedge, bool forward, void set_proper_index_and_pww(size_t *leftedge, size_t target, bool forward) { bool shifted = FALSE; + size_t was_edge = *leftedge; openfile->current_x = proper_x(openfile->current, leftedge, forward, actual_last_column(*leftedge, target), &shifted); /* If the index was incremented, try going to the target column. */ - if (shifted) { - size_t newer_x = actual_x(openfile->current->data, *leftedge + target); - - if (newer_x > openfile->current_x) - openfile->current_x = newer_x; - } + if (shifted || *leftedge < was_edge) + openfile->current_x = proper_x(openfile->current, leftedge, forward, + actual_last_column(*leftedge, target), &shifted); openfile->placewewant = *leftedge + target; }