Commit b6e79fdd authored by David Lawrence Ramsey's avatar David Lawrence Ramsey
Browse files

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