[BACK]Return to format.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/format.c between version 1.53 and 1.54

version 1.53, 2014/12/01 14:30:18 version 1.54, 2014/12/02 23:19:45
Line 39 
Line 39 
 char    *format_get_command(struct window_pane *);  char    *format_get_command(struct window_pane *);
 void     format_window_pane_tabs(struct format_tree *, struct window_pane *);  void     format_window_pane_tabs(struct format_tree *, struct window_pane *);
   
   /* Entry in format tree. */
   struct format_entry {
           char                   *key;
           char                   *value;
   
           RB_ENTRY(format_entry)  entry;
   };
   
   /* Tree of format entries. */
   struct format_tree {
           struct window   *w;
           struct session  *s;
   
           RB_HEAD(format_rb_tree, format_entry) tree;
   };
   
 /* Format key-value replacement entry. */  /* Format key-value replacement entry. */
 RB_GENERATE(format_tree, format_entry, entry, format_cmp);  int     format_cmp(struct format_entry *, struct format_entry *);
   RB_PROTOTYPE(format_rb_tree, format_entry, entry, format_cmp);
   RB_GENERATE(format_rb_tree, format_entry, entry, format_cmp);
   
 /* Format tree comparison function. */  /* Format tree comparison function. */
 int  int
Line 116 
Line 134 
         struct format_tree      *ft;          struct format_tree      *ft;
         char                     host[MAXHOSTNAMELEN], *ptr;          char                     host[MAXHOSTNAMELEN], *ptr;
   
         ft = xmalloc(sizeof *ft);          ft = xcalloc(1, sizeof *ft);
         RB_INIT(ft);          RB_INIT(&ft->tree);
   
         if (gethostname(host, sizeof host) == 0) {          if (gethostname(host, sizeof host) == 0) {
                 format_add(ft, "host", "%s", host);                  format_add(ft, "host", "%s", host);
Line 133 
Line 151 
 void  void
 format_free(struct format_tree *ft)  format_free(struct format_tree *ft)
 {  {
         struct format_entry     *fe, *fe_next;          struct format_entry     *fe, *fe1;
   
         fe_next = RB_MIN(format_tree, ft);          RB_FOREACH_SAFE(fe, format_rb_tree, &ft->tree, fe1) {
         while (fe_next != NULL) {                  RB_REMOVE(format_rb_tree, &ft->tree, fe);
                 fe = fe_next;  
                 fe_next = RB_NEXT(format_tree, ft, fe);  
   
                 RB_REMOVE(format_tree, ft, fe);  
                 free(fe->value);                  free(fe->value);
                 free(fe->key);                  free(fe->key);
                 free(fe);                  free(fe);
Line 164 
Line 178 
         xvasprintf(&fe->value, fmt, ap);          xvasprintf(&fe->value, fmt, ap);
         va_end(ap);          va_end(ap);
   
         fe_now = RB_INSERT(format_tree, ft, fe);          fe_now = RB_INSERT(format_rb_tree, &ft->tree, fe);
         if (fe_now != NULL) {          if (fe_now != NULL) {
                 free(fe_now->value);                  free(fe_now->value);
                 fe_now->value = fe->value;                  fe_now->value = fe->value;
Line 178 
Line 192 
 format_find(struct format_tree *ft, const char *key)  format_find(struct format_tree *ft, const char *key)
 {  {
         struct format_entry     *fe, fe_find;          struct format_entry     *fe, fe_find;
           struct options_entry    *o;
           static char              s[16];
   
           o = options_find(&global_options, key);
           if (o == NULL && ft->w != NULL)
                   o = options_find(&ft->w->options, key);
           if (o == NULL)
                   o = options_find(&global_w_options, key);
           if (o == NULL && ft->s != NULL)
                   o = options_find(&ft->s->options, key);
           if (o == NULL)
                   o = options_find(&global_s_options, key);
           if (o != NULL) {
                   switch (o->type) {
                   case OPTIONS_STRING:
                           return (o->str);
                   case OPTIONS_NUMBER:
                           snprintf(s, sizeof s, "%lld", o->num);
                           return (s);
                   case OPTIONS_STYLE:
                           return (style_tostring(&o->style));
                   }
           }
   
         fe_find.key = (char *) key;          fe_find.key = (char *) key;
         fe = RB_FIND(format_tree, ft, &fe_find);          fe = RB_FIND(format_rb_tree, &ft->tree, &fe_find);
         if (fe == NULL)          if (fe == NULL)
                 return (NULL);                  return (NULL);
         return (fe->value);          return (fe->value);
Line 205 
Line 242 
         copy[keylen] = '\0';          copy[keylen] = '\0';
   
         /* Is there a length limit or whatnot? */          /* Is there a length limit or whatnot? */
         if (!islower((u_char) *copy) && *copy != '?') {          if (!islower((u_char) *copy) && *copy != '@' && *copy != '?') {
                 while (*copy != ':' && *copy != '\0') {                  while (*copy != ':' && *copy != '\0') {
                         switch (*copy) {                          switch (*copy) {
                         case '=':                          case '=':
Line 388 
Line 425 
         char                    *tim;          char                    *tim;
         time_t                   t;          time_t                   t;
   
           ft->s = s;
   
         format_add(ft, "session_name", "%s", s->name);          format_add(ft, "session_name", "%s", s->name);
         format_add(ft, "session_windows", "%u", winlink_count(&s->windows));          format_add(ft, "session_windows", "%u", winlink_count(&s->windows));
         format_add(ft, "session_width", "%u", s->sx);          format_add(ft, "session_width", "%u", s->sx);
Line 417 
Line 456 
         time_t           t;          time_t           t;
         struct session  *s;          struct session  *s;
   
           if (ft->s == NULL)
                   ft->s = c->session;
   
         format_add(ft, "client_height", "%u", c->tty.sy);          format_add(ft, "client_height", "%u", c->tty.sy);
         format_add(ft, "client_width", "%u", c->tty.sx);          format_add(ft, "client_width", "%u", c->tty.sx);
         if (c->tty.path != NULL)          if (c->tty.path != NULL)
Line 462 
Line 504 
 {  {
         char    *layout;          char    *layout;
   
           ft->w = w;
   
         layout = layout_dump(w);          layout = layout_dump(w);
   
         format_add(ft, "window_id", "@%u", w->id);          format_add(ft, "window_id", "@%u", w->id);
Line 483 
Line 527 
         struct window   *w = wl->window;          struct window   *w = wl->window;
         char            *flags;          char            *flags;
   
           if (ft->w == NULL)
                   ft->w = wl->window;
   
         flags = window_printable_flags(s, wl);          flags = window_printable_flags(s, wl);
   
         format_window(ft, w);          format_window(ft, w);
Line 534 
Line 581 
         unsigned long long       size;          unsigned long long       size;
         u_int                    i, idx;          u_int                    i, idx;
         char                    *cmd;          char                    *cmd;
   
           if (ft->w == NULL)
                   ft->w = wp->window;
   
         size = 0;          size = 0;
         for (i = 0; i < gd->hsize; i++) {          for (i = 0; i < gd->hsize; i++) {

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.54