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