Align word wrapping with tab character

Also fixes handling whitespace directly after control codes.
weechat-hashes
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);
uiFormat(
id, Warm, tagTime(msg),
"\3%d%s%s%s\3 %s",
"\3%d%s%s%s\3\t%s",
hash(msg->user),
(action ? "* " : notice ? "-" : "<"),
msg->nick,

2
irc.c
View File

@ -105,7 +105,7 @@ static void debug(char dir, const char *line) {
if (!self.debug) return;
size_t len = strcspn(line, "\r\n");
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
);
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);
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,