summaryrefslogtreecommitdiffstats
path: root/mode-tree.c
diff options
context:
space:
mode:
authornicm <nicm>2018-02-28 08:55:44 +0000
committernicm <nicm>2018-02-28 08:55:44 +0000
commit508e2f0b3aaf2db9b692863738e7ca75765fc70c (patch)
tree4c956b3d1a1b43d9484637f4103dae036c1f1fe2 /mode-tree.c
parent4d72b8fff7dfc170268af5a4c5323a8d9b815f74 (diff)
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.c19
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);