From 5370b0cd194284abb351f1c36619064cb9a3afc3 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Sun, 23 Jul 2006 17:54:35 +0000
Subject: [PATCH] in parse_escape_seq_kbinput(), handle unknown and unignored
 escape sequences once instead of handling them twice in parse_kbinput()

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3807 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  3 +++
 src/proto.h |  2 +-
 src/winio.c | 50 +++++++++++++++++++-------------------------------
 3 files changed, 23 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e2b91af1..347b39a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -141,6 +141,9 @@ CVS code -
 	- If they're defined, translate KEY_SUP into NANO_PREVLINE_KEY
 	  and KEY_SDOWN into NANO_NEXTLINE_KEY, since they are sometimes
 	  generated by Shift-Up and Shift-Down. (DLR)
+  parse_escape_seq_kbinput()
+	- Handle unknown and unignored escape sequences once here
+	  instead of twice in parse_kbinput(). (DLR)
   display_string()
 	- Properly handle buf[start_index]'s being a null terminator.
 	  (DLR)
diff --git a/src/proto.h b/src/proto.h
index b7242362..382a3d15 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -735,7 +735,7 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key);
 int get_escape_seq_kbinput(const int *seq, size_t seq_len, bool
 	*ignore_seq);
 int get_escape_seq_abcd(int kbinput);
-int parse_escape_seq_kbinput(int kbinput, bool *ignore_seq);
+int parse_escape_seq_kbinput(WINDOW *win, int kbinput);
 int get_byte_kbinput(int kbinput);
 #ifdef ENABLE_UTF8
 long add_unicode_digit(int kbinput, long factor, long *uni);
diff --git a/src/winio.c b/src/winio.c
index b226b98d..fbd41698 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -377,18 +377,8 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
 			 * there are other keystrokes waiting: escape
 			 * sequence mode.  Interpret the escape
 			 * sequence. */
-			bool ignore_seq;
-
-			retval = parse_escape_seq_kbinput(*kbinput,
-				&ignore_seq);
-
-			/* If the escape sequence is unrecognized and
-			 * not ignored, throw it out. */
-			if (retval == ERR && !ignore_seq) {
-			    if (win == edit)
-				statusbar(_("Unknown Command"));
-			    beep();
-			}
+			retval = parse_escape_seq_kbinput(win,
+				*kbinput);
 		    }
 		    break;
 		case 2:
@@ -470,20 +460,10 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
 			 * meta and escape sequence mode.  Reset the
 			 * escape counter, set meta_key to TRUE, and
 			 * interpret the escape sequence. */
-			bool ignore_seq;
-
 			escapes = 0;
 			*meta_key = TRUE;
-			retval = parse_escape_seq_kbinput(*kbinput,
-				&ignore_seq);
-
-			/* If the escape sequence is unrecognized and
-			 * not ignored, throw it out. */
-			if (retval == ERR && !ignore_seq) {
-			    if (win == edit)
-				statusbar(_("Unknown Command"));
-			    beep();
-			}
+			retval = parse_escape_seq_kbinput(win,
+				*kbinput);
 		    }
 		    break;
 	    }
@@ -1196,14 +1176,13 @@ int get_escape_seq_abcd(int kbinput)
 }
 
 /* Interpret the escape sequence in the keystroke buffer, the first
- * character of which is kbinput.  If we want to ignore the escape
- * sequence, set retval to ERR and ignore_seq to TRUE.  Assume that the
- * keystroke buffer isn't empty, and that the initial escape has already
- * been read in. */
-int parse_escape_seq_kbinput(int kbinput, bool *ignore_seq)
+ * character of which is kbinput.  Assume that the keystroke buffer
+ * isn't empty, and that the initial escape has already been read in. */
+int parse_escape_seq_kbinput(WINDOW *win, int kbinput)
 {
     int retval, *seq;
     size_t seq_len;
+    bool ignore_seq;
 
     /* Put back the non-escape character, get the complete escape
      * sequence, translate the sequence into its corresponding key
@@ -1211,12 +1190,21 @@ int parse_escape_seq_kbinput(int kbinput, bool *ignore_seq)
     unget_input(&kbinput, 1);
     seq_len = get_key_buffer_len();
     seq = get_input(NULL, seq_len);
-    retval = get_escape_seq_kbinput(seq, seq_len, ignore_seq);
+    retval = get_escape_seq_kbinput(seq, seq_len, &ignore_seq);
 
     free(seq);
 
+    /* If we got an unrecognized escape sequence, and it's not ignored,
+     * throw it out. */
+    if (retval == ERR && !ignore_seq) {
+	if (win == edit)
+	    statusbar(_("Unknown Command"));
+	    beep();
+	}
+    }
+
 #ifdef DEBUG
-    fprintf(stderr, "parse_escape_seq_kbinput(): kbinput = %d, ignore_seq = %s, seq_len = %lu, retval = %d\n", kbinput, *ignore_seq ? "TRUE" : "FALSE", (unsigned long)seq_len, retval);
+    fprintf(stderr, "parse_escape_seq_kbinput(): kbinput = %d, ignore_seq = %s, seq_len = %lu, retval = %d\n", kbinput, ignore_seq ? "TRUE" : "FALSE", (unsigned long)seq_len, retval);
 #endif
 
     return retval;
-- 
GitLab