From 5c7d88dc16361f251ff7d6fe2d4b315fe25215ca Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Sun, 28 May 2006 16:25:15 +0000
Subject: [PATCH] in parse_verbatim_kbinput(), don't include the ability to
 enter a Unicode sequence via verbatim input mode if we're not in a UTF-8
 locale

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3588 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  3 ++-
 src/winio.c | 73 ++++++++++++++++++++++++++++-------------------------
 2 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0b358e55..8eb724a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -315,7 +315,8 @@ CVS code -
 	- Simplify the if blocks wherever possible. (DLR)
   parse_verbatim_kbinput()
 	- Don't include the ability to enter a Unicode sequence via
-	  verbatim input mode if ENABLE_UTF8 isn't defined. (DLR)
+	  verbatim input mode if ENABLE_UTF8 isn't defined or we're not
+	  in a UTF-8 locale. (DLR)
   check_statusblank()
 	- Avoid redundant updates when statusblank is 0. (DLR)
   display_string()
diff --git a/src/winio.c b/src/winio.c
index 01edb819..d659ac49 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -1449,49 +1449,52 @@ int *parse_verbatim_kbinput(WINDOW *win, size_t *kbinput_len)
     while ((kbinput = get_input(win, 1)) == NULL);
 
 #ifdef ENABLE_UTF8
-    /* Check whether the first keystroke is a valid hexadecimal
-     * digit. */
-    uni = get_unicode_kbinput(*kbinput);
-
-    /* If the first keystroke isn't a valid hexadecimal digit, put back
-     * the first keystroke. */
-    if (uni != ERR)
-#endif /* ENABLE_UTF8 */
-
-	unget_input(kbinput, 1);
-
-#ifdef ENABLE_UTF8
-    /* Otherwise, read in keystrokes until we have a complete Unicode
-     * sequence, and put back the corresponding Unicode value. */
-    else {
-	char *uni_mb;
-	int uni_mb_len, *seq, i;
+    if (using_utf8()) {
+	/* Check whether the first keystroke is a valid hexadecimal
+	 * digit. */
+	uni = get_unicode_kbinput(*kbinput);
+
+	/* If the first keystroke isn't a valid hexadecimal digit, put
+	 * back the first keystroke. */
+	if (uni != ERR)
+	    unget_input(kbinput, 1);
+
+	/* Otherwise, read in keystrokes until we have a complete
+	 * Unicode sequence, and put back the corresponding Unicode
+	 * value. */
+	else {
+	    char *uni_mb;
+	    int uni_mb_len, *seq, i;
 
-	if (win == edit)
-	    /* TRANSLATORS: This is displayed during the input of a
-	     * six-digit Unicode code. */
-	    statusbar(_("Unicode Input"));
+	    if (win == edit)
+		/* TRANSLATORS: This is displayed during the input of a
+		 * six-digit hexadecimal Unicode character code. */
+		statusbar(_("Unicode Input"));
 
-	while (uni == ERR) {
-	    while ((kbinput = get_input(win, 1)) == NULL);
+	    while (uni == ERR) {
+		while ((kbinput = get_input(win, 1)) == NULL);
 
-	    uni = get_unicode_kbinput(*kbinput);
-	}
+		uni = get_unicode_kbinput(*kbinput);
+	    }
 
-	/* Put back the multibyte equivalent of the Unicode value. */
-	uni_mb = make_mbchar(uni, &uni_mb_len);
+	    /* Put back the multibyte equivalent of the Unicode
+	     * value. */
+	    uni_mb = make_mbchar(uni, &uni_mb_len);
 
-	seq = (int *)nmalloc(uni_mb_len * sizeof(int));
+	    seq = (int *)nmalloc(uni_mb_len * sizeof(int));
 
-	for (i = 0; i < uni_mb_len; i++)
-	    seq[i] = (unsigned char)uni_mb[i];
+	    for (i = 0; i < uni_mb_len; i++)
+		seq[i] = (unsigned char)uni_mb[i];
 
-	unget_input(seq, uni_mb_len);
+	    unget_input(seq, uni_mb_len);
 
-	free(seq);
-	free(uni_mb);
-    }
-#endif /* ENABLE_UTF8 */
+	    free(seq);
+	    free(uni_mb);
+	}
+    } else
+#endif
+	/* Put back the first keystroke. */
+	unget_input(kbinput, 1);
 
     /* Get the complete sequence, and save the characters in it as the
      * result. */
-- 
GitLab