diff options
author | nicm <nicm> | 2018-02-28 08:55:44 +0000 |
---|---|---|
committer | nicm <nicm> | 2018-02-28 08:55:44 +0000 |
commit | 508e2f0b3aaf2db9b692863738e7ca75765fc70c (patch) | |
tree | 4c956b3d1a1b43d9484637f4103dae036c1f1fe2 /mode-tree.c | |
parent | 4d72b8fff7dfc170268af5a4c5323a8d9b815f74 (diff) | |
download | rtmux-508e2f0b3aaf2db9b692863738e7ca75765fc70c.tar.gz rtmux-508e2f0b3aaf2db9b692863738e7ca75765fc70c.tar.bz2 rtmux-508e2f0b3aaf2db9b692863738e7ca75765fc70c.zip |
Add -Z flag to choose-tree, choose-client, choose-buffer to
automatically zoom the pane when the mode is entered and unzoom when it
exits, assuming the pane is not already zoomed. Add -Z to the default
key bindings.
Diffstat (limited to 'mode-tree.c')
-rw-r--r-- | mode-tree.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/mode-tree.c b/mode-tree.c index cbef4f6a..05ec492d 100644 --- a/mode-tree.c +++ b/mode-tree.c @@ -31,6 +31,7 @@ TAILQ_HEAD(mode_tree_list, mode_tree_item); struct mode_tree_data { int dead; u_int references; + int zoomed; struct window_pane *wp; void *modedata; @@ -344,6 +345,19 @@ mode_tree_start(struct window_pane *wp, struct args *args, } void +mode_tree_zoom(struct mode_tree_data *mtd, struct args *args) +{ + struct window_pane *wp = mtd->wp; + + if (args_has(args, 'Z')) { + mtd->zoomed = (wp->window->flags & WINDOW_ZOOMED); + if (!mtd->zoomed && window_zoom(wp) == 0) + server_redraw_window(wp->window); + } else + mtd->zoomed = -1; +} + +void mode_tree_build(struct mode_tree_data *mtd) { struct screen *s = &mtd->screen; @@ -394,6 +408,11 @@ mode_tree_remove_ref(struct mode_tree_data *mtd) void mode_tree_free(struct mode_tree_data *mtd) { + struct window_pane *wp = mtd->wp; + + if (mtd->zoomed == 0) + server_unzoom_window(wp->window); + mode_tree_free_items(&mtd->children); mode_tree_clear_lines(mtd); screen_free(&mtd->screen); |