mirror of
https://github.com/tmux/tmux.git
synced 2026-10-14 15:04:50 +00:00
Convert display-panes away from an overlay and into a mode. This is
another step on the road of getting rid of overlays altogether (they are full of special cases; popups and menus are to go also eventually). We lose some of the styling of borders but gain the ability to run display-panes in another pane (perhaps not hugely useful but one never knows). The -b flag goes away as no longer useful.
This commit is contained in:
31
window.c
31
window.c
@@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: window.c,v 1.361 2026/07/13 13:01:14 nicm Exp $ */
|
||||
/* $OpenBSD: window.c,v 1.362 2026/07/14 17:17:18 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||
@@ -1496,18 +1496,21 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int sy)
|
||||
|
||||
int
|
||||
window_pane_set_mode(struct window_pane *wp, struct window_pane *swp,
|
||||
const struct window_mode *mode, struct cmd_find_state *fs,
|
||||
struct args *args)
|
||||
const struct window_mode *mode, struct cmdq_item *item,
|
||||
struct cmd_find_state *fs, struct args *args)
|
||||
{
|
||||
struct window_mode_entry *wme;
|
||||
struct window *w = wp->window;
|
||||
const char *name = mode->name, *p = NULL;
|
||||
const char *name = mode->name, *oname = NULL;
|
||||
|
||||
if (!TAILQ_EMPTY(&wp->modes)) {
|
||||
if (TAILQ_FIRST(&wp->modes)->mode == mode)
|
||||
return (1);
|
||||
p = TAILQ_FIRST(&wp->modes)->mode->name;
|
||||
if (TAILQ_FIRST(&wp->modes)->mode->flags & WINDOW_MODE_NO_STACK)
|
||||
window_pane_reset_mode(wp);
|
||||
}
|
||||
if (!TAILQ_EMPTY(&wp->modes))
|
||||
oname = TAILQ_FIRST(&wp->modes)->mode->name;
|
||||
|
||||
TAILQ_FOREACH(wme, &wp->modes, entry) {
|
||||
if (wme->mode == mode)
|
||||
@@ -1523,7 +1526,12 @@ window_pane_set_mode(struct window_pane *wp, struct window_pane *swp,
|
||||
wme->mode = mode;
|
||||
wme->prefix = 1;
|
||||
TAILQ_INSERT_HEAD(&wp->modes, wme, entry);
|
||||
wme->screen = wme->mode->init(wme, fs, args);
|
||||
wme->screen = wme->mode->init(wme, item, fs, args);
|
||||
if (wme->screen == NULL) {
|
||||
TAILQ_REMOVE(&wp->modes, wme, entry);
|
||||
free(wme);
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
wme->kill = args != NULL ? args_has(args, 'k') : 0;
|
||||
wp->screen = wme->screen;
|
||||
@@ -1534,8 +1542,8 @@ window_pane_set_mode(struct window_pane *wp, struct window_pane *swp,
|
||||
server_redraw_window_borders(wp->window);
|
||||
server_status_window(wp->window);
|
||||
|
||||
window_fire_pane_mode_changed("pane-mode-entered", wp, p, name, 1);
|
||||
window_fire_pane_mode_changed("pane-mode-changed", wp, p, name, 1);
|
||||
window_fire_pane_mode_changed("pane-mode-entered", wp, oname, name, 1);
|
||||
window_fire_pane_mode_changed("pane-mode-changed", wp, oname, name, 1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -2684,8 +2692,15 @@ window_get_pane_status(struct window *w)
|
||||
int
|
||||
window_pane_get_pane_status(struct window_pane *wp)
|
||||
{
|
||||
struct window_mode_entry *wme;
|
||||
int status;
|
||||
|
||||
wme = TAILQ_FIRST(&wp->modes);
|
||||
if (wme != NULL &&
|
||||
(wme->mode->flags & WINDOW_MODE_HIDE_PANE_STATUS) &&
|
||||
(wp->flags & PANE_ZOOMED))
|
||||
return (PANE_STATUS_OFF);
|
||||
|
||||
if (!window_pane_is_floating(wp))
|
||||
return (window_get_pane_status(wp->window));
|
||||
if (window_pane_get_pane_lines(wp) == PANE_LINES_NONE)
|
||||
|
||||
Reference in New Issue
Block a user