The attached patch adds support for the OSC 11 and OSC 12 escape
sequences. These are used by many theme scripts (e.g
https://github.com/lemnos/theme.sh) and implemented by most other
terminal emulators. This is my first patch to a suckless project. Any
feedback would be appreciated :).

Regards,
Raheman
From 07177328951a563a7407cb1921500791b92f37ec Mon Sep 17 00:00:00 2001
From: Raheman Vaiya <r.va...@gmail.com>
Date: Sun, 10 Jan 2021 02:49:50 -0500
Subject: [PATCH] Implement OSC 11/12 for setting background and foreground
 colours.

---
 config.def.h |  7 +++++--
 st.c         | 20 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/config.def.h b/config.def.h
index 6f05dce..fcdc6db 100644
--- a/config.def.h
+++ b/config.def.h
@@ -120,6 +120,8 @@ static const char *colorname[] = {
 	/* more colors can be added after 255 to use with DefaultXX */
 	"#cccccc",
 	"#555555",
+	"#000000",
+	"#ffffff",
 };
 
 
@@ -127,8 +129,9 @@ static const char *colorname[] = {
  * Default colors (colorname index)
  * foreground, background, cursor, reverse cursor
  */
-unsigned int defaultfg = 7;
-unsigned int defaultbg = 0;
+
+unsigned int defaultbg = 258;
+unsigned int defaultfg = 259;
 static unsigned int defaultcs = 256;
 static unsigned int defaultrcs = 257;
 
diff --git a/st.c b/st.c
index abbbe4b..c0b8675 100644
--- a/st.c
+++ b/st.c
@@ -1877,6 +1877,26 @@ strhandle(void)
 				}
 			}
 			return;
+		case 11: /* set background color */
+			if (narg < 2)
+				break;
+
+			p = strescseq.args[1];
+			if (xsetcolorname(defaultbg, p))
+				fprintf(stderr, "erresc: invalid background color %d\n", p);
+			else
+				redraw();
+			break;
+		case 12: /* set foreground color */
+			if (narg < 2)
+				break;
+
+			p = strescseq.args[1];
+			if (xsetcolorname(defaultfg, p))
+				fprintf(stderr, "erresc: invalid foreground color %d\n", p);
+			else
+				redraw();
+			break;
 		case 4: /* color set */
 			if (narg < 3)
 				break;
-- 
2.20.1

Reply via email to