nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 28beb3f9c592792c6fb7bd5c24754c857288250a
parent 08fd5b349b3628412a76fef3e2de9f6aa2203ffb
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Thu, 11 May 2017 22:24:39 +0200

replacing: don't let placewewant influence the placement of the cursor

When spotlighting the string to be replaced, placewewant isn't valid,
so tell place_the_cursor() to ignore its value to avoid the cursor
getting mistakenly placed at the beginning of the next row.

This fixes https://savannah.gnu.org/bugs/?50997.
Reported-by: David Lawrence Ramsey <pooka109@gmail.com>

Diffstat:
Msrc/cut.c | 2+-
Msrc/files.c | 2+-
Msrc/nano.c | 2+-
Msrc/proto.h | 2+-
Msrc/text.c | 6+++---
Msrc/winio.c | 13+++++++------
6 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/cut.c b/src/cut.c @@ -292,7 +292,7 @@ void do_uncut_text(void) set_modified(); /* Update current_y to account for the inserted lines. */ - place_the_cursor(); + place_the_cursor(TRUE); refresh_needed = TRUE; diff --git a/src/files.c b/src/files.c @@ -1198,7 +1198,7 @@ void do_insertfile(void) set_modified(); /* Update current_y to account for inserted lines. */ - place_the_cursor(); + place_the_cursor(TRUE); refresh_needed = TRUE; } diff --git a/src/nano.c b/src/nano.c @@ -2659,7 +2659,7 @@ int main(int argc, char **argv) /* Refresh just the cursor position or the entire edit window. */ if (!refresh_needed) { - place_the_cursor(); + place_the_cursor(TRUE); wnoutrefresh(edit); } else edit_refresh(); diff --git a/src/proto.h b/src/proto.h @@ -650,7 +650,7 @@ void warn_and_shortly_pause(const char *msg); void statusline(message_type importance, const char *msg, ...); void bottombars(int menu); void onekey(const char *keystroke, const char *desc, int length); -void place_the_cursor(void); +void place_the_cursor(bool forreal); void edit_draw(filestruct *fileptr, const char *converted, int line, size_t from_col); int update_line(filestruct *fileptr, size_t index); diff --git a/src/text.c b/src/text.c @@ -2439,7 +2439,7 @@ void do_justify(bool full_justify) do { #endif statusbar(_("Can now UnJustify!")); - place_the_cursor(); + place_the_cursor(TRUE); curs_set(1); kbinput = do_input(FALSE); #ifndef NANO_TINY @@ -3311,7 +3311,7 @@ void do_linter(void) } /* Place and show the cursor to indicate the affected line. */ - place_the_cursor(); + place_the_cursor(TRUE); wnoutrefresh(edit); curs_set(1); @@ -3558,7 +3558,7 @@ void do_verbatim_input(void) /* TRANSLATORS: This is displayed when the next keystroke will be * inserted verbatim. */ statusbar(_("Verbatim Input")); - place_the_cursor(); + place_the_cursor(TRUE); curs_set(1); /* Read in all the verbatim characters. */ diff --git a/src/winio.c b/src/winio.c @@ -1235,7 +1235,7 @@ int parse_escape_sequence(WINDOW *win, int kbinput) suppress_cursorpos = FALSE; lastmessage = HUSH; if (currmenu == MMAIN) { - place_the_cursor(); + place_the_cursor(TRUE); curs_set(1); } } @@ -2271,7 +2271,7 @@ void onekey(const char *keystroke, const char *desc, int length) /* Redetermine current_y from the position of current relative to edittop, * and put the cursor in the edit window at (current_y, "current_x"). */ -void place_the_cursor(void) +void place_the_cursor(bool forreal) { ssize_t row = 0; size_t col, xpt = xplustabs(); @@ -2293,7 +2293,7 @@ void place_the_cursor(void) col = xpt % editwincols; /* If the cursor ought to be in column zero, nudge it there. */ - if (openfile->placewewant % editwincols == 0 && col != 0) { + if (forreal && openfile->placewewant % editwincols == 0 && col != 0) { row++; col = 0; } @@ -2307,7 +2307,8 @@ void place_the_cursor(void) if (row < editwinrows) wmove(edit, row, margin + col); - openfile->current_y = row; + if (forreal) + openfile->current_y = row; } /* edit_draw() takes care of the job of actually painting a line into @@ -3089,7 +3090,7 @@ void edit_refresh(void) while (row < editwinrows) blank_row(edit, row++, 0, COLS); - place_the_cursor(); + place_the_cursor(TRUE); wnoutrefresh(edit); refresh_needed = FALSE; @@ -3248,7 +3249,7 @@ void spotlight(bool active, const char *word) room--; } - place_the_cursor(); + place_the_cursor(FALSE); if (active) wattron(edit, hilite_attribute);