mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		@@ -1049,7 +1049,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc)
 | 
			
		||||
	width = gc->data.width;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If this is a wide character and there is no room on the screen, for
 | 
			
		||||
	 * If this is a wide character and there is no room on the screen for
 | 
			
		||||
	 * the entire character, don't print it.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!(s->mode & MODE_WRAP) && (width > 1 &&
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								tmux.h
									
									
									
									
									
								
							@@ -862,11 +862,6 @@ struct window_pane {
 | 
			
		||||
TAILQ_HEAD(window_panes, window_pane);
 | 
			
		||||
RB_HEAD(window_pane_tree, window_pane);
 | 
			
		||||
 | 
			
		||||
#define WINDOW_PANE_PALETTE_HAS(wp, c)			\
 | 
			
		||||
	((wp) != NULL && (wp)->palette != NULL &&	\
 | 
			
		||||
	    ((c) < 0x100 || (c) & COLOUR_FLAG_256) &&	\
 | 
			
		||||
	    (wp)->palette[(c) & 0xff] != 0)
 | 
			
		||||
 | 
			
		||||
/* Window structure. */
 | 
			
		||||
struct window {
 | 
			
		||||
	u_int		 id;
 | 
			
		||||
@@ -2159,6 +2154,7 @@ void		 window_set_name(struct window *, const char *);
 | 
			
		||||
void		 window_remove_ref(struct window *);
 | 
			
		||||
void		 winlink_clear_flags(struct winlink *);
 | 
			
		||||
int		 winlink_shuffle_up(struct session *, struct winlink *);
 | 
			
		||||
int		 window_pane_get_palette(const struct window_pane *, int);
 | 
			
		||||
 | 
			
		||||
/* layout.c */
 | 
			
		||||
u_int		 layout_count_cells(struct layout_cell *);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								tty.c
									
									
									
									
									
								
							@@ -1609,11 +1609,12 @@ tty_check_fg(struct tty *tty, const struct window_pane *wp,
 | 
			
		||||
{
 | 
			
		||||
	u_char	r, g, b;
 | 
			
		||||
	u_int	colours;
 | 
			
		||||
	int	c;
 | 
			
		||||
 | 
			
		||||
	/* Perform substitution if this pane has a palette */
 | 
			
		||||
	if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
 | 
			
		||||
	    gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
 | 
			
		||||
		gc->fg = wp->palette[gc->fg & 0xff];
 | 
			
		||||
	    (c = window_pane_get_palette(wp, gc->fg)) != -1)
 | 
			
		||||
		gc->fg = c;
 | 
			
		||||
 | 
			
		||||
	/* Is this a 24-bit colour? */
 | 
			
		||||
	if (gc->fg & COLOUR_FLAG_RGB) {
 | 
			
		||||
@@ -1624,13 +1625,17 @@ tty_check_fg(struct tty *tty, const struct window_pane *wp,
 | 
			
		||||
		} else
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
	colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
			
		||||
 | 
			
		||||
	/* How many colours does this terminal have? */
 | 
			
		||||
	if ((tty->term->flags|tty->term_flags) & TERM_256COLOURS)
 | 
			
		||||
		colours = 256;
 | 
			
		||||
	else
 | 
			
		||||
		colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
			
		||||
 | 
			
		||||
	/* Is this a 256-colour colour? */
 | 
			
		||||
	if (gc->fg & COLOUR_FLAG_256) {
 | 
			
		||||
		/* And not a 256 colour mode? */
 | 
			
		||||
		if (!(tty->term->flags & TERM_256COLOURS) &&
 | 
			
		||||
		    !(tty->term_flags & TERM_256COLOURS)) {
 | 
			
		||||
		if (colours != 256) {
 | 
			
		||||
			gc->fg = colour_256to16(gc->fg);
 | 
			
		||||
			if (gc->fg & 8) {
 | 
			
		||||
				gc->fg &= 7;
 | 
			
		||||
@@ -1657,11 +1662,12 @@ tty_check_bg(struct tty *tty, const struct window_pane *wp,
 | 
			
		||||
{
 | 
			
		||||
	u_char	r, g, b;
 | 
			
		||||
	u_int	colours;
 | 
			
		||||
	int	c;
 | 
			
		||||
 | 
			
		||||
	/* Perform substitution if this pane has a palette */
 | 
			
		||||
	if ((~gc->flags & GRID_FLAG_NOPALETTE) &&
 | 
			
		||||
	    gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
 | 
			
		||||
		gc->bg = wp->palette[gc->bg & 0xff];
 | 
			
		||||
	    (c = window_pane_get_palette(wp, gc->bg)) != -1)
 | 
			
		||||
		gc->bg = c;
 | 
			
		||||
 | 
			
		||||
	/* Is this a 24-bit colour? */
 | 
			
		||||
	if (gc->bg & COLOUR_FLAG_RGB) {
 | 
			
		||||
@@ -1672,7 +1678,12 @@ tty_check_bg(struct tty *tty, const struct window_pane *wp,
 | 
			
		||||
		} else
 | 
			
		||||
			return;
 | 
			
		||||
	}
 | 
			
		||||
	colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
			
		||||
 | 
			
		||||
	/* How many colours does this terminal have? */
 | 
			
		||||
	if ((tty->term->flags|tty->term_flags) & TERM_256COLOURS)
 | 
			
		||||
		colours = 256;
 | 
			
		||||
	else
 | 
			
		||||
		colours = tty_term_number(tty->term, TTYC_COLORS);
 | 
			
		||||
 | 
			
		||||
	/* Is this a 256-colour colour? */
 | 
			
		||||
	if (gc->bg & COLOUR_FLAG_256) {
 | 
			
		||||
@@ -1681,8 +1692,7 @@ tty_check_bg(struct tty *tty, const struct window_pane *wp,
 | 
			
		||||
		 * palette. Bold background doesn't exist portably, so just
 | 
			
		||||
		 * discard the bold bit if set.
 | 
			
		||||
		 */
 | 
			
		||||
		if (!(tty->term->flags & TERM_256COLOURS) &&
 | 
			
		||||
		    !(tty->term_flags & TERM_256COLOURS)) {
 | 
			
		||||
		if (colours != 256) {
 | 
			
		||||
			gc->bg = colour_256to16(gc->bg);
 | 
			
		||||
			if (gc->bg & 8) {
 | 
			
		||||
				gc->bg &= 7;
 | 
			
		||||
@@ -1817,6 +1827,7 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
 | 
			
		||||
	struct window		*w = wp->window;
 | 
			
		||||
	struct options		*oo = w->options;
 | 
			
		||||
	const struct grid_cell	*agc, *pgc, *wgc;
 | 
			
		||||
	int			 c;
 | 
			
		||||
 | 
			
		||||
	if (w->flags & WINDOW_STYLECHANGED) {
 | 
			
		||||
		w->flags &= ~WINDOW_STYLECHANGED;
 | 
			
		||||
@@ -1838,8 +1849,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
 | 
			
		||||
		else
 | 
			
		||||
			gc->fg = wgc->fg;
 | 
			
		||||
 | 
			
		||||
		if (gc->fg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->fg))
 | 
			
		||||
			gc->fg = wp->palette[gc->fg & 0xff];
 | 
			
		||||
		if (gc->fg != 8 &&
 | 
			
		||||
		    (c = window_pane_get_palette(wp, gc->fg)) != -1)
 | 
			
		||||
			gc->fg = c;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (gc->bg == 8) {
 | 
			
		||||
@@ -1850,8 +1862,9 @@ tty_default_colours(struct grid_cell *gc, const struct window_pane *wp)
 | 
			
		||||
		else
 | 
			
		||||
			gc->bg = wgc->bg;
 | 
			
		||||
 | 
			
		||||
		if (gc->bg != 8 && WINDOW_PANE_PALETTE_HAS(wp, gc->bg))
 | 
			
		||||
			gc->bg = wp->palette[gc->bg & 0xff];
 | 
			
		||||
		if (gc->bg != 8 &&
 | 
			
		||||
		    (c = window_pane_get_palette(wp, gc->bg)) != -1)
 | 
			
		||||
			gc->bg = c;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								window.c
									
									
									
									
									
								
							@@ -464,12 +464,12 @@ window_redraw_active_switch(struct window *w, struct window_pane *wp)
 | 
			
		||||
	 * If the now active or inactive pane do not have a custom style or if
 | 
			
		||||
	 * the palette is different, they need to be redrawn.
 | 
			
		||||
	 */
 | 
			
		||||
	if (WINDOW_PANE_PALETTE_HAS(w->active, w->active->colgc.fg) ||
 | 
			
		||||
	    WINDOW_PANE_PALETTE_HAS(w->active, w->active->colgc.bg) ||
 | 
			
		||||
	if (window_pane_get_palette(w->active, w->active->colgc.fg) != -1 ||
 | 
			
		||||
	    window_pane_get_palette(w->active, w->active->colgc.bg) != -1 ||
 | 
			
		||||
	    style_equal(&grid_default_cell, &w->active->colgc))
 | 
			
		||||
		w->active->flags |= PANE_REDRAW;
 | 
			
		||||
	if (WINDOW_PANE_PALETTE_HAS(wp, wp->colgc.fg) ||
 | 
			
		||||
	    WINDOW_PANE_PALETTE_HAS(wp, wp->colgc.bg) ||
 | 
			
		||||
	if (window_pane_get_palette(wp, wp->colgc.fg) != -1 ||
 | 
			
		||||
	    window_pane_get_palette(wp, wp->colgc.bg) != -1 ||
 | 
			
		||||
	    style_equal(&grid_default_cell, &wp->colgc))
 | 
			
		||||
		wp->flags |= PANE_REDRAW;
 | 
			
		||||
}
 | 
			
		||||
@@ -1532,3 +1532,23 @@ winlink_shuffle_up(struct session *s, struct winlink *wl)
 | 
			
		||||
 | 
			
		||||
	return (idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
window_pane_get_palette(const struct window_pane *wp, int c)
 | 
			
		||||
{
 | 
			
		||||
	int	new;
 | 
			
		||||
 | 
			
		||||
	if (wp == NULL || wp->palette == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
 | 
			
		||||
	new = -1;
 | 
			
		||||
	if (c < 8)
 | 
			
		||||
		new = wp->palette[c];
 | 
			
		||||
	else if (c >= 90 && c <= 97)
 | 
			
		||||
		new = wp->palette[8 + c - 90];
 | 
			
		||||
	else if (c & COLOUR_FLAG_256)
 | 
			
		||||
		new = wp->palette[c & ~COLOUR_FLAG_256];
 | 
			
		||||
	if (new == 0)
 | 
			
		||||
		return (-1);
 | 
			
		||||
	return (new);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user