nano

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

commit c2e4f77594e0ca6928ae64fdd9b111dd5e710514
parent 7ea6d6bbdada4b738187ba54aae45edbd275ae13
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date:   Sat, 29 Sep 2018 11:14:43 -0500

display: do spotlighting as part of drawing the screen

When something is spotlighted, it should survive a refresh of
the screen and an excursion to a help text, so the spotlight
should get painted whenever the edit window is drawn.

This fully fixes https://savannah.gnu.org/bugs/?54721.

Diffstat:
Msrc/global.c | 7+++++++
Msrc/proto.h | 4++++
Msrc/search.c | 9++++-----
Msrc/text.c | 9++++-----
Msrc/winio.c | 6++++++
5 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/global.c b/src/global.c @@ -259,6 +259,13 @@ char *rcfile_with_errors = NULL; /* The first nanorc file, if any, that produced warnings. */ #endif +bool spotlighted = FALSE; + /* Whether any text is spotlighted. */ +size_t light_from_col = 0; + /* Where the spotlighted text starts. */ +size_t light_to_col = 0; + /* Where the spotlighted text ends. */ + /* Return the number of entries in the shortcut list for a given menu. */ size_t length_of_list(int menu) { diff --git a/src/proto.h b/src/proto.h @@ -175,6 +175,10 @@ extern char *statedir; extern char *rcfile_with_errors; #endif +extern bool spotlighted; +extern size_t light_from_col; +extern size_t light_to_col; + typedef void (*functionptrtype)(void); /* Most functions in browser.c. */ diff --git a/src/search.c b/src/search.c @@ -575,19 +575,18 @@ ssize_t do_replace_loop(const char *needle, bool whole_word_only, numreplaced = 0; if (!replaceall) { - size_t from_col = xplustabs(); - size_t to_col = strnlenpt(openfile->current->data, + spotlighted = TRUE; + light_from_col = xplustabs(); + light_to_col = strnlenpt(openfile->current->data, openfile->current_x + match_len); /* Refresh the edit window, scrolling it if necessary. */ edit_refresh(); - spotlight(TRUE, from_col, to_col); - /* TRANSLATORS: This is a prompt. */ i = do_yesno_prompt(TRUE, _("Replace this instance?")); - spotlight(FALSE, from_col, to_col); + spotlighted = FALSE; if (i == -1) /* The replacing was cancelled. */ break; diff --git a/src/text.c b/src/text.c @@ -2584,21 +2584,20 @@ bool fix_spello(const char *word) proceed = TRUE; napms(2800); } else if (result == 1) { - size_t from_col = xplustabs(); - size_t to_col = from_col + strlenpt(word); + spotlighted = TRUE; + light_from_col = xplustabs(); + light_to_col = light_from_col + strlenpt(word); #ifndef NANO_TINY filestruct *saved_mark = openfile->mark; openfile->mark = NULL; #endif edit_refresh(); - spotlight(TRUE, from_col, to_col); - /* Let the user supply a correctly spelled alternative. */ proceed = (do_prompt(FALSE, FALSE, MSPELL, word, NULL, edit_refresh, _("Edit a replacement")) != -1); - spotlight(FALSE, from_col, to_col); + spotlighted = FALSE; #ifndef NANO_TINY openfile->mark = saved_mark; diff --git a/src/winio.c b/src/winio.c @@ -2780,6 +2780,9 @@ int update_line(filestruct *fileptr, size_t index) if (strlenpt(fileptr->data) > from_col + editwincols) mvwaddch(edit, row, COLS - 1, '$'); + if (spotlighted && !inhelp) + spotlight(TRUE, light_from_col, light_to_col); + return 1; } @@ -2846,6 +2849,9 @@ int update_softwrapped_line(filestruct *fileptr) from_col = to_col; } + if (spotlighted && !inhelp) + spotlight(TRUE, light_from_col, light_to_col); + return (row - starting_row); } #endif