| Date: Mon, 22 Jun 2015 18:23:24 +0430
syn: handle non-black terminal forground colour
Reported by Dirk-Wilhelm Peters .
Diffstat:
M syn.c | 7 +++----
M term.c | 18 ++++++++++--------
M vi.h | 17 +++++++++++------
3 files changed, 24 insertions(+), 18 deletions(-)
--- |
| 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) |
| 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 |
| 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); |