diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 05:26:26 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 05:26:26 -0700 |
commit | 9ff7f30cb1e0e743655548c6b10da5ef5641ac00 (patch) | |
tree | 63d5efdc69efa07f5f229c1e70e9670d681532bd | |
parent | e5c48d3b66a434156699402031c0cd78628a9850 (diff) | |
download | pw-9ff7f30cb1e0e743655548c6b10da5ef5641ac00.tar.gz pw-9ff7f30cb1e0e743655548c6b10da5ef5641ac00.tar.bz2 pw-9ff7f30cb1e0e743655548c6b10da5ef5641ac00.zip |
Toggle highlighting of marker chars.
-rw-r--r-- | pw.1 | 10 | ||||
-rw-r--r-- | pw.c | 41 |
2 files changed, 45 insertions, 6 deletions
@@ -210,6 +210,16 @@ assigned to the middle pane. After that, the width of the pane can be adjusted without affecting what portion of the line it shows, independently of any horizontal scrolling adjustments occurring in the right pane. +.IP "\fBCtrl-I, Tab\fP" +Toggle the highlighting of separator characters appearing in the line +display. The when toggled on, the +.BR > , +.B < +and +.B | +characters which indicate line truncation and pane separation are +shown in inverse video (dark foreground, light background). + .IP \fISpace\fP Suspend the acquisition of new snapshots. In suspended mode, input continues to pass through the FIFO, but new snapshots of data aren't @@ -76,7 +76,8 @@ enum status_flags { stat_grep = 64, // grep mode stat_force = 128, // force refresh even if clean stat_lino = 256, // render line numbers - stat_bkgnd = 512 // running in the background + stat_bkgnd = 512, // running in the background + stat_hlite = 1024 // running in the background }; typedef struct pwstate { @@ -337,6 +338,29 @@ static void clreol(int nl) putchar('\n'); } +static void hlon(void) +{ + printf("\033[7m"); +} + +static void hloff(void) +{ + printf("\033[m"); +} + +#define with_hl(pw, expr) do { \ + if ((pw)->stat & stat_hlite) \ + hlon(); \ + expr; \ + if ((pw)->stat & stat_hlite) \ + hloff(); \ +} while (0) + +static void hlchar(pwstate *pw, int ch) +{ + with_hl(pw, putchar(ch)); +} + static void drawline(pwstate *pw, const char *line, int lineno) { const char *oline = line; @@ -372,7 +396,7 @@ static void drawline(pwstate *pw, const char *line, int lineno) len = 0; } else if (len - delta <= vsplit2) { if (vsplit1) { - putchar('|'); + hlchar(pw, '|'); delta++; } fputs(line + delta, stdout); @@ -382,7 +406,7 @@ static void drawline(pwstate *pw, const char *line, int lineno) } else { unsigned start = 0; if (vsplit1) { - putchar('|'); + hlchar(pw, '|'); start++; } for (unsigned i = start; i < vsplit2; i++) @@ -398,7 +422,7 @@ static void drawline(pwstate *pw, const char *line, int lineno) if (pw->hpos || vsplit1 || vsplit2) { line += pw->hpos + 1; len -= pw->hpos + 1; - putchar('>'); + hlchar(pw, '>'); columns--; } if (len < (size_t) columns) { @@ -407,11 +431,12 @@ static void drawline(pwstate *pw, const char *line, int lineno) } else { for (int i = 0; i < columns - 1; i++) putchar(line[i]); - puts("<"); + hlchar(pw, '<'); + putchar('\n'); } } else { if (endmark) - putchar('>'); + hlchar(pw, '>'); clreol(1); } } @@ -1197,6 +1222,10 @@ int main(int argc, char **argv) pw.stat |= stat_force; } break; + case ctrl('i'): + pw.stat ^= stat_hlite; + pw.stat |= stat_force; + break; case 'j': if (pw.hist > 0) { pw.hist--; |