From b6e79fddafd6a33cf8f54f5406dbb19dca3a90b2 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Fri, 25 Feb 2005 19:17:57 +0000
Subject: [PATCH] start adding multibyte/wide character support to the help
 browser code

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2327 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog  |  4 +++-
 src/nano.c | 59 ++++++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 49 insertions(+), 14 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 26551145..350ee50e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -140,7 +140,7 @@ CVS code -
 	  supposed to return void anyway.  Also, the value of RETSIGTYPE
 	  is sometimes misdetected as int, leading to compilation
 	  warnings or errors.  Changes to cancel_fork(),
-	  handle_hipterm(), do_suspend(), and do_cont(). (David
+	  handle_hupterm(), do_suspend(), and do_cont(). (David
 	  Benbennick)
 	- Change flags to an unsigned long, and totsize to a size_t.
 	  (DLR)
@@ -161,6 +161,8 @@ CVS code -
 	  routine to get the current user's home directory into the new
 	  function get_homedir(), and use it where necessary.  Also add
 	  a few miscellaneous tweaks.
+	- Still more steps toward multibyte/wide character support.
+	  Changes to help_init(). (DLR)
 - cut.c:
   do_cut_text()
 	- If keep_cutbuffer is FALSE, only blow away the text in the
diff --git a/src/nano.c b/src/nano.c
index 254ce266..c490a3aa 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -270,6 +270,11 @@ void help_init(void)
     const shortcut *s;
 #ifndef NANO_SMALL
     const toggle *t;
+#ifdef ENABLE_NANORC
+    bool old_whitespace = ISSET(WHITESPACE_DISPLAY);
+
+    UNSET(WHITESPACE_DISPLAY);
+#endif
 #endif
 
     /* First, set up the initial help text for the current function. */
@@ -394,10 +399,10 @@ void help_init(void)
      * Each line has "M-%c\t\t\t", which fills 24 columns, plus a space,
      * plus translated text, plus '\n'. */
     if (currshortcut == main_list) {
-	size_t endislen = strlen(_("enable/disable"));
+	size_t endis_len = strlen(_("enable/disable"));
 
 	for (t = toggles; t != NULL; t = t->next)
-	    allocsize += 8 + strlen(t->desc) + endislen;
+	    allocsize += 8 + strlen(t->desc) + endis_len;
     }
 #endif
 
@@ -424,13 +429,22 @@ void help_init(void)
 	if (s->ctrlval != NANO_NO_KEY) {
 	    entries++;
 #ifndef NANO_SMALL
-	    if (s->ctrlval == NANO_HISTORY_KEY)
-		ptr += sprintf(ptr, "%.7s", _("Up"));
-	    else
+	    if (s->ctrlval == NANO_HISTORY_KEY) {
+		char *up_ptr = display_string(_("Up"), 0, 7, FALSE);
+
+		ptr += sprintf(ptr, "%s", up_ptr);
+
+		free(up_ptr);
+	    } else
 #endif
-	    if (s->ctrlval == NANO_CONTROL_SPACE)
-		ptr += sprintf(ptr, "^%.6s", _("Space"));
-	    else if (s->ctrlval == NANO_CONTROL_8)
+	    if (s->ctrlval == NANO_CONTROL_SPACE) {
+		char *space_ptr = display_string(_("Space"), 0, 6,
+			FALSE);
+
+		ptr += sprintf(ptr, "^%s", space_ptr);
+
+		free(space_ptr);
+	    } else if (s->ctrlval == NANO_CONTROL_8)
 		ptr += sprintf(ptr, "^?");
 	    else
 		ptr += sprintf(ptr, "^%c", s->ctrlval + 64);
@@ -459,9 +473,14 @@ void help_init(void)
 	    }
 	    /* If the primary meta key sequence is the first entry,
 	     * don't put parentheses around it. */
-	    if (entries == 1 && s->metaval == NANO_ALT_SPACE)
-		ptr += sprintf(ptr, "M-%.5s", _("Space"));
-	    else
+	    if (entries == 1 && s->metaval == NANO_ALT_SPACE) {
+		char *space_ptr = display_string(_("Space"), 0, 5,
+			FALSE);
+
+		ptr += sprintf(ptr, "M-%s", space_ptr);
+
+		free(space_ptr);
+	    } else
 		ptr += sprintf(ptr, entries == 1 ? "M-%c" : "(M-%c)",
 			toupper(s->metaval));
 	    *(ptr++) = '\t';
@@ -486,7 +505,16 @@ void help_init(void)
 	}
 
 	assert(s->help != NULL);
-	ptr += sprintf(ptr, "%.*s\n", COLS > 24 ? COLS - 24 : 0, s->help);
+
+	if (COLS > 24) {
+	    char *help_ptr = display_string(s->help, 0, COLS - 24,
+		FALSE);
+
+	    ptr += sprintf(ptr, help_ptr);
+
+	    free(help_ptr);
+	}
+	ptr += sprintf(ptr, "\n");
     }
 
 #ifndef NANO_SMALL
@@ -498,7 +526,12 @@ void help_init(void)
 		t->desc, _("enable/disable"));
 	}
     }
-#endif /* !NANO_SMALL */
+
+#ifdef ENABLE_NANORC
+    if (old_whitespace)
+	SET(WHITESPACE_DISPLAY);
+#endif
+#endif
 
     /* If all went well, we didn't overwrite the allocated space for
      * help_text. */
-- 
GitLab