mirror of
https://github.com/tmux/tmux.git
synced 2025-09-01 20:57:00 +00:00
Add support for overlay popup boxes to show text or output temporarily
above the normal layout. These work similarly to menus and are created with the display-popup command.
This commit is contained in:
19
tty.c
19
tty.c
@ -1250,6 +1250,16 @@ tty_check_codeset(struct tty *tty, const struct grid_cell *gc)
|
||||
return (&new);
|
||||
}
|
||||
|
||||
static int
|
||||
tty_check_overlay(struct tty *tty, u_int px, u_int py)
|
||||
{
|
||||
struct client *c = tty->client;
|
||||
|
||||
if (c->overlay_check == NULL)
|
||||
return (1);
|
||||
return (c->overlay_check(c, px, py));
|
||||
}
|
||||
|
||||
void
|
||||
tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
||||
u_int px, u_int py, u_int nx, u_int atx, u_int aty)
|
||||
@ -1329,7 +1339,8 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
||||
grid_view_get_cell(gd, px + i, py, &gc);
|
||||
gcp = tty_check_codeset(tty, &gc);
|
||||
if (len != 0 &&
|
||||
((gcp->attr & GRID_ATTR_CHARSET) ||
|
||||
(!tty_check_overlay(tty, atx + ux + width, aty) ||
|
||||
(gcp->attr & GRID_ATTR_CHARSET) ||
|
||||
gcp->flags != last.flags ||
|
||||
gcp->attr != last.attr ||
|
||||
gcp->fg != last.fg ||
|
||||
@ -1358,7 +1369,9 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
||||
screen_select_cell(s, &last, gcp);
|
||||
else
|
||||
memcpy(&last, gcp, sizeof last);
|
||||
if (ux + gcp->data.width > nx) {
|
||||
if (!tty_check_overlay(tty, atx + ux, aty))
|
||||
ux += gcp->data.width;
|
||||
else if (ux + gcp->data.width > nx) {
|
||||
tty_attributes(tty, &last, wp);
|
||||
tty_cursor(tty, atx + ux, aty);
|
||||
for (j = 0; j < gcp->data.width; j++) {
|
||||
@ -1372,7 +1385,7 @@ tty_draw_line(struct tty *tty, struct window_pane *wp, struct screen *s,
|
||||
tty_cursor(tty, atx + ux, aty);
|
||||
for (j = 0; j < gcp->data.size; j++)
|
||||
tty_putc(tty, gcp->data.data[j]);
|
||||
ux += gc.data.width;
|
||||
ux += gcp->data.width;
|
||||
} else {
|
||||
memcpy(buf + len, gcp->data.data, gcp->data.size);
|
||||
len += gcp->data.size;
|
||||
|
Reference in New Issue
Block a user