summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO27
-rw-r--r--PKGBUILD49
-rw-r--r--addon-soft-black.patch42
-rw-r--r--addon-true-color.patch112
-rw-r--r--addon-underline.patch30
5 files changed, 260 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..e599416184db
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,27 @@
+pkgbase = libtsm-patched-git
+ pkgdesc = Terminal-emulator State Machine. Patched flavor (using patches from http://github.com/Aetf/libtsm)
+ pkgver = 3.r17.gb73acb4
+ pkgrel = 3
+ url = http://www.fredesktop.org/wiki/Software/kmscon/libtsm
+ arch = i686
+ arch = x86_64
+ license = MIT
+ makedepends = git
+ makedepends = libxkbcommon
+ depends = glibc
+ provides = libtsm-patched
+ provides = libtsm
+ conflicts = libtsm
+ conflicts = libtsm-patched
+ options = !libtool
+ source = git://people.freedesktop.org/~dvdhrm/libtsm
+ source = addon-underline.patch
+ source = addon-soft-black.patch
+ source = addon-true-color.patch
+ sha256sums = SKIP
+ sha256sums = 7103869ea6d8b7151d1b6b0fa0852b66da10e3a59454e4d761cb9e6ddfef6958
+ sha256sums = 0d1635f90bd95915665e87e46fa4f3abd8ed3dfe193851d2598ba8b6d37e4e3e
+ sha256sums = 25f43bc1021cca1bbdab505938e6ca8f64675dc3014c24e0210a90f2524e1858
+
+pkgname = libtsm-patched-git
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..f9adb3fdab7f
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,49 @@
+# Maintainer: Aetf <7437103@gmail.com>
+pkgname=libtsm-patched-git
+_gitname=libtsm
+pkgver=3.r17.gb73acb4
+pkgrel=3
+pkgdesc="Terminal-emulator State Machine. Patched flavor (using patches from http://github.com/Aetf/libtsm)"
+arch=('i686' 'x86_64')
+url="http://www.fredesktop.org/wiki/Software/kmscon/$_gitname"
+license=('MIT')
+depends=(glibc)
+makedepends=('git' 'libxkbcommon')
+provides=('libtsm-patched' 'libtsm')
+conflicts=('libtsm' 'libtsm-patched')
+options=(!libtool)
+source=('git://people.freedesktop.org/~dvdhrm/libtsm'
+ 'addon-underline.patch'
+ 'addon-soft-black.patch'
+ 'addon-true-color.patch')
+sha256sums=('SKIP'
+ '7103869ea6d8b7151d1b6b0fa0852b66da10e3a59454e4d761cb9e6ddfef6958'
+ '0d1635f90bd95915665e87e46fa4f3abd8ed3dfe193851d2598ba8b6d37e4e3e'
+ '25f43bc1021cca1bbdab505938e6ca8f64675dc3014c24e0210a90f2524e1858')
+
+pkgver() {
+ cd "$_gitname"
+ git describe --long | sed -r "s/^$_gitname-//;s/([^-]*-g)/r\\1/;s/-/./g"
+}
+
+build() {
+ cd "$srcdir/$_gitname"
+ echo 'Apply patch addon-underline.patch'
+ patch -p1 -i ../addon-underline.patch
+ echo 'Apply patch addon-soft-black.patch'
+ patch -p1 -i ../addon-soft-black.patch
+ echo 'Apply patch addon-true-color.patch'
+ patch -p1 -i ../addon-true-color.patch
+
+ test -f ./configure || NOCONFIGURE=1 ./autogen.sh
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "$srcdir/$_gitname"
+ install -Dm644 COPYING "$pkgdir/usr/share/licenses/$_gitname/COPYING"
+ make DESTDIR="$pkgdir/" install
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/addon-soft-black.patch b/addon-soft-black.patch
new file mode 100644
index 000000000000..271cd2963df7
--- /dev/null
+++ b/addon-soft-black.patch
@@ -0,0 +1,42 @@
+diff --git a/src/tsm/tsm-vte.c b/src/tsm/tsm-vte.c
+index ec8a936..abadd51 100644
+--- a/src/tsm/tsm-vte.c
++++ b/src/tsm/tsm-vte.c
+@@ -293,6 +293,28 @@ static uint8_t color_palette_solarized_white[COLOR_NUM][3] = {
+ [COLOR_BACKGROUND] = { 238, 232, 213 }, /* light grey */
+ };
+
++static uint8_t color_palette_soft_black[COLOR_NUM][3] = {
++ [COLOR_BLACK] = { 0x3f, 0x3f, 0x3f }, /* black */
++ [COLOR_RED] = { 0x70, 0x50, 0x50 }, /* red */
++ [COLOR_GREEN] = { 0x60, 0xb4, 0x8a }, /* green */
++ [COLOR_YELLOW] = { 0xdf, 0xaf, 0x8f }, /* yellow */
++ [COLOR_BLUE] = { 0x9a, 0xb8, 0xd7 }, /* blue */
++ [COLOR_MAGENTA] = { 0xdc, 0x8c, 0xc3 }, /* magenta */
++ [COLOR_CYAN] = { 0x8c, 0xd0, 0xd3 }, /* cyan */
++ [COLOR_LIGHT_GREY] = { 0xff, 0xff, 0xff }, /* light grey */
++ [COLOR_DARK_GREY] = { 0x70, 0x90, 0x80 }, /* dark grey */
++ [COLOR_LIGHT_RED] = { 0xdc, 0xa3, 0xa3 }, /* light red */
++ [COLOR_LIGHT_GREEN] = { 0x72, 0xd5, 0xa3 }, /* light green */
++ [COLOR_LIGHT_YELLOW] = { 0xf0, 0xdf, 0xaf }, /* light yellow */
++ [COLOR_LIGHT_BLUE] = { 0x94, 0xbf, 0xf3 }, /* light blue */
++ [COLOR_LIGHT_MAGENTA] = { 0xec, 0x93, 0xd3 }, /* light magenta */
++ [COLOR_LIGHT_CYAN] = { 0x93, 0xe0, 0xe3 }, /* light cyan */
++ [COLOR_WHITE] = { 0xdc, 0xdc, 0xcc }, /* white */
++
++ [COLOR_FOREGROUND] = { 0xdc, 0xdc, 0xcc }, /* white */
++ [COLOR_BACKGROUND] = { 0x2c, 0x2c, 0x2c }, /* light grey */
++};
++
+ static uint8_t (*get_palette(struct tsm_vte *vte))[3]
+ {
+ if (!vte->palette_name)
+@@ -304,6 +326,8 @@ static uint8_t (*get_palette(struct tsm_vte *vte))[3]
+ return color_palette_solarized_black;
+ if (!strcmp(vte->palette_name, "solarized-white"))
+ return color_palette_solarized_white;
++ if (!strcmp(vte->palette_name, "soft-black"))
++ return color_palette_soft_black;
+
+ return color_palette;
+ }
diff --git a/addon-true-color.patch b/addon-true-color.patch
new file mode 100644
index 000000000000..d172e6e319b8
--- /dev/null
+++ b/addon-true-color.patch
@@ -0,0 +1,112 @@
+diff --git a/src/tsm/tsm-vte.c b/src/tsm/tsm-vte.c
+index abadd51..e773ebb 100644
+--- a/src/tsm/tsm-vte.c
++++ b/src/tsm/tsm-vte.c
+@@ -1056,7 +1056,8 @@ static void do_esc(struct tsm_vte *vte, uint32_t data)
+ static void csi_attribute(struct tsm_vte *vte)
+ {
+ static const uint8_t bval[6] = { 0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff };
+- unsigned int i, code;
++ unsigned int i, code, val;
++ uint8_t cr, cg, cb;
+
+ if (vte->csi_argc <= 1 && vte->csi_argv[0] == -1) {
+ vte->csi_argc = 1;
+@@ -1204,53 +1205,61 @@ static void csi_attribute(struct tsm_vte *vte)
+ case 38:
+ /* fallthrough */
+ case 48:
+- if (i + 2 >= vte->csi_argc ||
+- vte->csi_argv[i + 1] != 5 ||
+- vte->csi_argv[i + 2] < 0) {
+- llog_debug(vte, "invalid 256color SGR");
+- break;
+- }
+-
+- code = vte->csi_argv[i + 2];
+- if (vte->csi_argv[i] == 38) {
+- if (code < 16) {
+- vte->cattr.fccode = code;
+- } else if (code < 232) {
+- vte->cattr.fccode = -1;
+- code -= 16;
+- vte->cattr.fb = bval[code % 6];
+- code /= 6;
+- vte->cattr.fg = bval[code % 6];
+- code /= 6;
+- vte->cattr.fr = bval[code % 6];
+- } else {
+- vte->cattr.fccode = -1;
+- code = (code - 232) * 10 + 8;
+- vte->cattr.fr = code;
+- vte->cattr.fg = code;
+- vte->cattr.fb = code;
++ val = vte->csi_argv[i];
++ if (vte->csi_argv[i + 1] == 5) { // 256color mode
++ if (i + 2 >= vte->csi_argc ||
++ vte->csi_argv[i + 2] < 0) {
++ llog_debug(vte, "invalid 256color SGR");
++ break;
+ }
+- } else {
++ code = vte->csi_argv[i + 2];
+ if (code < 16) {
+- vte->cattr.bccode = code;
++ //nochange
+ } else if (code < 232) {
+- vte->cattr.bccode = -1;
+ code -= 16;
+- vte->cattr.bb = bval[code % 6];
++ cb = bval[code % 6];
+ code /= 6;
+- vte->cattr.bg = bval[code % 6];
++ cg = bval[code % 6];
+ code /= 6;
+- vte->cattr.br = bval[code % 6];
++ cr = bval[code % 6];
++ code = -1;
+ } else {
+- vte->cattr.bccode = -1;
+ code = (code - 232) * 10 + 8;
+- vte->cattr.br = code;
+- vte->cattr.bg = code;
+- vte->cattr.bb = code;
++ cr = code;
++ cg = code;
++ cb = code;
++ code = -1;
+ }
++ i += 2;
++ } else if (vte->csi_argv[i + 1] == 2) { // true color mode
++ if (i + 4 >= vte->csi_argc ||
++ vte->csi_argv[i + 2] < 0 ||
++ vte->csi_argv[i + 3] < 0 ||
++ vte->csi_argv[i + 4] < 0) {
++ llog_debug(vte, "invalid true color SGR");
++ break;
++ }
++ cr = vte->csi_argv[i + 2];
++ cg = vte->csi_argv[i + 3];
++ cb = vte->csi_argv[i + 4];
++ code = -1;
++ i += 4;
++ } else {
++ llog_debug(vte, "invalid SGR");
++ break;
++ }
++ if (val == 38) {
++ vte->cattr.fccode = code;
++ vte->cattr.fr = cr;
++ vte->cattr.fg = cg;
++ vte->cattr.fb = cb;
++ } else {
++ vte->cattr.bccode = code;
++ vte->cattr.br = cr;
++ vte->cattr.bg = cg;
++ vte->cattr.bb = cb;
+ }
+
+- i += 2;
+ break;
+ default:
+ llog_debug(vte, "unhandled SGR attr %i",
diff --git a/addon-underline.patch b/addon-underline.patch
new file mode 100644
index 000000000000..a6a78767f58b
--- /dev/null
+++ b/addon-underline.patch
@@ -0,0 +1,30 @@
+diff --git a/src/tsm/tsm-render.c b/src/tsm/tsm-render.c
+index cb6c7d7..dcd4d69 100644
+--- a/src/tsm/tsm-render.c
++++ b/src/tsm/tsm-render.c
+@@ -52,6 +52,7 @@ tsm_age_t tsm_screen_draw(struct tsm_screen *con, tsm_screen_draw_cb draw_cb,
+ struct tsm_screen_attr attr;
+ int ret, warned = 0;
+ const uint32_t *ch;
++ uint32_t id;
+ size_t len;
+ bool in_sel = false, sel_start = false, sel_end = false;
+ bool was_sel = false;
+@@ -161,10 +162,15 @@ tsm_age_t tsm_screen_draw(struct tsm_screen *con, tsm_screen_draw_cb draw_cb,
+ age = con->age;
+ }
+
++ if (attr.underline)
++ id = cell->ch | (TSM_UCS4_MAX+1);
++ else
++ id = cell->ch;
++
+ ch = tsm_symbol_get(con->sym_table, &cell->ch, &len);
+- if (cell->ch == ' ' || cell->ch == 0)
++ if (cell->ch == 0 || (cell->ch == ' ' && !attr.underline))
+ len = 0;
+- ret = draw_cb(con, cell->ch, ch, len, cell->width,
++ ret = draw_cb(con, id, ch, len, cell->width,
+ j, i, &attr, age, data);
+ if (ret && warned++ < 3) {
+ llog_debug(con,