commit 60edb0a989db84ea92acf71c02203ef14b8c6605
parent 10f8e880ba0a38c621172a5e876fd313abf08fd2
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Mon, 15 May 2006 15:17:50 +0000
improve NANO_REFRESH_KEY handling
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3520 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
4 files changed, 32 insertions(+), 19 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -191,7 +191,11 @@ CVS code -
do_statusbar_input()
- Remove redundant check for allow_funcs' being TRUE when we get
KEY_MOUSE. (DLR)
- do_yesno()
+ - Improve the handling of NANO_REFRESH_KEY. (DLR)
+ total_statusbar_refresh()
+ - New function, called when we get NANO_REFRESH_KEY in
+ do_statusbar_input(). (DLR)
+ do_yesno_prompt()
- Handle the keys in a switch statement instead of a long if
block, for simplicity. (DLR)
- rcfile.c:
diff --git a/src/browser.c b/src/browser.c
@@ -150,6 +150,10 @@ char *do_browser(char *path, DIR *dir)
}
break;
#endif /* !DISABLE_MOUSE */
+ /* Redraw the screen. */
+ case NANO_REFRESH_KEY:
+ total_redraw();
+ break;
case NANO_HELP_KEY:
#ifndef DISABLE_HELP
do_browser_help();
@@ -331,10 +335,6 @@ char *do_browser(char *path, DIR *dir)
/* Start over again with the new path value. */
free_chararray(filelist, filelist_len);
goto change_browser_directory;
- /* Redraw the screen. */
- case NANO_REFRESH_KEY:
- total_redraw();
- break;
/* Abort the browser. */
case NANO_EXIT_KEY:
abort = TRUE;
diff --git a/src/prompt.c b/src/prompt.c
@@ -148,6 +148,9 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
if (have_shortcut) {
switch (input) {
/* Handle the "universal" statusbar prompt shortcuts. */
+ case NANO_REFRESH_KEY:
+ total_statusbar_refresh(refresh_func);
+ break;
case NANO_CUT_KEY:
/* If we're using restricted mode, the filename
* isn't blank, and we're at the "Write File"
@@ -222,9 +225,6 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
'\0' || currshortcut != writefile_list)
do_statusbar_backspace();
break;
- case NANO_REFRESH_KEY:
- refresh_func();
- break;
/* Handle the normal statusbar prompt shortcuts, setting
* ran_func to TRUE if we try to run their associated
* functions and setting finished to TRUE to indicate
@@ -837,6 +837,16 @@ size_t get_statusbar_page_start(size_t start_col, size_t column)
start_col - 1);
}
+/* Put the cursor in the statusbar prompt at statusbar_x. */
+void reset_statusbar_cursor(void)
+{
+ size_t start_col = strlenpt(prompt) + 1;
+ size_t xpt = statusbar_xplustabs();
+
+ wmove(bottomwin, 0, start_col + 1 + xpt -
+ get_statusbar_page_start(start_col, start_col + xpt));
+}
+
/* Repaint the statusbar when getting a character in
* get_prompt_string(). The statusbar text line will be displayed
* starting with curranswer[index]. */
@@ -869,16 +879,6 @@ void update_statusbar_line(const char *curranswer, size_t index)
wattroff(bottomwin, reverse_attr);
}
-/* Put the cursor in the statusbar prompt at statusbar_x. */
-void reset_statusbar_cursor(void)
-{
- size_t start_col = strlenpt(prompt) + 1;
- size_t xpt = statusbar_xplustabs();
-
- wmove(bottomwin, 0, start_col + 1 + xpt -
- get_statusbar_page_start(start_col, start_col + xpt));
-}
-
/* Return TRUE if we need an update after moving horizontally, and FALSE
* otherwise. We need one if old_pww and statusbar_pww are on different
* pages. */
@@ -890,6 +890,14 @@ bool need_statusbar_horizontal_update(size_t old_pww)
get_statusbar_page_start(start_col, start_col + statusbar_pww);
}
+/* Unconditionally redraw the entire screen, and then refresh it using
+ * refresh_func(). */
+void total_statusbar_refresh(void (*refresh_func)(void))
+{
+ total_redraw();
+ refresh_func();
+}
+
/* Get a string of input at the statusbar prompt. This should only be
* called from do_prompt(). */
int get_prompt_string(bool allow_tabs,
diff --git a/src/proto.h b/src/proto.h
@@ -495,9 +495,10 @@ void do_statusbar_find_bracket(void);
#endif
size_t statusbar_xplustabs(void);
size_t get_statusbar_page_start(size_t start_col, size_t column);
-void update_statusbar_line(const char *curranswer, size_t index);
void reset_statusbar_cursor(void);
+void update_statusbar_line(const char *curranswer, size_t index);
bool need_statusbar_horizontal_update(size_t old_pww);
+void total_statusbar_refresh(void (*refresh_func)(void));
int get_prompt_string(bool allow_tabs,
#ifndef DISABLE_TABCOMP
bool allow_files,