tapplied Devin J Pohly's st color info patches, thanks Devin! - st - [fork] cus… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 10e49a0505a250fc78c41842d93eb2a0abaf4c93 | |
parent 9e8f5f1348e3a38d5c0d90bddcf40c9c03caa098 | |
Author: Anselm R Garbe <[email protected]> | |
Date: Sat, 24 Jul 2010 12:09:14 +0100 | |
applied Devin J Pohly's st color info patches, thanks Devin! | |
Diffstat: | |
M Makefile | 1 + | |
M config.h | 22 +++++++++++++++------- | |
M st.c | 80 +++++++++++++++++++++++++----… | |
M st.info | 12 ++++++------ | |
4 files changed, 88 insertions(+), 27 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
t@@ -42,6 +42,7 @@ install: all | |
@cp -f st ${DESTDIR}${PREFIX}/bin | |
@chmod 755 ${DESTDIR}${PREFIX}/bin/st | |
@tic st.info | |
+ @tic st-256color.info | |
uninstall: | |
@echo removing executable file from ${DESTDIR}${PREFIX}/bin | |
diff --git a/config.h b/config.h | |
t@@ -7,13 +7,21 @@ | |
/* Terminal colors */ | |
static const char *colorname[] = { | |
"black", | |
- "red", | |
- "green", | |
- "yellow", | |
- "blue", | |
- "magenta", | |
- "cyan", | |
- "white", | |
+ "#CC0000", | |
+ "#4E9A06", | |
+ "#C4A000", | |
+ "#3465A4", | |
+ "#75507B", | |
+ "#06989A", | |
+ "#888a85", | |
+ "#555753", | |
+ "#EF2929", | |
+ "#8AE234", | |
+ "#FCE94F", | |
+ "#729FCF", | |
+ "#AD7FA8", | |
+ "#34E2E2", | |
+ "#EEEEEC" | |
}; | |
/* Default colors (colorname index) */ | |
diff --git a/st.c b/st.c | |
t@@ -20,7 +20,7 @@ | |
#include <X11/keysym.h> | |
#include <X11/Xutil.h> | |
-#define TNAME "xterm" | |
+#define TNAME "st-256color" | |
/* Arbitrary sizes */ | |
#define ESC_TITLE_SIZ 256 | |
t@@ -111,7 +111,7 @@ typedef struct { | |
/* Drawing Context */ | |
typedef struct { | |
- unsigned long col[LEN(colorname)]; | |
+ unsigned long col[256]; | |
XFontStruct* font; | |
XFontStruct* bfont; | |
GC gc; | |
t@@ -154,7 +154,6 @@ static void ttyread(void); | |
static void ttyresize(int, int); | |
static void ttywrite(const char *, size_t); | |
-static unsigned long xgetcol(const char *); | |
static void xclear(int, int, int, int); | |
static void xcursor(int); | |
static void xinit(void); | |
t@@ -593,9 +592,31 @@ tsetattr(int *attr, int l) { | |
case 27: | |
term.c.attr.mode &= ~ATTR_REVERSE; | |
break; | |
+ case 38: | |
+ if (i + 2 < l && attr[i + 1] == 5) { | |
+ i += 2; | |
+ if (BETWEEN(attr[i], 0, 255)) | |
+ term.c.attr.fg = attr[i]; | |
+ else | |
+ fprintf(stderr, "erresc: bad fgcolor %… | |
+ } | |
+ else | |
+ fprintf(stderr, "erresc: gfx attr %d unknown\n… | |
+ break; | |
case 39: | |
term.c.attr.fg = DefaultFG; | |
break; | |
+ case 48: | |
+ if (i + 2 < l && attr[i + 1] == 5) { | |
+ i += 2; | |
+ if (BETWEEN(attr[i], 0, 255)) | |
+ term.c.attr.bg = attr[i]; | |
+ else | |
+ fprintf(stderr, "erresc: bad bgcolor %… | |
+ } | |
+ else | |
+ fprintf(stderr, "erresc: gfx attr %d unknown\n… | |
+ break; | |
case 49: | |
term.c.attr.bg = DefaultBG; | |
break; | |
t@@ -604,8 +625,12 @@ tsetattr(int *attr, int l) { | |
term.c.attr.fg = attr[i] - 30; | |
else if(BETWEEN(attr[i], 40, 47)) | |
term.c.attr.bg = attr[i] - 40; | |
+ else if(BETWEEN(attr[i], 90, 97)) | |
+ term.c.attr.fg = attr[i] - 90 + 8; | |
+ else if(BETWEEN(attr[i], 100, 107)) | |
+ term.c.attr.fg = attr[i] - 100 + 8; | |
else | |
- fprintf(stderr, "erresc: gfx attr %d unkown\n"… | |
+ fprintf(stderr, "erresc: gfx attr %d unknown\n… | |
break; | |
} | |
} | |
t@@ -1009,16 +1034,44 @@ tresize(int col, int row) { | |
term.col = col, term.row = row; | |
} | |
-unsigned long | |
-xgetcol(const char *s) { | |
+void | |
+tloadcols(void) { | |
+ int i, r, g, b; | |
XColor color; | |
Colormap cmap = DefaultColormap(xw.dis, xw.scr); | |
+ unsigned long white = WhitePixel(xw.dis, xw.scr); | |
+ | |
+ for(i = 0; i < 16; i++) { | |
+ if (!XAllocNamedColor(xw.dis, cmap, colorname[i], &color, &col… | |
+ dc.col[i] = white; | |
+ fprintf(stderr, "Could not allocate color '%s'\n", col… | |
+ } else | |
+ dc.col[i] = color.pixel; | |
+ } | |
+ | |
+ /* same colors as xterm */ | |
+ for(r = 0; r < 6; r++) | |
+ for(g = 0; g < 6; g++) | |
+ for(b = 0; b < 6; b++) { | |
+ color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r; | |
+ color.green = g == 0 ? 0 : 0x3737 + 0x2828 * g; | |
+ color.blue = b == 0 ? 0 : 0x3737 + 0x2828 * b; | |
+ if (!XAllocColor(xw.dis, cmap, &color)) { | |
+ dc.col[i] = white; | |
+ fprintf(stderr, "Could not allocate co… | |
+ } else | |
+ dc.col[i] = color.pixel; | |
+ i++; | |
+ } | |
- if(!XAllocNamedColor(xw.dis, cmap, s, &color, &color)) { | |
- color.pixel = WhitePixel(xw.dis, xw.scr); | |
- fprintf(stderr, "Could not allocate color '%s'\n", s); | |
+ for(r = 0; r < 24; r++, i++) { | |
+ color.red = color.green = color.blue = 0x0808 + 0x0a0a * r; | |
+ if (!XAllocColor(xw.dis, cmap, &color)) { | |
+ dc.col[i] = white; | |
+ fprintf(stderr, "Could not allocate color %d\n", i); | |
+ } else | |
+ dc.col[i] = color.pixel; | |
} | |
- return color.pixel; | |
} | |
void | |
t@@ -1048,8 +1101,6 @@ xhints(void) | |
void | |
xinit(void) { | |
- int i; | |
- | |
xw.dis = XOpenDisplay(NULL); | |
xw.scr = XDefaultScreen(xw.dis); | |
if(!xw.dis) | |
t@@ -1064,8 +1115,7 @@ xinit(void) { | |
xw.ch = dc.font->ascent + dc.font->descent; | |
/* colors */ | |
- for(i = 0; i < LEN(colorname); i++) | |
- dc.col[i] = xgetcol(colorname[i]); | |
+ tloadcols(); | |
term.c.attr.fg = DefaultFG; | |
term.c.attr.bg = DefaultBG; | |
t@@ -1173,6 +1223,8 @@ draw(int redraw_all) { | |
Glyph base, new; | |
char buf[DRAW_BUF_SIZ]; | |
+ XSetForeground(xw.dis, dc.gc, dc.col[DefaultBG]); | |
+ XFillRectangle(xw.dis, xw.buf, dc.gc, 0, 0, xw.w, xw.h); | |
for(y = 0; y < term.row; y++) { | |
base = term.line[y][0]; | |
i = ox = 0; | |
diff --git a/st.info b/st.info | |
t@@ -1,7 +1,6 @@ | |
-# Reconstructed via infocmp from file: /lib/terminfo/p/pcansi | |
st| simpleterm, | |
am, | |
- ul, | |
+ ul, | |
mir, | |
msgr, | |
colors#8, | |
t@@ -10,7 +9,7 @@ st| simpleterm, | |
lines#24, | |
ncv#3, | |
pairs#64, | |
- acsc=*`#aof+g+j+k+l+m+n-o-p-q-r-s+t+u+v+w|x<y>z{{||}}-~, | |
+ acsc=*`#aof+g+j+k+l+m+n-o-p-q-r-s+t+u+v+w|x<y>z{{||}}-~, | |
bel=^G, | |
bold=\E[1m, | |
cbt=\E[Z, | |
t@@ -36,9 +35,11 @@ st| simpleterm, | |
kcud1=\E[B, | |
kcuf1=\E[C, | |
kcuu1=\E[A, | |
+ kdch1=\E[3~, | |
+ kend=\E[4~, | |
khome=\E[1~, | |
- knp=\E[6~, | |
- kpp=\E[5~, | |
+ knp=\E[6~, | |
+ kpp=\E[5~, | |
op=\E[37;40m, | |
rev=\E[7m, | |
rmacs=\E[10m, | |
t@@ -46,7 +47,6 @@ st| simpleterm, | |
rmul=\E[m, | |
setab=\E[4%p1%dm, | |
setaf=\E[3%p1%dm, | |
-# sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%… | |
sgr0=\E[0m, | |
smacs=\E[12m, | |
smso=\E[7m, |