Align word wrapping with tab character

Also fixes handling whitespace directly after control codes.
master
C. McEnroe 2020-02-04 19:50:23 -05:00
parent f3fb466a31
commit d57df09511
3 changed files with 15 additions and 6 deletions

View File

@ -212,7 +212,7 @@ static void handlePrivmsg(struct Message *msg) {
if (query && !network) idColors[id] = hash(msg->user); if (query && !network) idColors[id] = hash(msg->user);
uiFormat( uiFormat(
id, Warm, tagTime(msg), id, Warm, tagTime(msg),
"\3%d%s%s%s\3 %s", "\3%d%s%s%s\3\t%s",
hash(msg->user), hash(msg->user),
(action ? "* " : notice ? "-" : "<"), (action ? "* " : notice ? "-" : "<"),
msg->nick, msg->nick,

2
irc.c
View File

@ -105,7 +105,7 @@ static void debug(char dir, const char *line) {
if (!self.debug) return; if (!self.debug) return;
size_t len = strcspn(line, "\r\n"); size_t len = strcspn(line, "\r\n");
uiFormat( uiFormat(
Debug, Cold, NULL, "\3%d%c%c\3 %.*s", Debug, Cold, NULL, "\3%d%c%c\3\t%.*s",
Gray, dir, dir, (int)len, line Gray, dir, dir, (int)len, line
); );
if (!isatty(STDERR_FILENO)) { if (!isatty(STDERR_FILENO)) {

17
ui.c
View File

@ -287,14 +287,24 @@ static void styleAdd(WINDOW *win, const char *str, bool show) {
getmaxyx(win, y, width); getmaxyx(win, y, width);
size_t len; size_t len;
int align = 0;
struct Style style = Reset; struct Style style = Reset;
while (*str) { while (*str) {
if (*str == ' ') { if (*str == '\t') {
waddch(win, ' ');
getyx(win, y, align);
str++;
} else if (*str == ' ') {
getyx(win, y, x); getyx(win, y, x);
const char *word = &str[strspn(str, " ")]; const char *word = &str[strspn(str, " ")];
if (width - x - 1 <= wordWidth(word)) { if (width - x - 1 <= wordWidth(word)) {
waddch(win, '\n'); waddch(win, '\n');
getyx(win, y, x);
wmove(win, y, align);
str = word; 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]); if (str - code > 1) waddnstr(win, &code[1], str - &code[1]);
} }
size_t sp = strspn(str, " "); size_t ws = strcspn(str, "\t ");
sp += strcspn(&str[sp], " "); if (ws < len) len = ws;
if (sp < len) len = sp;
wattr_set( wattr_set(
win, win,