From 5f274c4b49313d8d3be7662eccf786020f795ca0 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Fri, 28 Apr 2006 19:27:41 +0000
Subject: [PATCH] handle NANO_CONTROL_8 even better by doing it in
 parse_kbinput()

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3452 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog    |  9 +++------
 src/nano.c   | 17 ++++++-----------
 src/prompt.c | 19 +++++++------------
 src/winio.c  | 18 +++++++++++-------
 4 files changed, 27 insertions(+), 36 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2eaf100f..9e7f2a95 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -133,16 +133,10 @@ CVS code -
 - nano.c:
   renumber()
 	- Remove invalid assert. (DLR, found by Filipe Moreira)
-  do_input()
-	- If we get NANO_CONTROL_8, handle it instead of ignoring it,
-	  for consistency. (DLR)
 - nano.h:
 	- Reorder the toggle #defines to match their corresponding order
 	  in toggle_init(). (DLR)
 - prompt.c:
-  do_statusbar_input()
-	- If we get NANO_CONTROL_8, handle it instead of ignoring it,
-	  for consistency. (DLR)
   get_prompt_string()
 	- Include the handling of the help key even when help is
 	  disabled, so that we aren't erroneously kicked out of the
@@ -174,6 +168,9 @@ CVS code -
 	- Change all rcfile error messages to refer to commands instead
 	  of directives, for consistency with nanorc.5. (DLR)
 - winio.c:
+  parse_kbinput()
+	- If we get NANO_CONTROL_8, properly handle it in all cases.
+	  (DLR)
   get_control_kbinput()
 	- Add Ctrl-/ as an alias for Ctrl-_. (DLR, found by Benno
 	  Schulenberg)
diff --git a/src/nano.c b/src/nano.c
index a8dc9a04..02c4c2bf 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1281,20 +1281,15 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool
     /* Read in a character. */
     input = get_kbinput(edit, meta_key, func_key);
 
-    if (allow_funcs) {
 #ifndef DISABLE_MOUSE
-	/* If we got a mouse click and it was on a shortcut, read in the
-	 * shortcut character. */
-	if (*func_key == TRUE && input == KEY_MOUSE)
-	    input = do_mouse() ? get_kbinput(edit, meta_key, func_key) :
+    if (allow_funcs) {
+    /* If we got a mouse click and it was on a shortcut, read in the
+     * shortcut character. */
+    if (allow_funcs && *func_key == TRUE && input == KEY_MOUSE)
+	input = do_mouse() ? get_kbinput(edit, meta_key, func_key) :
 		ERR;
-	else
+}
 #endif
-	if (input == NANO_CONTROL_8 && *meta_key == FALSE &&
-		*func_key == FALSE)
-	    input = ISSET(REBIND_DELETE) ? NANO_BACKSPACE_KEY :
-		NANO_DELETE_KEY;
-    }
 
     /* Check for a shortcut in the main list. */
     s = get_shortcut(main_list, &input, meta_key, func_key);
diff --git a/src/prompt.c b/src/prompt.c
index c153d4b5..15107134 100644
--- a/src/prompt.c
+++ b/src/prompt.c
@@ -68,20 +68,15 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
     /* Read in a character. */
     input = get_kbinput(bottomwin, meta_key, func_key);
 
-    if (allow_funcs) {
 #ifndef DISABLE_MOUSE
-	/* If we got a mouse click and it was on a shortcut, read in the
-	 * shortcut character. */
-	if (*func_key == TRUE && input == KEY_MOUSE)
-	    input = do_statusbar_mouse() ? get_kbinput(bottomwin,
-		meta_key, func_key) : ERR;
-	else
+    if (allow_funcs) {
+    /* If we got a mouse click and it was on a shortcut, read in the
+     * shortcut character. */
+    if (allow_funcs && *func_key == TRUE && input == KEY_MOUSE)
+	input = do_statusbar_mouse() ? get_kbinput(bottomwin, meta_key,
+		func_key) : ERR;
+}
 #endif
-	if (input == NANO_CONTROL_8 && *meta_key == FALSE &&
-		*func_key == FALSE)
-	    input = ISSET(REBIND_DELETE) ? NANO_BACKSPACE_KEY :
-		NANO_DELETE_KEY;
-    }
 
     /* Check for a shortcut in the current list. */
     s = get_shortcut(currshortcut, &input, meta_key, func_key);
diff --git a/src/winio.c b/src/winio.c
index fe1b63f5..a627d104 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -402,10 +402,6 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key
 	    switch (escapes) {
 		case 0:
 		    switch (*kbinput) {
-			case NANO_CONTROL_8:
-			    retval = ISSET(REBIND_DELETE) ?
-				NANO_DELETE_KEY : NANO_BACKSPACE_KEY;
-			    break;
 			case KEY_DOWN:
 			    retval = NANO_NEXTLINE_KEY;
 			    break;
@@ -647,10 +643,18 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key
 	    }
     }
 
-    /* If we have a result and it's an extended keypad value (i.e, a
-     * value outside of byte range), set func_key to TRUE. */
-    if (retval != ERR)
+    if (retval != ERR) {
+	/* If our result is NANO_CONTROL_8, translate it to either
+	 * Backspace or Delete, depending on whether REBIND_DELETE is
+	 * TRUE or FALSE. */
+	if (retval == NANO_CONTROL_8)
+	    retval = ISSET(REBIND_DELETE) ? NANO_BACKSPACE_KEY :
+		NANO_DELETE_KEY;
+
+	/* If our result is an extended keypad value (i.e, a value
+	 * outside of byte range), set func_key to TRUE. */
 	*func_key = !is_byte(retval);
+    }
 
 #ifdef DEBUG
     fprintf(stderr, "parse_kbinput(): kbinput = %d, meta_key = %d, func_key = %d, escapes = %d, byte_digits = %d, retval = %d\n", *kbinput, (int)*meta_key, (int)*func_key, escapes, byte_digits, retval);
-- 
GitLab