summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--src/options.c1
-rw-r--r--src/screen.c2
-rw-r--r--src/screen.h20
-rw-r--r--src/term.c282
-rw-r--r--src/term.h16
-rw-r--r--src/windows.c7
-rwxr-xr-xutils/Etcolors109
-rwxr-xr-xutils/Etgen-color-cube33
-rwxr-xr-xutils/Etgen-color-cube-c31
-rwxr-xr-xutils/Etpalette45
11 files changed, 479 insertions, 75 deletions
diff --git a/ChangeLog b/ChangeLog
index b908a48..3bbbcfa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5317,3 +5317,11 @@ Mon Apr 18 16:00:22 2005 Michael Jennings (mej)
Remove unused NO_XLOCALE crap and do it right.
----------------------------------------------------------------------
+Mon Apr 18 18:00:17 2005 Michael Jennings (mej)
+
+Applied a patch from Fredrik Svensson <fred@ludd.ltu.se> for 256-color
+support (a la xterm). I also renamed and imported a couple of his
+test scripts into utils/, and in playing around with them, I found and
+fixed an X server resource leak. Use Etpalette to view the 256-color
+palette.
+----------------------------------------------------------------------
diff --git a/src/options.c b/src/options.c
index 0469756..4d9d34a 100644
--- a/src/options.c
+++ b/src/options.c
@@ -2516,6 +2516,7 @@ init_defaults(void)
rs_path = NULL;
#endif
colorfgbg = DEFAULT_RSTYLE;
+ MEMSET(PixColors, 0, sizeof(PixColors));
/* Font stuff. */
MEMSET(rs_font, 0, sizeof(char *) * NFONTS);
diff --git a/src/screen.c b/src/screen.c
index 6f79b7a..e28bbdd 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -491,7 +491,7 @@ scr_color(unsigned int color, unsigned int Intensity)
break;
}
} else {
- if ((rstyle & Intensity) && color >= minColor && color <= maxColor) {
+ if ((rstyle & Intensity) && (color >= minColor) && (color <= maxColor)) {
switch (Intensity) {
case RS_Bold:
if (BITFIELD_IS_SET(vt_options, VT_OPTIONS_BOLD_BRIGHTENS_FOREGROUND)) {
diff --git a/src/screen.h b/src/screen.h
index 09c7a62..a5220f6 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -118,11 +118,11 @@ enum {
#define RS_multi2 (RS_multi0|RS_multi1) /* multibyte 2nd byte */
#define RS_multiMask (RS_multi0|RS_multi1) /* multibyte mask */
#endif
-#define RS_fgMask 0x00001F00u /* 32 colors */
-#define RS_Overscore 0x00002000u /* overscore */
-#define RS_Italic 0x00004000u /* italic */
-#define RS_Bold 0x00008000u /* bold */
-#define RS_bgMask 0x001F0000u /* 32 colors */
+#define RS_fgMask 0x0003FE00u /* 512 colors */
+#define RS_bgMask 0x000001FFu /* 512 colors */
+#define RS_Overscore 0x00040000u /* overscore */
+#define RS_Italic 0x00080000u /* italic */
+#define RS_Bold 0x00100000u /* bold */
#define RS_Dim 0x00200000u /* dim (apply alpha) */
#define RS_Conceal 0x00400000u /* conceal */
#define RS_Blink 0x00800000u /* blink */
@@ -130,15 +130,15 @@ enum {
#define RS_attrMask (0xFF000000u|RS_Overscore|RS_Italic|RS_Bold|RS_Dim|RS_Conceal|RS_Blink)
/* how to build & extract colors and attributes */
-#define GET_FGCOLOR(r) (((r) & RS_fgMask)>>8)
-#define GET_BGCOLOR(r) (((r) & RS_bgMask)>>16)
+#define GET_FGCOLOR(r) (((r) & RS_fgMask)>>9)
+#define GET_BGCOLOR(r) (((r) & RS_bgMask))
#define GET_ATTR(r) (((r) & RS_attrMask))
#define GET_BGATTR(r) (((r) & (RS_attrMask | RS_bgMask)))
-#define SET_FGCOLOR(r,fg) (((r) & ~RS_fgMask) | ((fg)<<8))
-#define SET_BGCOLOR(r,bg) (((r) & ~RS_bgMask) | ((bg)<<16))
+#define SET_FGCOLOR(r,fg) (((r) & ~RS_fgMask) | ((fg)<<9))
+#define SET_BGCOLOR(r,bg) (((r) & ~RS_bgMask) | (bg))
#define SET_ATTR(r,a) (((r) & ~RS_attrMask)| (a))
-#define DEFAULT_RSTYLE (RS_None | (fgColor<<8) | (bgColor<<16))
+#define DEFAULT_RSTYLE (RS_None | (fgColor<<9) | (bgColor))
/* screen_t flags */
#define Screen_Relative (1<<0) /* relative origin mode flag */
diff --git a/src/term.c b/src/term.c
index 3e5c8d4..0ebac1c 100644
--- a/src/term.c
+++ b/src/term.c
@@ -58,7 +58,6 @@ unsigned char meta_char = 033; /* Alt-key prefix */
unsigned long PrivateModes = PrivMode_Default;
unsigned long SavedModes = PrivMode_Default;
char *def_colorName[] = {
- "rgb:aa/aa/aa", "rgb:0/0/0", /* fg/bg */
"rgb:0/0/0", /* 0: black (#000000) */
/* low-intensity colors */
"rgb:cc/00/00", /* 1: red */
@@ -77,6 +76,254 @@ char *def_colorName[] = {
"rgb:ff/00/ff", /* 5/13: bright magenta */
"rgb:00/ff/ff", /* 6/14: bright cyan */
"rgb:ff/ff/ff", /* 7/15: bright white */
+
+ /* 6x6x6 color cube generated with color-cube-gen.pl */
+ "rgb:00/00/00",
+ "rgb:00/00/2a",
+ "rgb:00/00/55",
+ "rgb:00/00/7f",
+ "rgb:00/00/aa",
+ "rgb:00/00/d4",
+ "rgb:00/2a/00",
+ "rgb:00/2a/2a",
+ "rgb:00/2a/55",
+ "rgb:00/2a/7f",
+ "rgb:00/2a/aa",
+ "rgb:00/2a/d4",
+ "rgb:00/55/00",
+ "rgb:00/55/2a",
+ "rgb:00/55/55",
+ "rgb:00/55/7f",
+ "rgb:00/55/aa",
+ "rgb:00/55/d4",
+ "rgb:00/7f/00",
+ "rgb:00/7f/2a",
+ "rgb:00/7f/55",
+ "rgb:00/7f/7f",
+ "rgb:00/7f/aa",
+ "rgb:00/7f/d4",
+ "rgb:00/aa/00",
+ "rgb:00/aa/2a",
+ "rgb:00/aa/55",
+ "rgb:00/aa/7f",
+ "rgb:00/aa/aa",
+ "rgb:00/aa/d4",
+ "rgb:00/d4/00",
+ "rgb:00/d4/2a",
+ "rgb:00/d4/55",
+ "rgb:00/d4/7f",
+ "rgb:00/d4/aa",
+ "rgb:00/d4/d4",
+ "rgb:2a/00/00",
+ "rgb:2a/00/2a",
+ "rgb:2a/00/55",
+ "rgb:2a/00/7f",
+ "rgb:2a/00/aa",
+ "rgb:2a/00/d4",
+ "rgb:2a/2a/00",
+ "rgb:2a/2a/2a",
+ "rgb:2a/2a/55",
+ "rgb:2a/2a/7f",
+ "rgb:2a/2a/aa",
+ "rgb:2a/2a/d4",
+ "rgb:2a/55/00",
+ "rgb:2a/55/2a",
+ "rgb:2a/55/55",
+ "rgb:2a/55/7f",
+ "rgb:2a/55/aa",
+ "rgb:2a/55/d4",
+ "rgb:2a/7f/00",
+ "rgb:2a/7f/2a",
+ "rgb:2a/7f/55",
+ "rgb:2a/7f/7f",
+ "rgb:2a/7f/aa",
+ "rgb:2a/7f/d4",
+ "rgb:2a/aa/00",
+ "rgb:2a/aa/2a",
+ "rgb:2a/aa/55",
+ "rgb:2a/aa/7f",
+ "rgb:2a/aa/aa",
+ "rgb:2a/aa/d4",
+ "rgb:2a/d4/00",
+ "rgb:2a/d4/2a",
+ "rgb:2a/d4/55",
+ "rgb:2a/d4/7f",
+ "rgb:2a/d4/aa",
+ "rgb:2a/d4/d4",
+ "rgb:55/00/00",
+ "rgb:55/00/2a",
+ "rgb:55/00/55",
+ "rgb:55/00/7f",
+ "rgb:55/00/aa",
+ "rgb:55/00/d4",
+ "rgb:55/2a/00",
+ "rgb:55/2a/2a",
+ "rgb:55/2a/55",
+ "rgb:55/2a/7f",
+ "rgb:55/2a/aa",
+ "rgb:55/2a/d4",
+ "rgb:55/55/00",
+ "rgb:55/55/2a",
+ "rgb:55/55/55",
+ "rgb:55/55/7f",
+ "rgb:55/55/aa",
+ "rgb:55/55/d4",
+ "rgb:55/7f/00",
+ "rgb:55/7f/2a",
+ "rgb:55/7f/55",
+ "rgb:55/7f/7f",
+ "rgb:55/7f/aa",
+ "rgb:55/7f/d4",
+ "rgb:55/aa/00",
+ "rgb:55/aa/2a",
+ "rgb:55/aa/55",
+ "rgb:55/aa/7f",
+ "rgb:55/aa/aa",
+ "rgb:55/aa/d4",
+ "rgb:55/d4/00",
+ "rgb:55/d4/2a",
+ "rgb:55/d4/55",
+ "rgb:55/d4/7f",
+ "rgb:55/d4/aa",
+ "rgb:55/d4/d4",
+ "rgb:7f/00/00",
+ "rgb:7f/00/2a",
+ "rgb:7f/00/55",
+ "rgb:7f/00/7f",
+ "rgb:7f/00/aa",
+ "rgb:7f/00/d4",
+ "rgb:7f/2a/00",
+ "rgb:7f/2a/2a",
+ "rgb:7f/2a/55",
+ "rgb:7f/2a/7f",
+ "rgb:7f/2a/aa",
+ "rgb:7f/2a/d4",
+ "rgb:7f/55/00",
+ "rgb:7f/55/2a",
+ "rgb:7f/55/55",
+ "rgb:7f/55/7f",
+ "rgb:7f/55/aa",
+ "rgb:7f/55/d4",
+ "rgb:7f/7f/00",
+ "rgb:7f/7f/2a",
+ "rgb:7f/7f/55",
+ "rgb:7f/7f/7f",
+ "rgb:7f/7f/aa",
+ "rgb:7f/7f/d4",
+ "rgb:7f/aa/00",
+ "rgb:7f/aa/2a",
+ "rgb:7f/aa/55",
+ "rgb:7f/aa/7f",
+ "rgb:7f/aa/aa",
+ "rgb:7f/aa/d4",
+ "rgb:7f/d4/00",
+ "rgb:7f/d4/2a",
+ "rgb:7f/d4/55",
+ "rgb:7f/d4/7f",
+ "rgb:7f/d4/aa",
+ "rgb:7f/d4/d4",
+ "rgb:aa/00/00",
+ "rgb:aa/00/2a",
+ "rgb:aa/00/55",
+ "rgb:aa/00/7f",
+ "rgb:aa/00/aa",
+ "rgb:aa/00/d4",
+ "rgb:aa/2a/00",
+ "rgb:aa/2a/2a",
+ "rgb:aa/2a/55",
+ "rgb:aa/2a/7f",
+ "rgb:aa/2a/aa",
+ "rgb:aa/2a/d4",
+ "rgb:aa/55/00",
+ "rgb:aa/55/2a",
+ "rgb:aa/55/55",
+ "rgb:aa/55/7f",
+ "rgb:aa/55/aa",
+ "rgb:aa/55/d4",
+ "rgb:aa/7f/00",
+ "rgb:aa/7f/2a",
+ "rgb:aa/7f/55",
+ "rgb:aa/7f/7f",
+ "rgb:aa/7f/aa",
+ "rgb:aa/7f/d4",
+ "rgb:aa/aa/00",
+ "rgb:aa/aa/2a",
+ "rgb:aa/aa/55",
+ "rgb:aa/aa/7f",
+ "rgb:aa/aa/aa",
+ "rgb:aa/aa/d4",
+ "rgb:aa/d4/00",
+ "rgb:aa/d4/2a",
+ "rgb:aa/d4/55",
+ "rgb:aa/d4/7f",
+ "rgb:aa/d4/aa",
+ "rgb:aa/d4/d4",
+ "rgb:d4/00/00",
+ "rgb:d4/00/2a",
+ "rgb:d4/00/55",
+ "rgb:d4/00/7f",
+ "rgb:d4/00/aa",
+ "rgb:d4/00/d4",
+ "rgb:d4/2a/00",
+ "rgb:d4/2a/2a",
+ "rgb:d4/2a/55",
+ "rgb:d4/2a/7f",
+ "rgb:d4/2a/aa",
+ "rgb:d4/2a/d4",
+ "rgb:d4/55/00",
+ "rgb:d4/55/2a",
+ "rgb:d4/55/55",
+ "rgb:d4/55/7f",
+ "rgb:d4/55/aa",
+ "rgb:d4/55/d4",
+ "rgb:d4/7f/00",
+ "rgb:d4/7f/2a",
+ "rgb:d4/7f/55",
+ "rgb:d4/7f/7f",
+ "rgb:d4/7f/aa",
+ "rgb:d4/7f/d4",
+ "rgb:d4/aa/00",
+ "rgb:d4/aa/2a",
+ "rgb:d4/aa/55",
+ "rgb:d4/aa/7f",
+ "rgb:d4/aa/aa",
+ "rgb:d4/aa/d4",
+ "rgb:d4/d4/00",
+ "rgb:d4/d4/2a",
+ "rgb:d4/d4/55",
+ "rgb:d4/d4/7f",
+ "rgb:d4/d4/aa",
+ "rgb:d4/d4/d4",
+
+ /* grayscale */
+ "rgb:08/08/08",
+ "rgb:12/12/12",
+ "rgb:1c/1c/1c",
+ "rgb:26/26/26",
+ "rgb:30/30/30",
+ "rgb:3a/3a/3a",
+ "rgb:44/44/44",
+ "rgb:4e/4e/4e",
+ "rgb:58/58/58",
+ "rgb:62/62/62",
+ "rgb:6c/6c/6c",
+ "rgb:76/76/76",
+ "rgb:80/80/80",
+ "rgb:8a/8a/8a",
+ "rgb:94/94/94",
+ "rgb:9e/9e/9e",
+ "rgb:a8/a8/a8",
+ "rgb:b2/b2/b2",
+ "rgb:bc/bc/bc",
+ "rgb:c6/c6/c6",
+ "rgb:d0/d0/d0",
+ "rgb:da/da/da",
+ "rgb:e4/e4/e4",
+ "rgb:ee/ee/ee",
+
+ /* fg/bg */
+ "rgb:aa/aa/aa", "rgb:0/0/0",
+
#ifndef NO_CURSORCOLOR
NULL, NULL, /* cursorColor, cursorColor2 */
#endif /* NO_CURSORCOLOR */
@@ -1268,9 +1515,11 @@ process_xterm_seq(void)
if (ch) {
if (ch == '\t')
ch = ' '; /* translate '\t' to space */
- else if (ch < ' ')
+ else if (ch < ' ') {
+ if (ch == 27 && (ch = cmd_getc()) == '\\') /* ESC \ (ST) is String Terminator in Xterm */
+ break;
return; /* control character - exit */
-
+ }
if (n < sizeof(string) - 1)
string[n++] = ch;
}
@@ -1652,6 +1901,13 @@ process_sgr_mode(unsigned int nargs, int arg[])
case 37:
scr_color(minColor + (arg[i] - 30), RS_Bold);
break;
+ case 38:
+ if (arg[i+1] == 5) {
+ i += 2;
+ if (arg[i] >= 0 && arg[i] < 256)
+ scr_color(arg[i], RS_Bold);
+ }
+ break;
/* default fg */
case 39:
scr_color(restoreFG, RS_Bold);
@@ -1668,6 +1924,13 @@ process_sgr_mode(unsigned int nargs, int arg[])
case 47:
scr_color(minColor + (arg[i] - 40), RS_Blink);
break;
+ case 48:
+ if (arg[i+1] == 5) {
+ i += 2;
+ if (arg[i] >= 0 && arg[i] < 256)
+ scr_color(arg[i], RS_Blink);
+ }
+ break;
/* default bg */
case 49:
scr_color(restoreBG, RS_Blink);
@@ -1843,6 +2106,7 @@ append_to_icon_name(const char *str)
* 1 = change icon name
* 2 = change title
* 3 = set text property on window
+ * 4 = set any of 256 colors
* 46 = change logfile (not implemented)
* 50 = change font
*
@@ -1861,6 +2125,7 @@ xterm_seq(int op, const char *str)
XColor xcol;
char *nstr, *tnstr, *valptr;
unsigned char eterm_seq_op;
+ unsigned int i;
XWMHints *wm_hints;
#ifdef PIXMAP_SUPPORT
@@ -1894,6 +2159,17 @@ xterm_seq(int op, const char *str)
}
set_text_property(TermWin.parent, nstr, valptr);
break;
+ case ESCSEQ_XTERM_CHANGE_COLOR: /* Changing existing colors 256 */
+ while ((nstr = (char *) strsep(&tnstr, ";")) != NULL) {
+ i = (unsigned int) strtoul(nstr, (char **) NULL, 0);
+ nstr = (char *) strsep(&tnstr, ";");
+ if ((i < 256) && (nstr != NULL)) {
+ D_COLORS(("Changing color : [%d] -> %s\n", i, nstr));
+ set_window_color(i, nstr);
+ }
+ }
+ break;
+
case ESCSEQ_XTERM_TAKEOVER: /* 5 */
XSetInputFocus(Xdisplay, TermWin.parent, RevertToParent, CurrentTime);
XRaiseWindow(Xdisplay, TermWin.parent);
diff --git a/src/term.h b/src/term.h
index 6d82a48..8068a5d 100644
--- a/src/term.h
+++ b/src/term.h
@@ -63,6 +63,7 @@
# define ESCSEQ_XTERM_ICONNAME 1
# define ESCSEQ_XTERM_TITLE 2
# define ESCSEQ_XTERM_PROP 3
+# define ESCSEQ_XTERM_CHANGE_COLOR 4
# define ESCSEQ_XTERM_FGCOLOR 10
# define ESCSEQ_XTERM_BGCOLOR 11
# define ESCSEQ_XTERM_CURSOR_COLOR 12
@@ -84,13 +85,11 @@
# define ESCSEQ_XTERM_RESTOREFG 39 /* change default fg color */
# define ESCSEQ_XTERM_RESTOREBG 49 /* change default bg color */
-# define restoreFG 39 /* restore default fg color */
-# define restoreBG 49 /* restore default bg color */
+# define restoreFG 512 /* restore default fg color */
+# define restoreBG 513 /* restore default bg color */
-enum color_list {
- fgColor,
- bgColor,
- minColor, /* 2 */
+enum ansi_color_list {
+ minColor, /* 0 */
BlackColor = minColor,
Red3Color,
Green3Color,
@@ -110,6 +109,11 @@ enum color_list {
CyanColor,
maxBright, /* minBright + 7 */
WhiteColor = maxBright,
+};
+
+enum color_list { /* Extra colors */
+ fgColor = 256,
+ bgColor,
# ifndef NO_CURSORCOLOR
cursorColor,
cursorColor2,
diff --git a/src/windows.c b/src/windows.c
index 65af83a..b18043c 100644
--- a/src/windows.c
+++ b/src/windows.c
@@ -261,6 +261,7 @@ process_colors(void)
Pixel pixel;
for (i = 0; i < NRS_COLORS; i++) {
+ D_COLORS(("Adding color %d of %d (%s)\n",i,NRS_COLORS,def_colorName[i]));
if ((Xdepth <= 2) || ((pixel = get_color_by_name(rs_color[i], def_colorName[i])) == (Pixel) (-1))) {
switch (i) {
case fgColor:
@@ -304,6 +305,7 @@ process_colors(void)
break;
}
}
+ D_COLORS(("Pixel : %x\n",pixel));
PixColors[i] = pixel;
}
@@ -677,7 +679,7 @@ stored_palette(char op)
{
static Pixel default_colors[NRS_COLORS + EXTRA_COLORS];
static unsigned char stored = 0;
- unsigned char i;
+ unsigned int i;
if (op == SAVE) {
for (i = 0; i < NRS_COLORS; i++) {
@@ -719,6 +721,9 @@ set_window_color(int idx, const char *color)
print_warning("Unable to allocate \"%s\" in the color map.\n", color);
return;
}
+ if ((idx > maxBright) && (idx < 256) && (PixColors[idx])) {
+ XFreeColors(Xdisplay, cmap, (unsigned long *) &(PixColors[idx]), 1, 0);
+ }
PixColors[idx] = xcol.pixel;
} else {
print_warning("Unable to resolve \"%s\" as a color name.\n", color);
diff --git a/utils/Etcolors b/utils/Etcolors
index 33c75f3..666aca4 100755
--- a/utils/Etcolors
+++ b/utils/Etcolors
@@ -14,63 +14,64 @@ echo "you have configured. You may need to widen your terminal to see it proper
echo
echo "FG BG"
echo "-- --"
-echo " 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"
+echo " 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15"
fgstyle=""
-for fg in 0 1 2 3 4 5 6 7 ; do
- line=" $fg "
- case $fg in
- 0) fg_esc=30 ;;
- 1) fg_esc=31 ;;
- 2) fg_esc=32 ;;
- 3) fg_esc=33 ;;
- 4) fg_esc=34 ;;
- 5) fg_esc=35 ;;
- 6) fg_esc=36 ;;
- 7) fg_esc=37 ;;
- esac
- for bgstyle in "" ";5"; do
- for bg in 0 1 2 3 4 5 6 7 ; do
- case $bg in
- 0) bg_esc=40 ;;
- 1) bg_esc=41 ;;
- 2) bg_esc=42 ;;
- 3) bg_esc=43 ;;
- 4) bg_esc=44 ;;
- 5) bg_esc=45 ;;
- 6) bg_esc=46 ;;
- 7) bg_esc=47 ;;
- esac
- line="${line}[${fg_esc};${bg_esc}${fgstyle}${bgstyle}m txt "
+for fg in 00 01 02 03 04 05 06 07 ; do
+ line="$fg "
+ case $fg in
+ 00) fg_esc=30 ;;
+ 01) fg_esc=31 ;;
+ 02) fg_esc=32 ;;
+ 03) fg_esc=33 ;;
+ 04) fg_esc=34 ;;
+ 05) fg_esc=35 ;;
+ 06) fg_esc=36 ;;
+ 07) fg_esc=37 ;;
+ esac
+ for bgstyle in "" ";5"; do
+ for bg in 00 01 02 03 04 05 06 07 ; do
+ case $bg in
+ 00) bg_esc=40 ;;
+ 01) bg_esc=41 ;;
+ 02) bg_esc=42 ;;
+ 03) bg_esc=43 ;;
+ 04) bg_esc=44 ;;
+ 05) bg_esc=45 ;;
+ 06) bg_esc=46 ;;
+ 07) bg_esc=47 ;;
+ esac
+ line="${line}[${fg_esc};${bg_esc}${fgstyle}${bgstyle}m @@ "
+ done
done
- done
- echo "$line"
+ echo "$line"
done
fgstyle=";1"
-for fg in 8 9 10 11 12 13 14 15 ; do
- case $fg in
- 8) fg_esc=30; line=" $fg " ;;
- 9) fg_esc=31; line=" $fg " ;;
- 10) fg_esc=32; line="$fg " ;;
- 11) fg_esc=33; line="$fg " ;;
- 12) fg_esc=34; line="$fg " ;;
- 13) fg_esc=35; line="$fg " ;;
- 14) fg_esc=36; line="$fg " ;;
- 15) fg_esc=37; line="$fg " ;;
- esac
- for bgstyle in "" ";5"; do
- for bg in 0 1 2 3 4 5 6 7 ; do
- case $bg in
- 0) bg_esc=40 ;;
- 1) bg_esc=41 ;;
- 2) bg_esc=42 ;;
- 3) bg_esc=43 ;;
- 4) bg_esc=44 ;;
- 5) bg_esc=45 ;;
- 6) bg_esc=46 ;;
- 7) bg_esc=47 ;;
- esac
- line="${line}[${fg_esc};${bg_esc}${fgstyle}${bgstyle}m txt "
+for fg in 08 09 10 11 12 13 14 15 ; do
+ line="$fg "
+ case $fg in
+ 08) fg_esc=30 ;;
+ 09) fg_esc=31 ;;
+ 10) fg_esc=32 ;;
+ 11) fg_esc=33 ;;
+ 12) fg_esc=34 ;;
+ 13) fg_esc=35 ;;
+ 14) fg_esc=36 ;;
+ 15) fg_esc=37 ;;
+ esac
+ for bgstyle in "" ";5"; do
+ for bg in 0 1 2 3 4 5 6 7 ; do
+ case $bg in
+ 0) bg_esc=40 ;;
+ 1) bg_esc=41 ;;
+ 2) bg_esc=42 ;;
+ 3) bg_esc=43 ;;
+ 4) bg_esc=44 ;;
+ 5) bg_esc=45 ;;
+ 6) bg_esc=46 ;;
+ 7) bg_esc=47 ;;
+ esac
+ line="${line}[${fg_esc};${bg_esc}${fgstyle}${bgstyle}m @@ "
+ done
done
- done
- echo "$line"
+ echo "$line"
done
diff --git a/utils/Etgen-color-cube b/utils/Etgen-color-cube
new file mode 100755
index 0000000..959072b
--- /dev/null
+++ b/utils/Etgen-color-cube
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+# Built from
+# Author: Todd Larason <jtl@molehill.org>
+# $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.1 1999/07/11 08:49:54 dawes Exp $
+# adapted to the special needs for Eterm by Fredrik Svensson <fred@ludd.ltu.se>
+
+
+$redmax = 1;
+$greenmax = 1;
+$bluemax = 2*3*2*3*2*3;
+# adjust if 255 color should be included use adj = 1. Not possible if any maxvalue is 1.
+$adj = 0;
+
+# colors 16-231 are a 6x6x6 color cube
+for ($red = 0; $red < $redmax; $red++) {
+ for ($green = 0; $green < $greenmax; $green++) {
+ for ($blue = 0; $blue < $bluemax; $blue++) {
+ printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
+ 16 + ($red * $greenmax * $bluemax) + ($green * $bluemax) + $blue,
+ int ($red * 255 / ($redmax - $adj) ),
+ int ($green * 255 / ($greenmax - $adj)),
+ int ($blue * 255 / ($bluemax - $adj )));
+ }
+ }
+}
+
+# colors 232-255 are a grayscale ramp, intentionally leaving out
+# black and white
+for ($gray = 0; $gray < 24; $gray++) {
+ $level = ($gray * 10) + 8;
+ printf("\x1b]4;%d;rgb:%2.2x/%2.2x/%2.2x\x1b\\",
+ 232 + $gray, $level, $level, $level);
+}
diff --git a/utils/Etgen-color-cube-c b/utils/Etgen-color-cube-c
new file mode 100755
index 0000000..9590fd5
--- /dev/null
+++ b/utils/Etgen-color-cube-c
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+# Built from
+# Author: Todd Larason <jtl@molehill.org>
+# $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.1 1999/07/11 08:49:54 dawes Exp $
+# adapted to the special needs for Eterm by Fredrik Svensson <fred@ludd.ltu.se>
+
+
+$redmax = 2*3;
+$greenmax = 2*3;
+$bluemax = 2*3;
+$adj = 0;
+
+# colors 16-231 are a 6x6x6 color cube
+for ($red = 0; $red < $redmax; $red++) {
+ for ($green = 0; $green < $greenmax; $green++) {
+ for ($blue = 0; $blue < $bluemax; $blue++) {
+ printf(" \"rgb:%2.2x/%2.2x/%2.2x\",\n",
+ int ($red * 255 / ($redmax - $adj) ),
+ int ($green * 255 / ($greenmax - $adj)),
+ int ($blue * 255 / ($bluemax - $adj )));
+ }
+ }
+}
+
+# colors 232-255 are a grayscale ramp, intentionally leaving out
+# black and white
+for ($gray = 0; $gray < 24; $gray++) {
+ $level = ($gray * 10) + 8;
+ printf(" \"rgb:%2.2x/%2.2x/%2.2x\",\n",
+ $level, $level, $level);
+}
diff --git a/utils/Etpalette b/utils/Etpalette
new file mode 100755
index 0000000..61dc89b
--- /dev/null
+++ b/utils/Etpalette
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+# Based on a script by
+# Author: Todd Larason <jtl@molehill.org>
+# $XFree86: xc/programs/xterm/vttests/256colors2.pl,v 1.1 1999/07/11 08:49:54 dawes Exp $
+# adapted to the special needs for Eterm by Fredrik Svensson <fred@ludd.ltu.se>
+
+# display the colors
+
+# first the system ones:
+print "System colors:\n";
+for ($color = 0; $color < 8; $color++) {
+ print "\x1b[48;5;${color}m ";
+}
+print "\x1b[0m\n";
+for ($color = 8; $color < 16; $color++) {
+ print "\x1b[48;5;${color}m ";
+}
+print "\x1b[0m\n\n";
+
+# now the color cube
+print "Color cube, 6x6x6:\n";
+for ($green = 0; $green < 6; $green++) {
+ for ($red = 0; $red < 6; $red++) {
+ for ($blue = 0; $blue < 6; $blue++) {
+ $color = 16 + ($red * 36) + ($green * 6) + $blue;
+ print "\x1b[48;5;${color}m ";
+ }
+ print "\x1b[0m ";
+ }
+ print "\n";
+}
+
+
+# now the grayscale ramp
+print "Grayscale ramp:\n";
+for ($color = 232; $color < 256; $color++) {
+ print "\x1b[48;5;${color}m ";
+}
+print "\x1b[0m\n";
+
+print "Eterm special colors:\n";
+for ($color = 256; $color < 294; $color++) {
+ print "\x1b[48;5;${color}m ";
+}
+print "\x1b[0m\n";