diff options
author | June McEnroe <june@causal.agency> | 2020-02-04 19:50:23 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-02-04 19:50:23 -0500 |
commit | d57df09511a5e4136559ccdd01ab56e906827f96 (patch) | |
tree | 8d97953e11d81d11aca925ace1df79e1755e18a5 /ui.c | |
parent | Only check revents if nfds > 0 (diff) | |
download | test-d57df09511a5e4136559ccdd01ab56e906827f96.tar.gz test-d57df09511a5e4136559ccdd01ab56e906827f96.zip |
Align word wrapping with tab character
Also fixes handling whitespace directly after control codes.
Diffstat (limited to 'ui.c')
-rw-r--r-- | ui.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/ui.c b/ui.c index 0c2a64e..e93c08c 100644 --- a/ui.c +++ b/ui.c @@ -287,14 +287,24 @@ static void styleAdd(WINDOW *win, const char *str, bool show) { getmaxyx(win, y, width); size_t len; + int align = 0; struct Style style = Reset; while (*str) { - if (*str == ' ') { + if (*str == '\t') { + waddch(win, ' '); + getyx(win, y, align); + str++; + } else if (*str == ' ') { getyx(win, y, x); const char *word = &str[strspn(str, " ")]; if (width - x - 1 <= wordWidth(word)) { waddch(win, '\n'); + getyx(win, y, x); + wmove(win, y, align); str = word; + } else { + waddch(win, ' '); + str++; } } @@ -313,9 +323,8 @@ static void styleAdd(WINDOW *win, const char *str, bool show) { if (str - code > 1) waddnstr(win, &code[1], str - &code[1]); } - size_t sp = strspn(str, " "); - sp += strcspn(&str[sp], " "); - if (sp < len) len = sp; + size_t ws = strcspn(str, "\t "); + if (ws < len) len = ws; wattr_set( win, |