aboutsummaryrefslogtreecommitdiff
path: root/mode-tree.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2020-05-13 01:15:31 +0100
committerThomas Adam <thomas@xteddy.org>2020-05-13 01:15:31 +0100
commit9d44df9da95452d985f6e5937dd3c4311bf33548 (patch)
treef25a55a68c42ad5296fed0c4b87ea6a23c3afd75 /mode-tree.c
parent212cf53ea92acdc4fb752efd6ecd9fce99dccaec (diff)
parentba20e46bdc6d4624f54920c0efe753671c5184bb (diff)
downloadrtmux-9d44df9da95452d985f6e5937dd3c4311bf33548.tar.gz
rtmux-9d44df9da95452d985f6e5937dd3c4311bf33548.tar.bz2
rtmux-9d44df9da95452d985f6e5937dd3c4311bf33548.zip
Merge branch 'master' of github.com:tmux/tmux
Diffstat (limited to 'mode-tree.c')
-rw-r--r--mode-tree.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/mode-tree.c b/mode-tree.c
index 9ed2e102..131830d6 100644
--- a/mode-tree.c
+++ b/mode-tree.c
@@ -80,6 +80,7 @@ struct mode_tree_item {
int expanded;
int tagged;
+ int draw_as_parent;
struct mode_tree_list children;
TAILQ_ENTRY(mode_tree_item) entry;
@@ -248,6 +249,12 @@ mode_tree_get_current(struct mode_tree_data *mtd)
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
mode_tree_expand_current(struct mode_tree_data *mtd)
{
@@ -257,6 +264,15 @@ mode_tree_expand_current(struct mode_tree_data *mtd)
}
}
+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
mode_tree_get_tag(struct mode_tree_data *mtd, uint64_t tag, u_int *found)
{
@@ -512,7 +528,7 @@ mode_tree_add(struct mode_tree_data *mtd, struct mode_tree_item *parent,
struct mode_tree_item *mti, *saved;
log_debug("%s: %llu, %s %s", __func__, (unsigned long long)tag,
- name, text);
+ name, (text == NULL ? "" : text));
mti = xcalloc(1, sizeof *mti);
mti->parent = parent;
@@ -544,6 +560,12 @@ mode_tree_add(struct mode_tree_data *mtd, struct mode_tree_item *parent,
}
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)
{
struct mode_tree_item *parent = mti->parent;
@@ -683,6 +705,8 @@ mode_tree_draw(struct mode_tree_data *mtd)
line = &mtd->line_list[mtd->current];
mti = line->item;
+ if (mti->draw_as_parent)
+ mti = mti->parent;
screen_write_cursormove(&ctx, 0, h, 0);
screen_write_box(&ctx, w, sy - h);