=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/format.c,v retrieving revision 1.24 retrieving revision 1.25 diff -c -r1.24 -r1.25 *** src/usr.bin/tmux/format.c 2013/04/17 14:52:31 1.24 --- src/usr.bin/tmux/format.c 2013/05/31 19:46:42 1.25 *************** *** 1,4 **** ! /* $OpenBSD: format.c,v 1.24 2013/04/17 14:52:31 deraadt Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: format.c,v 1.25 2013/05/31 19:46:42 nicm Exp $ */ /* * Copyright (c) 2011 Nicholas Marriott *************** *** 46,53 **** return (strcmp(fe1->key, fe2->key)); } ! /* Single-character aliases. */ ! const char *format_aliases[26] = { NULL, /* A */ NULL, /* B */ NULL, /* C */ --- 46,53 ---- return (strcmp(fe1->key, fe2->key)); } ! /* Single-character uppercase aliases. */ ! const char *format_upper[] = { NULL, /* A */ NULL, /* B */ NULL, /* C */ *************** *** 76,93 **** NULL /* Z */ }; /* Create a new tree. */ struct format_tree * format_create(void) { struct format_tree *ft; ! char host[MAXHOSTNAMELEN]; ft = xmalloc(sizeof *ft); RB_INIT(ft); ! if (gethostname(host, sizeof host) == 0) format_add(ft, "host", "%s", host); return (ft); } --- 76,127 ---- NULL /* Z */ }; + /* Single-character lowercase aliases. */ + const char *format_lower[] = { + NULL, /* a */ + NULL, /* b */ + NULL, /* c */ + NULL, /* d */ + NULL, /* e */ + NULL, /* f */ + NULL, /* g */ + "host_short", /* h */ + NULL, /* i */ + NULL, /* j */ + NULL, /* k */ + NULL, /* l */ + NULL, /* m */ + NULL, /* n */ + NULL, /* o */ + NULL, /* p */ + NULL, /* q */ + NULL, /* r */ + NULL, /* s */ + NULL, /* t */ + NULL, /* u */ + NULL, /* v */ + NULL, /* w */ + NULL, /* x */ + NULL, /* y */ + NULL /* z */ + }; + /* Create a new tree. */ struct format_tree * format_create(void) { struct format_tree *ft; ! char host[MAXHOSTNAMELEN], *ptr; ft = xmalloc(sizeof *ft); RB_INIT(ft); ! if (gethostname(host, sizeof host) == 0) { format_add(ft, "host", "%s", host); + if ((ptr = strrchr(host, '.')) != NULL) + *ptr = '\0'; + format_add(ft, "host_short", "%s", host); + } return (ft); } *************** *** 109,115 **** free(fe); } ! free (ft); } /* Add a key-value pair. */ --- 143,149 ---- free(fe); } ! free(ft); } /* Add a key-value pair. */ *************** *** 230,235 **** --- 264,270 ---- fmt++; ch = (u_char) *fmt++; + switch (ch) { case '{': ptr = strchr(fmt, '}'); *************** *** 242,263 **** fmt += n + 1; continue; default: ! if (ch >= 'A' && ch <= 'Z') { ! s = format_aliases[ch - 'A']; ! if (s != NULL) { ! n = strlen(s); ! if (format_replace ( ! ft, s, n, &buf, &len, &off) != 0) ! break; ! continue; } } ! while (len - off < 3) { ! buf = xrealloc(buf, 2, len); ! len *= 2; ! } ! buf[off++] = '#'; ! buf[off++] = ch; continue; } --- 277,299 ---- fmt += n + 1; continue; default: ! s = NULL; ! if (ch >= 'A' && ch <= 'Z') ! s = format_upper[ch - 'A']; ! else if (ch >= 'a' && ch <= 'z') ! s = format_lower[ch - 'a']; ! if (s == NULL) { ! while (len - off < 3) { ! buf = xrealloc(buf, 2, len); ! len *= 2; } + buf[off++] = '#'; + buf[off++] = ch; + continue; } ! n = strlen(s); ! if (format_replace(ft, s, n, &buf, &len, &off) != 0) ! break; continue; }