diff options
-rw-r--r-- | .SRCINFO | 27 | ||||
-rw-r--r-- | PKGBUILD | 49 | ||||
-rw-r--r-- | addon-soft-black.patch | 42 | ||||
-rw-r--r-- | addon-true-color.patch | 112 | ||||
-rw-r--r-- | addon-underline.patch | 30 |
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, |