[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.45 and 1.46

version 1.45, 2020/05/16 15:54:20 version 1.46, 2020/05/16 16:02:24
Line 45 
Line 45 
         mode_tree_draw_cb         drawcb;          mode_tree_draw_cb         drawcb;
         mode_tree_search_cb       searchcb;          mode_tree_search_cb       searchcb;
         mode_tree_menu_cb         menucb;          mode_tree_menu_cb         menucb;
           mode_tree_height_cb       heightcb;
   
         struct mode_tree_list     children;          struct mode_tree_list     children;
         struct mode_tree_list     saved;          struct mode_tree_list     saved;
Line 79 
Line 80 
   
         int                              expanded;          int                              expanded;
         int                              tagged;          int                              tagged;
           int                              draw_as_parent;
   
         struct mode_tree_list            children;          struct mode_tree_list            children;
         TAILQ_ENTRY(mode_tree_item)      entry;          TAILQ_ENTRY(mode_tree_item)      entry;
Line 210 
Line 212 
         }          }
 }  }
   
 static void  void
 mode_tree_up(struct mode_tree_data *mtd, int wrap)  mode_tree_up(struct mode_tree_data *mtd, int wrap)
 {  {
         if (mtd->current == 0) {          if (mtd->current == 0) {
Line 247 
Line 249 
         return (mtd->line_list[mtd->current].item->itemdata);          return (mtd->line_list[mtd->current].item->itemdata);
 }  }
   
   const char *
   mode_tree_get_current_name(struct mode_tree_data *mtd)
   {
           return (mtd->line_list[mtd->current].item->name);
   }
   
 void  void
 mode_tree_expand_current(struct mode_tree_data *mtd)  mode_tree_expand_current(struct mode_tree_data *mtd)
 {  {
Line 256 
Line 264 
         }          }
 }  }
   
   void
   mode_tree_collapse_current(struct mode_tree_data *mtd)
   {
           if (mtd->line_list[mtd->current].item->expanded) {
                   mtd->line_list[mtd->current].item->expanded = 0;
                   mode_tree_build(mtd);
           }
   }
   
 static int  static int
 mode_tree_get_tag(struct mode_tree_data *mtd, uint64_t tag, u_int *found)  mode_tree_get_tag(struct mode_tree_data *mtd, uint64_t tag, u_int *found)
 {  {
Line 343 
Line 360 
 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,
     mode_tree_build_cb buildcb, mode_tree_draw_cb drawcb,      mode_tree_build_cb buildcb, mode_tree_draw_cb drawcb,
     mode_tree_search_cb searchcb, mode_tree_menu_cb menucb, void *modedata,      mode_tree_search_cb searchcb, mode_tree_menu_cb menucb,
       mode_tree_height_cb heightcb, void *modedata,
     const struct menu_item *menu, const char **sort_list, u_int sort_size,      const struct menu_item *menu, const char **sort_list, u_int sort_size,
     struct screen **s)      struct screen **s)
 {  {
Line 381 
Line 399 
         mtd->drawcb = drawcb;          mtd->drawcb = drawcb;
         mtd->searchcb = searchcb;          mtd->searchcb = searchcb;
         mtd->menucb = menucb;          mtd->menucb = menucb;
           mtd->heightcb = heightcb;
   
         TAILQ_INIT(&mtd->children);          TAILQ_INIT(&mtd->children);
   
Line 404 
Line 423 
                 mtd->zoomed = -1;                  mtd->zoomed = -1;
 }  }
   
   static void
   mode_tree_set_height(struct mode_tree_data *mtd)
   {
           struct screen   *s = &mtd->screen;
           u_int            height;
   
           if (mtd->heightcb != NULL) {
                   height = mtd->heightcb(mtd, screen_size_y(s));
                   if (height < screen_size_y(s))
                       mtd->height = screen_size_y(s) - height;
           } else {
                   mtd->height = (screen_size_y(s) / 3) * 2;
                   if (mtd->height > mtd->line_size)
                           mtd->height = screen_size_y(s) / 2;
           }
           if (mtd->height < 10)
                   mtd->height = screen_size_y(s);
           if (screen_size_y(s) - mtd->height < 2)
                   mtd->height = screen_size_y(s);
   }
   
 void  void
 mode_tree_build(struct mode_tree_data *mtd)  mode_tree_build(struct mode_tree_data *mtd)
 {  {
Line 434 
Line 474 
         mode_tree_set_current(mtd, tag);          mode_tree_set_current(mtd, tag);
   
         mtd->width = screen_size_x(s);          mtd->width = screen_size_x(s);
         if (mtd->preview) {          if (mtd->preview)
                 mtd->height = (screen_size_y(s) / 3) * 2;                  mode_tree_set_height(mtd);
                 if (mtd->height > mtd->line_size)          else
                         mtd->height = screen_size_y(s) / 2;  
                 if (mtd->height < 10)  
                         mtd->height = screen_size_y(s);  
                 if (screen_size_y(s) - mtd->height < 2)  
                         mtd->height = screen_size_y(s);  
         } else  
                 mtd->height = screen_size_y(s);                  mtd->height = screen_size_y(s);
         mode_tree_check_selected(mtd);          mode_tree_check_selected(mtd);
 }  }
Line 494 
Line 528 
         struct mode_tree_item   *mti, *saved;          struct mode_tree_item   *mti, *saved;
   
         log_debug("%s: %llu, %s %s", __func__, (unsigned long long)tag,          log_debug("%s: %llu, %s %s", __func__, (unsigned long long)tag,
             name, text);              name, (text == NULL ? "" : text));
   
         mti = xcalloc(1, sizeof *mti);          mti = xcalloc(1, sizeof *mti);
         mti->parent = parent;          mti->parent = parent;
Line 502 
Line 536 
   
         mti->tag = tag;          mti->tag = tag;
         mti->name = xstrdup(name);          mti->name = xstrdup(name);
         mti->text = xstrdup(text);          if (text != NULL)
                   mti->text = xstrdup(text);
   
         saved = mode_tree_find_item(&mtd->saved, tag);          saved = mode_tree_find_item(&mtd->saved, tag);
         if (saved != NULL) {          if (saved != NULL) {
Line 525 
Line 560 
 }  }
   
 void  void
   mode_tree_draw_as_parent(struct mode_tree_item *mti)
   {
           mti->draw_as_parent = 1;
   }
   
   void
 mode_tree_remove(struct mode_tree_data *mtd, struct mode_tree_item *mti)  mode_tree_remove(struct mode_tree_data *mtd, struct mode_tree_item *mti)
 {  {
         struct mode_tree_item   *parent = mti->parent;          struct mode_tree_item   *parent = mti->parent;
Line 621 
Line 662 
                         tag = "*";                          tag = "*";
                 else                  else
                         tag = "";                          tag = "";
                 xasprintf(&text, "%-*s%s%s%s: ", keylen, key, start, mti->name,                  xasprintf(&text, "%-*s%s%s%s%s", keylen, key, start, mti->name,
                     tag);                      tag, (mti->text != NULL) ? ": " : "" );
                 width = utf8_cstrwidth(text);                  width = utf8_cstrwidth(text);
                 if (width > w)                  if (width > w)
                         width = w;                          width = w;
Line 636 
Line 677 
                 if (i != mtd->current) {                  if (i != mtd->current) {
                         screen_write_clearendofline(&ctx, 8);                          screen_write_clearendofline(&ctx, 8);
                         screen_write_nputs(&ctx, w, &gc0, "%s", text);                          screen_write_nputs(&ctx, w, &gc0, "%s", text);
                         format_draw(&ctx, &gc0, w - width, mti->text, NULL);                          if (mti->text != NULL) {
                                   format_draw(&ctx, &gc0, w - width, mti->text,
                                       NULL);
                           }
                 } else {                  } else {
                         screen_write_clearendofline(&ctx, gc.bg);                          screen_write_clearendofline(&ctx, gc.bg);
                         screen_write_nputs(&ctx, w, &gc, "%s", text);                          screen_write_nputs(&ctx, w, &gc, "%s", text);
                         format_draw(&ctx, &gc, w - width, mti->text, NULL);                          if (mti->text != NULL) {
                                   format_draw(&ctx, &gc, w - width, mti->text,
                                       NULL);
                           }
                 }                  }
                 free(text);                  free(text);
   
Line 658 
Line 705 
   
         line = &mtd->line_list[mtd->current];          line = &mtd->line_list[mtd->current];
         mti = line->item;          mti = line->item;
           if (mti->draw_as_parent)
                   mti = mti->parent;
   
         screen_write_cursormove(&ctx, 0, h, 0);          screen_write_cursormove(&ctx, 0, h, 0);
         screen_write_box(&ctx, w, sy - h);          screen_write_box(&ctx, w, sy - h);
   
         xasprintf(&text, " %s (sort: %s%s)", mti->name,          if (mtd->sort_list != NULL) {
             mtd->sort_list[mtd->sort_crit.field],                  xasprintf(&text, " %s (sort: %s%s)", mti->name,
             mtd->sort_crit.reversed ? ", reversed" : "");                      mtd->sort_list[mtd->sort_crit.field],
                       mtd->sort_crit.reversed ? ", reversed" : "");
           } else
                   xasprintf(&text, " %s", mti->name);
         if (w - 2 >= strlen(text)) {          if (w - 2 >= strlen(text)) {
                 screen_write_cursormove(&ctx, 1, h, 0);                  screen_write_cursormove(&ctx, 1, h, 0);
                 screen_write_puts(&ctx, &gc0, "%s", text);                  screen_write_puts(&ctx, &gc0, "%s", text);
Line 680 
Line 732 
                         else                          else
                                 screen_write_puts(&ctx, &gc0, "active");                                  screen_write_puts(&ctx, &gc0, "active");
                         screen_write_puts(&ctx, &gc0, ") ");                          screen_write_puts(&ctx, &gc0, ") ");
                 }                  } else
                           screen_write_puts(&ctx, &gc0, " ");
         }          }
         free(text);          free(text);
   
Line 1027 
Line 1080 
                 break;                  break;
         case 'O':          case 'O':
                 mtd->sort_crit.field++;                  mtd->sort_crit.field++;
                 if (mtd->sort_crit.field == mtd->sort_size)                  if (mtd->sort_crit.field >= mtd->sort_size)
                         mtd->sort_crit.field = 0;                          mtd->sort_crit.field = 0;
                 mode_tree_build(mtd);                  mode_tree_build(mtd);
                 break;                  break;

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.46