tsyn: handle non-black terminal forground colour - neatvi - [fork] simple vi-ty… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit e14f2566479bd4cb53821e13d0518b11e4b89b94 | |
parent c56b1c07c8afc6c7e7455f32c82c9b1f52ace59e | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Mon, 22 Jun 2015 18:23:24 +0430 | |
syn: handle non-black terminal forground colour | |
Reported by Dirk-Wilhelm Peters <[email protected]>. | |
Diffstat: | |
M syn.c | 7 +++---- | |
M term.c | 18 ++++++++++-------- | |
M vi.h | 17 +++++++++++------ | |
3 files changed, 24 insertions(+), 18 deletions(-) | |
--- | |
diff --git a/syn.c b/syn.c | |
t@@ -24,10 +24,9 @@ static struct rset *syn_find(char *ft) | |
int syn_merge(int old, int new) | |
{ | |
- int fg = SYN_FG(new) ? SYN_FG(new) : SYN_FG(old); | |
- int bg = SYN_BG(new) ? SYN_BG(new) : SYN_BG(old); | |
- int flg = (old | new) & (SYN_IT | SYN_BD | SYN_RV); | |
- return flg | fg | SYN_BGMK(bg); | |
+ int fg = SYN_FGSET(new) ? SYN_FG(new) : SYN_FG(old); | |
+ int bg = SYN_BGSET(new) ? SYN_BG(new) : SYN_BG(old); | |
+ return ((old | new) & SYN_FLG) | (bg << 8) | fg; | |
} | |
int *syn_highlight(char *ft, char *s) | |
diff --git a/term.c b/term.c | |
t@@ -173,17 +173,19 @@ char *term_att(int att, int old) | |
if (att == old) | |
return ""; | |
s += sprintf(s, "\33["); | |
- if (fg & SYN_BD) | |
+ if (att & SYN_BD) | |
s += sprintf(s, ";1"); | |
- if (fg & SYN_IT) | |
+ if (att & SYN_IT) | |
s += sprintf(s, ";3"); | |
- else if (fg & SYN_RV) | |
+ else if (att & SYN_RV) | |
s += sprintf(s, ";7"); | |
- if ((fg & 0xff) < 8) | |
- s += sprintf(s, ";%d", 30 + (fg & 0xff)); | |
- else | |
- s += sprintf(s, ";38;5;%d", (fg & 0xff)); | |
- if (bg) { | |
+ if (SYN_FGSET(att)) { | |
+ if ((fg & 0xff) < 8) | |
+ s += sprintf(s, ";%d", 30 + (fg & 0xff)); | |
+ else | |
+ s += sprintf(s, ";38;5;%d", (fg & 0xff)); | |
+ } | |
+ if (SYN_BGSET(att)) { | |
if ((bg & 0xff) < 8) | |
s += sprintf(s, ";%d", 40 + (bg & 0xff)); | |
else | |
diff --git a/vi.h b/vi.h | |
t@@ -151,12 +151,17 @@ char *cmd_pipe(char *cmd, char *s, int iproc, int oproc); | |
int cmd_exec(char *cmd); | |
/* syntax highlighting */ | |
-#define SYN_BD 0x100 | |
-#define SYN_IT 0x200 | |
-#define SYN_RV 0x400 | |
-#define SYN_BGMK(b) ((b) << 16) | |
-#define SYN_FG(a) ((a) & 0xffff) | |
-#define SYN_BG(a) ((a) >> 16) | |
+#define SYN_BD 0x010000 | |
+#define SYN_IT 0x020000 | |
+#define SYN_RV 0x040000 | |
+#define SYN_FGMK(f) (0x100000 | (f)) | |
+#define SYN_BGMK(b) (0x200000 | ((b) << 8)) | |
+ | |
+#define SYN_FLG 0xff0000 | |
+#define SYN_FGSET(a) ((a) & 0x1000ff) | |
+#define SYN_BGSET(a) ((a) & 0x20ff00) | |
+#define SYN_FG(a) ((a) & 0xff) | |
+#define SYN_BG(a) (((a) >> 8) & 0xff) | |
int *syn_highlight(char *ft, char *s); | |
char *syn_filetype(char *path); |