commit 0ff01a92bc716c5d274ce48ef69f5f3c944ad3d0
parent cc823ab6d6c44c448a7780b3d1ccb7e364321a73
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date: Mon, 25 Oct 2004 15:00:38 +0000
put DB's old efficiency tweaks back in bottombars()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2025 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 25 insertions(+), 17 deletions(-)
diff --git 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
@@ -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);