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
master
David Lawrence Ramsey 2005-02-25 19:17:57 +00:00
parent 0c23aed600
commit b6e79fddaf
2 changed files with 49 additions and 14 deletions

View File

@ -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 -
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

View File

@ -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)
* 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)
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)
} }
/* 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)
} }
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)
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. */