summarylogtreecommitdiffstats
path: root/addon-true-color.patch
diff options
context:
space:
mode:
authorAetf2015-06-14 13:32:06 +0800
committerAetf2015-06-14 13:32:06 +0800
commiteb52d4213ad2bfc22d7a6438ae0ff98e0b0782af (patch)
tree9f9d038fdd41ed31caf099fa0e990f9611beccb2 /addon-true-color.patch
downloadaur-eb52d4213ad2bfc22d7a6438ae0ff98e0b0782af.tar.gz
Migrated from AUR
Diffstat (limited to 'addon-true-color.patch')
-rw-r--r--addon-true-color.patch112
1 files changed, 112 insertions, 0 deletions
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",