mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Permit options such as status-bg to be configured using the entire 256 colour
palette by setting "colour0" to "colour255".
This commit is contained in:
		
							
								
								
									
										43
									
								
								colour.c
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								colour.c
									
									
									
									
									
								
							@@ -18,13 +18,42 @@
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
colour_tostring(u_char c)
 | 
			
		||||
/*
 | 
			
		||||
 * Colour to string conversion functions. Bit 8 of the colour means it is one
 | 
			
		||||
 * of the 256 colour palette.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
colour_set_fg(struct grid_cell *gc, int c)
 | 
			
		||||
{
 | 
			
		||||
	if (c & 0x100)
 | 
			
		||||
		gc->flags |= GRID_FLAG_FG256;
 | 
			
		||||
	gc->fg = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
colour_set_bg(struct grid_cell *gc, int c)
 | 
			
		||||
{
 | 
			
		||||
	if (c & 0x100)
 | 
			
		||||
		gc->flags |= GRID_FLAG_BG256;
 | 
			
		||||
	gc->bg = c;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *
 | 
			
		||||
colour_tostring(int c)
 | 
			
		||||
{
 | 
			
		||||
	static char	s[32];
 | 
			
		||||
 | 
			
		||||
	if (c & 0x100) {
 | 
			
		||||
		xsnprintf(s, sizeof s, "colour%u", c & ~0x100);
 | 
			
		||||
		return (s);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch (c) {
 | 
			
		||||
	case 0:
 | 
			
		||||
		return ("black");
 | 
			
		||||
@@ -51,6 +80,16 @@ colour_tostring(u_char c)
 | 
			
		||||
int
 | 
			
		||||
colour_fromstring(const char *s)
 | 
			
		||||
{
 | 
			
		||||
	const char	*errstr;
 | 
			
		||||
	int		 n;
 | 
			
		||||
 | 
			
		||||
	if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
 | 
			
		||||
		n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
 | 
			
		||||
		if (errstr != NULL)
 | 
			
		||||
			return (-1);
 | 
			
		||||
		return (n | 0x100);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (strcasecmp(s, "black") == 0 || (s[0] == '0' && s[1] == '\0'))
 | 
			
		||||
		return (0);
 | 
			
		||||
	if (strcasecmp(s, "red") == 0 || (s[0] == '1' && s[1] == '\0'))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user