mirror of
https://github.com/mpv-player/mpv
synced 2025-03-19 01:47:38 +00:00
msg: simplify the line_skip calculation
Make it more straightforward by always calculating top offset first instead of having two branches, that tries to calc it directly. This also fixes missing negative check before `\033[%dA` which was in practice only problem on macOS which was handling negative values, while in fact it shouldn't. Fixes: #13484
This commit is contained in:
parent
188155457d
commit
17a0756ed3
20
common/msg.c
20
common/msg.c
@ -228,21 +228,15 @@ static void prepare_prefix(struct mp_log_root *root, bstr *out, int lev, int ter
|
||||
bstr up_clear = bstr0("\033[A\033[K");
|
||||
for (int i = 1; i < root->status_lines; ++i)
|
||||
bstr_xappend(root, out, up_clear);
|
||||
// Reposition cursor after last message
|
||||
line_skip = (new_lines ? new_lines : root->blank_lines) - root->status_lines;
|
||||
line_skip = MPMIN(root->blank_lines - root->status_lines, line_skip);
|
||||
if (line_skip)
|
||||
bstr_xappend_asprintf(root, out, "\033[%dA", line_skip);
|
||||
} else if (new_lines) {
|
||||
line_skip = new_lines - root->blank_lines;
|
||||
assert(root->status_lines > 0 && root->blank_lines >= root->status_lines);
|
||||
line_skip = root->blank_lines - root->status_lines;
|
||||
}
|
||||
|
||||
if (line_skip < 0) {
|
||||
// Reposition cursor to keep status line at the same line
|
||||
line_skip = MPMIN(root->blank_lines, -line_skip);
|
||||
if (line_skip)
|
||||
bstr_xappend_asprintf(root, out, "\033[%dB", line_skip);
|
||||
}
|
||||
if (new_lines)
|
||||
line_skip -= MPMAX(0, root->blank_lines - new_lines);
|
||||
|
||||
if (line_skip)
|
||||
bstr_xappend_asprintf(root, out, line_skip > 0 ? "\033[%dA" : "\033[%dB", abs(line_skip));
|
||||
|
||||
root->blank_lines = MPMAX(0, root->blank_lines - term_lines);
|
||||
root->status_lines = new_lines;
|
||||
|
Loading…
Reference in New Issue
Block a user