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

Diff for /src/usr.bin/tmux/mode-tree.c between version 1.5 and 1.6

version 1.5, 2017/06/09 15:29:15 version 1.6, 2017/06/09 16:01:39
Line 39 
Line 39 
         u_int                     sort_size;          u_int                     sort_size;
         u_int                     sort_type;          u_int                     sort_type;
   
         void                     (*buildcb)(void *, u_int, uint64_t *);          void                     (*buildcb)(void *, u_int, uint64_t *,
                                        const char *);
         struct screen           *(*drawcb)(void *, void *, u_int, u_int);          struct screen           *(*drawcb)(void *, void *, u_int, u_int);
         int                      (*searchcb)(void*, void *, const char *);          int                      (*searchcb)(void*, void *, const char *);
   
Line 59 
Line 60 
   
         struct screen             screen;          struct screen             screen;
   
         char                     *ss;          char                     *search;
           char                     *filter;
 };  };
   
 struct mode_tree_item {  struct mode_tree_item {
Line 274 
Line 276 
   
 struct mode_tree_data *  struct mode_tree_data *
 mode_tree_start(struct window_pane *wp, struct args *args,  mode_tree_start(struct window_pane *wp, struct args *args,
     void (*buildcb)(void *, u_int, uint64_t *),      void (*buildcb)(void *, u_int, uint64_t *, const char *),
     struct screen *(*drawcb)(void *, void *, u_int, u_int),      struct screen *(*drawcb)(void *, void *, u_int, u_int),
     int (*searchcb)(void *, void *, const char *), void *modedata,      int (*searchcb)(void *, void *, const char *), void *modedata,
     const char **sort_list, u_int sort_size, struct screen **s)      const char **sort_list, u_int sort_size, struct screen **s)
Line 301 
Line 303 
                 }                  }
         }          }
   
           if (args_has(args, 'f'))
                   mtd->filter = xstrdup(args_get(args, 'f'));
           else
                   mtd->filter = NULL;
   
         mtd->buildcb = buildcb;          mtd->buildcb = buildcb;
         mtd->drawcb = drawcb;          mtd->drawcb = drawcb;
         mtd->searchcb = searchcb;          mtd->searchcb = searchcb;
Line 328 
Line 335 
         TAILQ_CONCAT(&mtd->saved, &mtd->children, entry);          TAILQ_CONCAT(&mtd->saved, &mtd->children, entry);
         TAILQ_INIT(&mtd->children);          TAILQ_INIT(&mtd->children);
   
         mtd->buildcb(mtd->modedata, mtd->sort_type, &tag);          mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, mtd->filter);
           if (TAILQ_EMPTY(&mtd->children))
                   mtd->buildcb(mtd->modedata, mtd->sort_type, &tag, NULL);
   
         mode_tree_free_items(&mtd->saved);          mode_tree_free_items(&mtd->saved);
         TAILQ_INIT(&mtd->saved);          TAILQ_INIT(&mtd->saved);
Line 362 
Line 371 
         mode_tree_clear_lines(mtd);          mode_tree_clear_lines(mtd);
         screen_free(&mtd->screen);          screen_free(&mtd->screen);
   
           free(mtd->search);
           free(mtd->filter);
   
         mtd->dead = 1;          mtd->dead = 1;
         mode_tree_remove_ref(mtd);          mode_tree_remove_ref(mtd);
 }  }
Line 575 
Line 587 
 {  {
         struct mode_tree_item   *mti, *last, *next;          struct mode_tree_item   *mti, *last, *next;
   
         if (mtd->ss == NULL)          if (mtd->search == NULL)
                 return (NULL);                  return (NULL);
   
         mti = last = mtd->line_list[mtd->current].item;          mti = last = mtd->line_list[mtd->current].item;
Line 601 
Line 613 
                         break;                          break;
   
                 if (mtd->searchcb == NULL) {                  if (mtd->searchcb == NULL) {
                         if (strstr(mti->name, mtd->ss) != NULL)                          if (strstr(mti->name, mtd->search) != NULL)
                                 return (mti);                                  return (mti);
                         continue;                          continue;
                 }                  }
                 if (mtd->searchcb(mtd->modedata, mti->itemdata, mtd->ss))                  if (mtd->searchcb(mtd->modedata, mti->itemdata, mtd->search))
                         return (mti);                          return (mti);
         }          }
         return (NULL);          return (NULL);
Line 627 
Line 639 
                 loop->expanded = 1;                  loop->expanded = 1;
                 loop = loop->parent;                  loop = loop->parent;
         }          }
         mode_tree_build(mtd);  
   
           mode_tree_build(mtd);
         mode_tree_set_current(mtd, tag);          mode_tree_set_current(mtd, tag);
         mode_tree_draw(mtd);          mode_tree_draw(mtd);
           mtd->wp->flags |= PANE_REDRAW;
 }  }
   
 static int  static int
Line 642 
Line 655 
         if (mtd->dead)          if (mtd->dead)
                 return (0);                  return (0);
   
         free(mtd->ss);          free(mtd->search);
         if (*s == '\0') {          if (s == NULL || *s == '\0') {
                 mtd->ss = NULL;                  mtd->search = NULL;
                 return (0);                  return (0);
         }          }
         mtd->ss = xstrdup(s);          mtd->search = xstrdup(s);
         mode_tree_search_set(mtd);          mode_tree_search_set(mtd);
   
         return (0);          return (0);
Line 659 
Line 672 
         mode_tree_remove_ref(data);          mode_tree_remove_ref(data);
 }  }
   
   static int
   mode_tree_filter_callback(__unused struct client *c, void *data, const char *s,
       __unused int done)
   {
           struct mode_tree_data   *mtd = data;
   
           if (mtd->dead)
                   return (0);
   
           if (mtd->filter != NULL)
                   free(mtd->filter);
           if (s == NULL || *s == '\0')
                   mtd->filter = NULL;
           else
                   mtd->filter = xstrdup(s);
   
           mode_tree_build(mtd);
           mode_tree_draw(mtd);
           mtd->wp->flags |= PANE_REDRAW;
   
           return (0);
   }
   
   static void
   mode_tree_filter_free(void *data)
   {
           mode_tree_remove_ref(data);
   }
   
 int  int
 mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key,  mode_tree_key(struct mode_tree_data *mtd, struct client *c, key_code *key,
     struct mouse_event *m)      struct mouse_event *m)
Line 811 
Line 853 
                 break;                  break;
         case 'n':          case 'n':
                 mode_tree_search_set(mtd);                  mode_tree_search_set(mtd);
                   break;
           case 'f':
                   mtd->references++;
                   status_prompt_set(c, "(filter) ", mtd->filter,
                       mode_tree_filter_callback, mode_tree_filter_free, mtd,
                       PROMPT_NOFORMAT);
                 break;                  break;
         }          }
         return (0);          return (0);

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