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

Diff for /src/usr.bin/tmux/window-tree.c between version 1.4 and 1.5

version 1.4, 2017/06/09 15:29:15 version 1.5, 2017/06/09 16:01:39
Line 81 
Line 81 
         struct client                    *client;          struct client                    *client;
         const char                       *entered;          const char                       *entered;
   
         char                             *filter;  
   
         struct cmd_find_state             fs;          struct cmd_find_state             fs;
         enum window_tree_type             type;          enum window_tree_type             type;
 };  };
Line 227 
Line 225 
   
 static int  static int
 window_tree_build_window(struct session *s, struct winlink *wl, void* modedata,  window_tree_build_window(struct session *s, struct winlink *wl, void* modedata,
     u_int sort_type, struct mode_tree_item *parent, int no_filter)      u_int sort_type, struct mode_tree_item *parent, const char *filter)
 {  {
         struct window_tree_modedata     *data = modedata;          struct window_tree_modedata     *data = modedata;
         struct window_tree_itemdata     *item;          struct window_tree_itemdata     *item;
Line 261 
Line 259 
         l = NULL;          l = NULL;
         n = 0;          n = 0;
         TAILQ_FOREACH(wp, &wl->window->panes, entry) {          TAILQ_FOREACH(wp, &wl->window->panes, entry) {
                 if (!no_filter && data->filter != NULL) {                  if (filter != NULL) {
                         cp = format_single(NULL, data->filter, NULL, s, wl, wp);                          cp = format_single(NULL, filter, NULL, s, wl, wp);
                         if (!format_true(cp)) {                          if (!format_true(cp)) {
                                 free(cp);                                  free(cp);
                                 continue;                                  continue;
Line 298 
Line 296 
   
 static void  static void
 window_tree_build_session(struct session *s, void* modedata,  window_tree_build_session(struct session *s, void* modedata,
     u_int sort_type, int no_filter)      u_int sort_type, const char *filter)
 {  {
         struct window_tree_modedata     *data = modedata;          struct window_tree_modedata     *data = modedata;
         struct window_tree_itemdata     *item;          struct window_tree_itemdata     *item;
Line 349 
Line 347 
         empty = 0;          empty = 0;
         for (i = 0; i < n; i++) {          for (i = 0; i < n; i++) {
                 if (!window_tree_build_window(s, l[i], modedata, sort_type, mti,                  if (!window_tree_build_window(s, l[i], modedata, sort_type, mti,
                     no_filter))                      filter))
                         empty++;                          empty++;
         }          }
         if (empty == n) {          if (empty == n) {
Line 361 
Line 359 
 }  }
   
 static void  static void
 window_tree_build(void *modedata, u_int sort_type, uint64_t *tag)  window_tree_build(void *modedata, u_int sort_type, uint64_t *tag,
       const char *filter)
 {  {
         struct window_tree_modedata     *data = modedata;          struct window_tree_modedata     *data = modedata;
         struct session                  *s, **l;          struct session                  *s, **l;
         u_int                            n, i;          u_int                            n, i;
         int                              no_filter = 0;  
   
 restart:  
         for (i = 0; i < data->item_size; i++)          for (i = 0; i < data->item_size; i++)
                 window_tree_free_item(data->item_list[i]);                  window_tree_free_item(data->item_list[i]);
         free(data->item_list);          free(data->item_list);
Line 393 
Line 390 
         }          }
   
         for (i = 0; i < n; i++)          for (i = 0; i < n; i++)
                 window_tree_build_session(l[i], modedata, sort_type, no_filter);                  window_tree_build_session(l[i], modedata, sort_type, filter);
         free(l);          free(l);
   
         if (!no_filter && data->item_size == 0) {  
                 no_filter = 1;  
                 goto restart;  
         }  
   
         switch (data->type) {          switch (data->type) {
         case WINDOW_TREE_NONE:          case WINDOW_TREE_NONE:
                 break;                  break;
Line 493 
Line 485 
         data->wp = wp;          data->wp = wp;
         data->references = 1;          data->references = 1;
   
         if (args_has(args, 'f'))  
                 data->filter = xstrdup(args_get(args, 'f'));  
         else  
                 data->filter = NULL;  
   
         if (args == NULL || args->argc == 0)          if (args == NULL || args->argc == 0)
                 data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND);                  data->command = xstrdup(WINDOW_TREE_DEFAULT_COMMAND);
         else          else
Line 529 
Line 516 
                 window_tree_free_item(data->item_list[i]);                  window_tree_free_item(data->item_list[i]);
         free(data->item_list);          free(data->item_list);
   
         free(data->filter);  
   
         free(data->command);          free(data->command);
         free(data);          free(data);
 }  }
Line 653 
Line 638 
         window_tree_destroy(data);          window_tree_destroy(data);
 }  }
   
 static int  
 window_tree_filter_callback(__unused struct client *c, void *modedata,  
     const char *s, __unused int done)  
 {  
         struct window_tree_modedata     *data = modedata;  
   
         if (data->dead)  
                 return (0);  
   
         if (data->filter != NULL)  
                 free(data->filter);  
         if (s == NULL || *s == '\0')  
                 data->filter = NULL;  
         else  
                 data->filter = xstrdup(s);  
   
         mode_tree_build(data->data);  
         mode_tree_draw(data->data);  
         data->wp->flags |= PANE_REDRAW;  
   
         return (0);  
 }  
   
 static void  static void
 window_tree_filter_free(void *modedata)  
 {  
         struct window_tree_modedata     *data = modedata;  
   
         window_tree_destroy(data);  
 }  
   
 static void  
 window_tree_key(struct window_pane *wp, struct client *c,  window_tree_key(struct window_pane *wp, struct client *c,
     __unused struct session *s, key_code key, struct mouse_event *m)      __unused struct session *s, key_code key, struct mouse_event *m)
 {  {
Line 695 
Line 649 
         int                              finished;          int                              finished;
         u_int                            tagged;          u_int                            tagged;
   
         /*  
          * t = toggle tag  
          * T = tag none  
          * C-t = tag all  
          * q = exit  
          * O = change sort order  
          *  
          * Enter = select item  
          * : = enter command  
          * f = enter filter  
          */  
   
         finished = mode_tree_key(data->data, c, &key, m);          finished = mode_tree_key(data->data, c, &key, m);
         switch (key) {          switch (key) {
         case 'f':  
                 data->references++;  
                 status_prompt_set(c, "(filter) ", data->filter,  
                     window_tree_filter_callback, window_tree_filter_free, data,  
                     PROMPT_NOFORMAT);  
                 break;  
         case ':':          case ':':
                 tagged = mode_tree_count_tagged(data->data);                  tagged = mode_tree_count_tagged(data->data);
                 if (tagged != 0)                  if (tagged != 0)

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5