summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/colour.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2009-09-10 17:16:25 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2009-09-10 17:16:25 +0000
commit2f7e182abd2f1598516d059288987813c8f7efb2 (patch)
tree069442bf7fb5949abf96365a80646e425f10233d /usr.bin/tmux/colour.c
parentf28e0674b7722428f7f9626a0d45444001b964d8 (diff)
Permit options such as status-bg to be configured using the entire 256 colour
palette by setting "colour0" to "colour255".
Diffstat (limited to 'usr.bin/tmux/colour.c')
-rw-r--r--usr.bin/tmux/colour.c43
1 files changed, 41 insertions, 2 deletions
diff --git a/usr.bin/tmux/colour.c b/usr.bin/tmux/colour.c
index 5b13db98760..288b35e3185 100644
--- a/usr.bin/tmux/colour.c
+++ b/usr.bin/tmux/colour.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: colour.c,v 1.1 2009/06/01 22:58:49 nicm Exp $ */
+/* $OpenBSD: colour.c,v 1.2 2009/09/10 17:16:24 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -18,13 +18,42 @@
#include <sys/types.h>
+#include <stdlib.h>
#include <string.h>
#include "tmux.h"
+/*
+ * 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(u_char c)
+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'))