Apply word wrapping to tabs before setting align
This fixes long URLs right after the initial \t being wrapped and line counted incorrectly.weechat-hashes
parent
ab94728913
commit
d5c4e7e371
21
ui.c
21
ui.c
|
@ -493,7 +493,7 @@ static void windowScrollUnread(struct Window *window) {
|
|||
}
|
||||
|
||||
static int wordWidth(const char *str) {
|
||||
size_t len = strcspn(str, " ");
|
||||
size_t len = strcspn(str, " \t");
|
||||
int width = 0;
|
||||
while (len) {
|
||||
wchar_t wc;
|
||||
|
@ -515,18 +515,10 @@ static int wordWrap(WINDOW *win, const char *str) {
|
|||
int align = 0;
|
||||
struct Style style = Reset;
|
||||
while (*str) {
|
||||
if (*str == '\t') {
|
||||
if (align) {
|
||||
waddch(win, '\t');
|
||||
str++;
|
||||
} else {
|
||||
waddch(win, ' ');
|
||||
getyx(win, y, align);
|
||||
str++;
|
||||
}
|
||||
} else if (*str == ' ') {
|
||||
char ch = *str;
|
||||
if (ch == ' ' || ch == '\t') {
|
||||
getyx(win, y, x);
|
||||
const char *word = &str[strspn(str, " ")];
|
||||
const char *word = &str[strspn(str, " \t")];
|
||||
if (width - x - 1 <= wordWidth(word)) {
|
||||
lines += 1 + (align + wordWidth(word)) / width;
|
||||
waddch(win, '\n');
|
||||
|
@ -534,10 +526,13 @@ static int wordWrap(WINDOW *win, const char *str) {
|
|||
wmove(win, y, align);
|
||||
str = word;
|
||||
} else {
|
||||
waddch(win, ' ');
|
||||
waddch(win, (align ? ch : ' '));
|
||||
str++;
|
||||
}
|
||||
}
|
||||
if (ch == '\t' && !align) {
|
||||
getyx(win, y, align);
|
||||
}
|
||||
|
||||
size_t len = styleParse(&style, &str);
|
||||
size_t ws = strcspn(str, " \t");
|
||||
|
|
Loading…
Reference in New Issue