[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.79 and 1.80

version 1.79, 2015/08/28 16:46:40 version 1.80, 2015/08/28 17:01:42
Line 45 
Line 45 
 void     format_cb_host(struct format_tree *, struct format_entry *);  void     format_cb_host(struct format_tree *, struct format_entry *);
 void     format_cb_host_short(struct format_tree *, struct format_entry *);  void     format_cb_host_short(struct format_tree *, struct format_entry *);
 void     format_cb_pid(struct format_tree *, struct format_entry *);  void     format_cb_pid(struct format_tree *, struct format_entry *);
   void     format_cb_session_alerts(struct format_tree *, struct format_entry *);
   void     format_cb_window_layout(struct format_tree *, struct format_entry *);
 void     format_cb_start_command(struct format_tree *, struct format_entry *);  void     format_cb_start_command(struct format_tree *, struct format_entry *);
 void     format_cb_current_command(struct format_tree *, struct format_entry *);  void     format_cb_current_command(struct format_tree *, struct format_entry *);
   void     format_cb_history_bytes(struct format_tree *, struct format_entry *);
   void     format_cb_pane_tabs(struct format_tree *, struct format_entry *);
   
 void     format_add_cb(struct format_tree *, const char *, format_cb);  void     format_add_cb(struct format_tree *, const char *, format_cb);
 int      format_replace(struct format_tree *, const char *, size_t, char **,  int      format_replace(struct format_tree *, const char *, size_t, char **,
Line 301 
Line 305 
         xasprintf(&fe->value, "%ld", (long)getpid());          xasprintf(&fe->value, "%ld", (long)getpid());
 }  }
   
   /* Callback for session_alerts. */
   void
   format_cb_session_alerts(struct format_tree *ft, struct format_entry *fe)
   {
           struct session  *s = ft->s;
           struct winlink  *wl;
           char             alerts[256], tmp[16];
   
           if (s == NULL)
                   return;
   
           *alerts = '\0';
           RB_FOREACH(wl, winlinks, &s->windows) {
                   if ((wl->flags & WINLINK_ALERTFLAGS) == 0)
                           continue;
                   xsnprintf(tmp, sizeof tmp, "%u", wl->idx);
   
                   if (*alerts != '\0')
                           strlcat(alerts, ",", sizeof alerts);
                   strlcat(alerts, tmp, sizeof alerts);
                   if (wl->flags & WINLINK_ACTIVITY)
                           strlcat(alerts, "#", sizeof alerts);
                   if (wl->flags & WINLINK_BELL)
                           strlcat(alerts, "!", sizeof alerts);
                   if (wl->flags & WINLINK_SILENCE)
                           strlcat(alerts, "~", sizeof alerts);
           }
           fe->value = xstrdup(alerts);
   }
   
   /* Callback for window_layout. */
   void
   format_cb_window_layout(struct format_tree *ft, struct format_entry *fe)
   {
           struct window   *w = ft->w;
   
           if (w == NULL)
                   return;
   
           if (w->saved_layout_root != NULL)
                   fe->value = layout_dump(w->saved_layout_root);
           else
                   fe->value = layout_dump(w->layout_root);
   }
   
 /* Callback for pane_start_command. */  /* Callback for pane_start_command. */
 void  void
 format_cb_start_command(struct format_tree *ft, struct format_entry *fe)  format_cb_start_command(struct format_tree *ft, struct format_entry *fe)
Line 336 
Line 385 
         free(cmd);          free(cmd);
 }  }
   
   /* Callback for history_bytes. */
   void
   format_cb_history_bytes(struct format_tree *ft, struct format_entry *fe)
   {
           struct window_pane      *wp = ft->wp;
           struct grid             *gd;
           struct grid_line        *gl;
           unsigned long long       size;
           u_int                    i;
   
           if (wp == NULL)
                   return;
           gd = wp->base.grid;
   
           size = 0;
           for (i = 0; i < gd->hsize; i++) {
                   gl = &gd->linedata[i];
                   size += gl->cellsize * sizeof *gl->celldata;
           }
           size += gd->hsize * sizeof *gd->linedata;
   
           xasprintf(&fe->value, "%llu", size);
   }
   
   /* Callback for pane_tabs. */
   void
   format_cb_pane_tabs(struct format_tree *ft, struct format_entry *fe)
   {
           struct window_pane      *wp = ft->wp;
           struct evbuffer         *buffer;
           u_int                    i;
           int                      size;
   
           if (wp == NULL)
                   return;
   
           buffer = evbuffer_new();
           for (i = 0; i < wp->base.grid->sx; i++) {
                   if (!bit_test(wp->base.tabs, i))
                           continue;
   
                   if (EVBUFFER_LENGTH(buffer) > 0)
                           evbuffer_add(buffer, ",", 1);
                   evbuffer_add_printf(buffer, "%u", i);
           }
           size = EVBUFFER_LENGTH(buffer);
           xasprintf(&fe->value, "%.*s", size, EVBUFFER_DATA(buffer));
           evbuffer_free(buffer);
   }
   
 /* Create a new tree. */  /* Create a new tree. */
 struct format_tree *  struct format_tree *
 format_create(void)  format_create(void)
Line 756 
Line 855 
 {  {
         struct session_group    *sg;          struct session_group    *sg;
         time_t                   t;          time_t                   t;
         struct winlink          *wl;  
         char                     alerts[256], tmp[16];  
   
         ft->s = s;          ft->s = s;
   
Line 783 
Line 880 
         format_add(ft, "session_attached", "%u", s->attached);          format_add(ft, "session_attached", "%u", s->attached);
         format_add(ft, "session_many_attached", "%d", s->attached > 1);          format_add(ft, "session_many_attached", "%d", s->attached > 1);
   
         *alerts = '\0';          format_add_cb(ft, "session_alerts", format_cb_session_alerts);
         RB_FOREACH (wl, winlinks, &s->windows) {  
                 if ((wl->flags & WINLINK_ALERTFLAGS) == 0)  
                         continue;  
                 xsnprintf(tmp, sizeof tmp, "%u", wl->idx);  
   
                 if (*alerts != '\0')  
                         strlcat(alerts, ",", sizeof alerts);  
                 strlcat(alerts, tmp, sizeof alerts);  
                 if (wl->flags & WINLINK_ACTIVITY)  
                         strlcat(alerts, "#", sizeof alerts);  
                 if (wl->flags & WINLINK_BELL)  
                         strlcat(alerts, "!", sizeof alerts);  
                 if (wl->flags & WINLINK_SILENCE)  
                         strlcat(alerts, "~", sizeof alerts);  
         }  
         format_add(ft, "session_alerts", "%s", alerts);  
 }  }
   
 /* Set default format keys for a client. */  /* Set default format keys for a client. */
Line 858 
Line 939 
 void  void
 format_defaults_window(struct format_tree *ft, struct window *w)  format_defaults_window(struct format_tree *ft, struct window *w)
 {  {
         char    *layout;  
         time_t   t;          time_t   t;
   
         ft->w = w;          ft->w = w;
   
         if (w->saved_layout_root != NULL)  
                 layout = layout_dump(w->saved_layout_root);  
         else  
                 layout = layout_dump(w->layout_root);  
   
         t = w->activity_time.tv_sec;          t = w->activity_time.tv_sec;
         format_add(ft, "window_activity", "%lld", (long long) t);          format_add(ft, "window_activity", "%lld", (long long) t);
         format_add(ft, "window_activity_string", "%s", format_time_string(t));          format_add(ft, "window_activity_string", "%s", format_time_string(t));
Line 876 
Line 951 
         format_add(ft, "window_name", "%s", w->name);          format_add(ft, "window_name", "%s", w->name);
         format_add(ft, "window_width", "%u", w->sx);          format_add(ft, "window_width", "%u", w->sx);
         format_add(ft, "window_height", "%u", w->sy);          format_add(ft, "window_height", "%u", w->sy);
         format_add(ft, "window_layout", "%s", layout);          format_add_cb(ft, "window_layout", format_cb_window_layout);
         format_add(ft, "window_panes", "%u", window_count_panes(w));          format_add(ft, "window_panes", "%u", window_count_panes(w));
         format_add(ft, "window_zoomed_flag", "%d",          format_add(ft, "window_zoomed_flag", "%d",
             !!(w->flags & WINDOW_ZOOMED));              !!(w->flags & WINDOW_ZOOMED));
   
         free(layout);  
 }  }
   
 /* Set default format keys for a winlink. */  /* Set default format keys for a winlink. */
Line 916 
Line 989 
         free(flags);          free(flags);
 }  }
   
 /* Add window pane tabs. */  
 void  
 format_defaults_pane_tabs(struct format_tree *ft, struct window_pane *wp)  
 {  
         struct evbuffer *buffer;  
         u_int            i;  
   
         buffer = evbuffer_new();  
         for (i = 0; i < wp->base.grid->sx; i++) {  
                 if (!bit_test(wp->base.tabs, i))  
                         continue;  
   
                 if (EVBUFFER_LENGTH(buffer) > 0)  
                         evbuffer_add(buffer, ",", 1);  
                 evbuffer_add_printf(buffer, "%u", i);  
         }  
   
         format_add(ft, "pane_tabs", "%.*s", (int) EVBUFFER_LENGTH(buffer),  
             EVBUFFER_DATA(buffer));  
         evbuffer_free(buffer);  
 }  
   
 /* Set default format keys for a window pane. */  /* Set default format keys for a window pane. */
 void  void
 format_defaults_pane(struct format_tree *ft, struct window_pane *wp)  format_defaults_pane(struct format_tree *ft, struct window_pane *wp)
 {  {
         struct grid             *gd = wp->base.grid;          struct grid     *gd = wp->base.grid;
         struct grid_line        *gl;          u_int            idx;
         unsigned long long       size;          int              status;
         u_int                    i, idx;  
         int                      status;  
   
         if (ft->w == NULL)          if (ft->w == NULL)
                 ft->w = wp->window;                  ft->w = wp->window;
         ft->wp = wp;          ft->wp = wp;
   
         size = 0;  
         for (i = 0; i < gd->hsize; i++) {  
                 gl = &gd->linedata[i];  
                 size += gl->cellsize * sizeof *gl->celldata;  
         }  
         size += gd->hsize * sizeof *gd->linedata;  
         format_add(ft, "history_size", "%u", gd->hsize);          format_add(ft, "history_size", "%u", gd->hsize);
         format_add(ft, "history_limit", "%u", gd->hlimit);          format_add(ft, "history_limit", "%u", gd->hlimit);
         format_add(ft, "history_bytes", "%llu", size);          format_add_cb(ft, "history_bytes", format_cb_history_bytes);
   
         if (window_pane_index(wp, &idx) != 0)          if (window_pane_index(wp, &idx) != 0)
                 fatalx("index not found");                  fatalx("index not found");
Line 1023 
Line 1066 
         format_add(ft, "mouse_utf8_flag", "%d",          format_add(ft, "mouse_utf8_flag", "%d",
             !!(wp->base.mode & MODE_MOUSE_UTF8));              !!(wp->base.mode & MODE_MOUSE_UTF8));
   
         format_defaults_pane_tabs(ft, wp);          format_add_cb(ft, "pane_tabs", format_cb_pane_tabs);
 }  }
   
 /* Set default format keys for paste buffer. */  /* Set default format keys for paste buffer. */

Legend:
Removed from v.1.79  
changed lines
  Added in v.1.80