diff options
author | B. Watson <urchlay@slackware.uk> | 2024-12-21 03:59:23 -0500 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-12-21 03:59:23 -0500 |
commit | 3aa0d464fde753af26341d0c1a8740e756818582 (patch) | |
tree | f8d9e19e0ac505f1596ae4dbd742ed3696f89334 /uxd.c | |
parent | e1d4e3bbb5ef949bd9c9686e8e8c717cd7f39c5e (diff) | |
download | uxd-3aa0d464fde753af26341d0c1a8740e756818582.tar.gz |
inverse special hilight for multibyte specials
Diffstat (limited to 'uxd.c')
-rw-r--r-- | uxd.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -67,7 +67,8 @@ extern int optind; #define HL_NORMAL 0 #define HL_NORM_INV 1 #define HL_SPECIAL 2 -#define HL_BAD 3 +#define HL_SPEC_INV 3 +#define HL_BAD 4 /* terminal codes for mono highlighting. */ #define MONO_NORMAL 0 @@ -123,7 +124,7 @@ int filepos = 0; /* Unicode control character printable equivalents. For 0, use the "empty set" symbol. It's a lot more readable than the "nul" symbol, ␀. Escape, tab, newline, space are what urxvt uses in - its "keycap picture" mode. The rest of there are hard to read at + its "keycap picture" mode. The rest of these are hard to read at normal font sizes, but it's still better than using a dot for everything like xxd does. */ char * const special_symbols[] = { @@ -139,7 +140,7 @@ char * const special_symbols[] = { int alternate_colors = 1; /* -1 */ int print_info_opt = 0; /* -i */ int bold = 0; /* -b */ -int hilite_multi = 0; /* -r */ +int hilite_multi = 1; /* -r */ int mono = 0; /* -m */ long display_offset = 0; /* -o */ long seekpos = 0; /* -s, -S */ @@ -305,7 +306,7 @@ void parse_args(int argc, char **argv) { } break; case 'r': - hilite_multi = 1; break; + hilite_multi = 0; break; case 'm': mono = 1; break; case 'o': @@ -444,6 +445,10 @@ void append_color(char *buf, int hl_type) { fgcolor = special_color; bgcolor = 0; break; + case HL_SPEC_INV: + fgcolor = 0; + bgcolor = special_color; + break; case HL_BAD: default: fgcolor = 0; @@ -471,6 +476,7 @@ void append_mono(char *buf, int hl_type) { code = cur_normal_hilite ? MONO_UNDERLINE : MONO_NORMAL; break; case HL_SPECIAL: + case HL_SPEC_INV: code = MONO_BOLD; break; default: @@ -623,14 +629,14 @@ char *classify_char(int *hl, unsigned char *bytes, int cont_count) { } if(cont_count == 2 && is_bom(bytes)) { - *hl = HL_SPECIAL; + *hl = HL_SPEC_INV; return PRINT_BOM; } if(is_overlong(cont_count, bytes)) { /* java mode (MUTF-8) allows exactly one overlong: */ if(java_mode && cont_count == 1 && bytes[0] == 0xc0 && bytes[1] == 0x80) { - *hl = HL_SPECIAL; /* or should it be normal? */ + *hl = HL_SPEC_INV; return get_special(0); } else if(permissive) { *hl = HL_NORMAL; @@ -642,7 +648,7 @@ char *classify_char(int *hl, unsigned char *bytes, int cont_count) { if(is_surrogate(cont_count, bytes)) { if(wtf8_mode || permissive) { - *hl = HL_SPECIAL; + *hl = HL_SPEC_INV; } else { *hl = HL_BAD; } @@ -651,7 +657,7 @@ char *classify_char(int *hl, unsigned char *bytes, int cont_count) { if(is_out_of_range(cont_count, bytes)) { if(permissive) { - *hl = HL_SPECIAL; + *hl = HL_SPEC_INV; } else { *hl = HL_BAD; } |