diff --git a/ChangeLog b/ChangeLog index 4af20b34..faf48906 100644 --- a/ChangeLog +++ b/ChangeLog @@ -258,6 +258,10 @@ CVS code - - New function to set resetstatuspos to FALSE when we don't properly exit the statusbar prompt, e.g. when we get a file from the file browser). (DLR) + bottombars() + - For efficiency, no longer dynamically allocate space for each + visible shortcut, as they're all of a constant short length. + (David Benbennick) reset_cursor() - If this is called before any files have been opened, as it can be by statusbar(), put the cursor at the top left corner of diff --git a/src/winio.c b/src/winio.c index 70180321..c6f5bc4f 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2450,7 +2450,6 @@ void statusbar(const char *msg, ...) void bottombars(const shortcut *s) { size_t i, colwidth, slen; - char *keystr; if (ISSET(NO_HELP)) return; @@ -2469,35 +2468,40 @@ void bottombars(const shortcut *s) /* There will be this many characters per column. We need at least * 3 to display anything properly.*/ colwidth = COLS / ((slen / 2) + (slen % 2)); - keystr = charalloc(colwidth); blank_bottombars(); for (i = 0; i < slen; i++, s = s->next) { - wmove(bottomwin, 1 + i % 2, (i / 2) * colwidth); + const char *keystr; /* Yucky sentinel values we can't handle a better way. */ #ifndef NANO_SMALL if (s->ctrlval == NANO_HISTORY_KEY) - strncpy(keystr, _("Up"), colwidth); - else + keystr = _("Up"); + else { #endif - if (s->ctrlval == NANO_CONTROL_SPACE) - strncpy(keystr, "^ ", colwidth); - else if (s->ctrlval == NANO_CONTROL_8) - strncpy(keystr, "^?", colwidth); - /* Normal values. Assume that the shortcut has an equivalent - * control key, meta key sequence, or both. */ - else if (s->ctrlval != NANO_NO_KEY) - snprintf(keystr, colwidth, "^%c", s->ctrlval + 64); - else if (s->metaval != NANO_NO_KEY) - snprintf(keystr, colwidth, "M-%c", toupper(s->metaval)); + char foo[4]; + if (s->ctrlval == NANO_CONTROL_SPACE) + strcpy(foo, "^ "); + else if (s->ctrlval == NANO_CONTROL_8) + strcpy(foo, "^?"); + /* Normal values. Assume that the shortcut has an + * equivalent control key, meta key sequence, or both. */ + else if (s->ctrlval != NANO_NO_KEY) + sprintf(foo, "^%c", s->ctrlval + 64); + else if (s->metaval != NANO_NO_KEY) + sprintf(foo, "M-%c", toupper(s->metaval)); + + keystr = foo; +#ifndef NANO_SMALL + } +#endif + + wmove(bottomwin, 1 + i % 2, (i / 2) * colwidth); onekey(keystr, s->desc, colwidth); } - free(keystr); - wnoutrefresh(bottomwin); reset_cursor(); wrefresh(edit);