~petersanchez/st

10e49a0505a250fc78c41842d93eb2a0abaf4c93 — Anselm R Garbe 13 years ago 9e8f5f1
applied Devin J Pohly's st color info patches, thanks Devin!
4 files changed, 88 insertions(+), 27 deletions(-)

M Makefile
M config.h
M st.c -rwxr-xr-x => -rw-r--r--
M st.info
M Makefile => Makefile +1 -0
@@ 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

M config.h => config.h +15 -7
@@ 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) */

M st.c => st.c +66 -14
@@ 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


@@ 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;


@@ 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);


@@ 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 %d\n", attr[i]);
			}
			else
				fprintf(stderr, "erresc: gfx attr %d unknown\n", attr[i]); 
			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 %d\n", attr[i]);
			}
			else
				fprintf(stderr, "erresc: gfx attr %d unknown\n", attr[i]); 
			break;
		case 49:
			term.c.attr.bg = DefaultBG;
			break;


@@ 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", attr[i]); 
				fprintf(stderr, "erresc: gfx attr %d unknown\n", attr[i]); 
			break;
		}
	}


@@ 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, &color)) {
			dc.col[i] = white;
			fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]);
		} 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 color %d\n", i);
				} 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


@@ 1048,8 1101,6 @@ xhints(void)

void
xinit(void) {
	int i;

	xw.dis = XOpenDisplay(NULL);
	xw.scr = XDefaultScreen(xw.dis);
	if(!xw.dis)


@@ 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;


@@ 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;

M st.info => st.info +6 -6
@@ 1,7 1,6 @@
#	Reconstructed via infocmp from file: /lib/terminfo/p/pcansi
st| simpleterm,
	am,
    ul,
	ul,
	mir,
	msgr,
	colors#8,


@@ 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,


@@ 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,


@@ 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%;%?%p7%t;8%;%?%p9%t;12%;m,
	sgr0=\E[0m,
	smacs=\E[12m,
	smso=\E[7m,