[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Nano-devel] [PATCH] display: rework the switching on and off of the cur
From: |
Benno Schulenberg |
Subject: |
[Nano-devel] [PATCH] display: rework the switching on and off of the cursor |
Date: |
Mon, 18 Sep 2017 20:56:13 +0200 |
The basic idea is that the cursor is always off, except when it needs
to be on: when waiting for text input, and in a few other cases: when
something was searched and found in the help viewer, and in the file
browser when option -g is in effect.
This fixes https://savannah.gnu.org/bugs/?51923.
Reported-by: Mike Frysinger <address@hidden>
---
src/browser.c | 7 +++----
src/global.c | 2 ++
src/help.c | 2 +-
src/nano.c | 7 ++++---
src/prompt.c | 7 ++++---
src/proto.h | 1 +
src/search.c | 3 ---
src/text.c | 5 ++---
src/winio.c | 11 +++++------
9 files changed, 22 insertions(+), 23 deletions(-)
diff --git a/src/browser.c b/src/browser.c
index de264cdd..a89636c1 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -55,8 +55,8 @@ char *do_browser(char *path)
DIR *dir;
/* The directory whose contents we are showing. */
- /* Don't show a cursor in the file list. */
- curs_set(0);
+ /* Show a cursor in the file list only when requested. */
+ reveal_cursor = ISSET(SHOW_CURSOR);
read_directory_contents:
/* We come here when we refresh or select a new directory. */
@@ -106,8 +106,6 @@ char *do_browser(char *path)
titlebar(path);
while (TRUE) {
- /* Make sure that the cursor is off. */
- curs_set(0);
lastmessage = HUSH;
bottombars(MBROWSER);
@@ -163,6 +161,7 @@ char *do_browser(char *path)
} else if (func == do_help_void) {
#ifdef ENABLE_HELP
do_help_void();
+ curs_set(0);
#ifndef NANO_TINY
/* The window dimensions might have changed, so act as if. */
kbinput = KEY_WINCH;
diff --git a/src/global.c b/src/global.c
index 46633e38..f1cc8530 100644
--- a/src/global.c
+++ b/src/global.c
@@ -56,6 +56,8 @@ bool have_palette = FALSE;
/* Whether the colors for the current syntax have been initialized. */
#endif
+bool reveal_cursor = FALSE;
+ /* Whether the cursor should be shown when waiting for input. */
bool suppress_cursorpos = FALSE;
/* Should we skip constant position display for current keystroke? */
diff --git a/src/help.c b/src/help.c
index 84e957db..e523860c 100644
--- a/src/help.c
+++ b/src/help.c
@@ -229,7 +229,7 @@ void do_help(void)
unbound_key(kbinput);
/* If we searched and found something, let the cursor show it. */
- curs_set(didfind == 1 ? 1 : 0);
+ reveal_cursor = (didfind == 1);
currmenu = MHELP;
edit_refresh();
diff --git a/src/nano.c b/src/nano.c
index a5ba3e62..25e22b32 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1579,9 +1579,13 @@ int do_input(bool allow_funcs)
const sc *s;
bool have_shortcut;
+ reveal_cursor = TRUE;
+
/* Read in a keystroke. */
input = get_kbinput(edit);
+ reveal_cursor = FALSE;
+
#ifndef NANO_TINY
if (input == KEY_WINCH)
return KEY_WINCH;
@@ -2650,9 +2654,6 @@ int main(int argc, char **argv)
} else
edit_refresh();
- /* Make sure the cursor is visible. */
- curs_set(1);
-
focusing = TRUE;
/* Forget any earlier statusbar x position. */
diff --git a/src/prompt.c b/src/prompt.c
index 5785cb4c..f61d9a94 100644
--- a/src/prompt.c
+++ b/src/prompt.c
@@ -478,7 +478,7 @@ functionptrtype acquire_an_answer(int *actual, bool
allow_tabs,
while (TRUE) {
/* Ensure the cursor is shown when waiting for input. */
- curs_set(1);
+ reveal_cursor = TRUE;
kbinput = do_statusbar_input(&ran_func, &finished);
@@ -597,6 +597,8 @@ functionptrtype acquire_an_answer(int *actual, bool
allow_tabs,
}
#endif
+ reveal_cursor = FALSE;
+
*actual = kbinput;
return func;
@@ -746,8 +748,7 @@ int do_yesno_prompt(bool all, const char *msg)
wnoutrefresh(bottomwin);
/* When not replacing, show the cursor. */
- if (!all)
- curs_set(1);
+ reveal_cursor = !all;
currmenu = MYESNO;
kbinput = get_kbinput(bottomwin);
diff --git a/src/proto.h b/src/proto.h
index bd3a3cb0..c6303f34 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -47,6 +47,7 @@ extern int editwincols;
extern bool have_palette;
#endif
+extern bool reveal_cursor;
extern bool suppress_cursorpos;
extern message_type lastmessage;
diff --git a/src/search.c b/src/search.c
index c37813ea..8f4f7f14 100644
--- a/src/search.c
+++ b/src/search.c
@@ -615,9 +615,6 @@ ssize_t do_replace_loop(const char *needle, bool
whole_word_only,
/* Refresh the edit window, scrolling it if necessary. */
edit_refresh();
- /* Don't show cursor, to not distract from highlighted match. */
- curs_set(0);
-
spotlight(TRUE, from_col, to_col);
/* TRANSLATORS: This is a prompt. */
diff --git a/src/text.c b/src/text.c
index b302163c..522197e5 100644
--- a/src/text.c
+++ b/src/text.c
@@ -2478,7 +2478,6 @@ void do_justify(bool full_justify)
#endif
statusbar(_("Can now UnJustify!"));
place_the_cursor();
- curs_set(1);
kbinput = do_input(FALSE);
#ifndef NANO_TINY
} while (kbinput == KEY_WINCH);
@@ -3337,8 +3336,8 @@ void do_linter(void)
/* Place and show the cursor to indicate the affected line. */
place_the_cursor();
+ reveal_cursor = TRUE;
wnoutrefresh(edit);
- curs_set(1);
kbinput = get_kbinput(bottomwin);
@@ -3585,7 +3584,7 @@ void do_verbatim_input(void)
* inserted verbatim. */
statusbar(_("Verbatim Input"));
place_the_cursor();
- curs_set(1);
+ reveal_cursor = TRUE;
/* Read in all the verbatim characters. */
kbinput = get_verbatim_kbinput(edit, &kbinput_len);
diff --git a/src/winio.c b/src/winio.c
index b2e5bab9..bd565791 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -120,9 +120,14 @@ void get_key_buffer(WINDOW *win)
* screen updates. */
doupdate();
+ if (reveal_cursor)
+ curs_set(1);
+
/* Read in the first character using whatever mode we're in. */
input = wgetch(win);
+ curs_set(0);
+
#ifndef NANO_TINY
if (the_window_resized) {
ungetch(input);
@@ -2186,9 +2191,6 @@ void statusline(message_type importance, const char *msg,
...)
lastmessage = importance;
- /* Turn the cursor off while fiddling in the statusbar. */
- curs_set(0);
-
blank_statusbar();
/* Construct the message out of all the arguments. */
@@ -3369,9 +3371,6 @@ void do_cursorpos(bool force)
return;
}
- /* Hide the cursor while we are calculating. */
- curs_set(0);
-
/* Determine the size of the file up to the cursor. */
saved_byte = openfile->current->data[openfile->current_x];
openfile->current->data[openfile->current_x] = '\0';
--
2.14.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Nano-devel] [PATCH] display: rework the switching on and off of the cursor,
Benno Schulenberg <=