mirror of
https://github.com/neovim/neovim.git
synced 2025-09-27 05:28:33 +00:00
ui: disable clearing almost everywhere
Avoid clearing the screen in most situations. NOT_VALID should be equivalent to CLEAR unless some external force messed up the terminal, for these situations <c-l> and :mode will still clear the screen. Also eliminate some obsolete code in screen.c, that dealt with that in vim drawing window 1 can mess up window 2, but this never happens in nvim. But what about slow terminals? There is two common meanings in which a terminal is said to be "slow": Most commonly (and in the sense of vim:s nottyfast) it means low bandwidth for sending bytes from nvim to the terminal. If the screen is very similar before and after the update_screen(CLEAR) this change should reduce bandwidth. If the screen is quite different, but there is no new regions of contiguous whitespace, clearing doesn't reduce bandwidth significantly. If the new screen contains a lot of whitespace, it will depend of if vsplits are used or not: as long as there is no vsplits, ce is used to cheaply clear the rest of the line, so full-screen clear is not needed to reduce bandwith. However a left vsplit currently needs to be padded with whitespace all the way to the separator. It is possible ec (clear N chars) can be used to reduce bandwidth here if this is a problem. (All of this assumes that one doesn't set Normal guibg=... on a non-BCE terminal, if you do you are doomed regardless of this change). Slow can also mean that drawing pixels on the screen is slow. E-ink screens is a recent example. Avoiding clearing and redrawing the unchanged part of the screen will always improve performance in these cases.
This commit is contained in:
@@ -832,12 +832,11 @@ void msg_end_prompt(void)
|
||||
lines_left = -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* wait for the user to hit a key (normally a return)
|
||||
* if 'redraw' is TRUE, clear and redraw the screen
|
||||
* if 'redraw' is FALSE, just redraw the screen
|
||||
* if 'redraw' is -1, don't redraw at all
|
||||
*/
|
||||
/// wait for the user to hit a key (normally a return)
|
||||
///
|
||||
/// if 'redraw' is true, redraw the entire screen NOT_VALID
|
||||
/// if 'redraw' is false, do a normal redraw
|
||||
/// if 'redraw' is -1, don't redraw at all
|
||||
void wait_return(int redraw)
|
||||
{
|
||||
int c;
|
||||
@@ -847,8 +846,9 @@ void wait_return(int redraw)
|
||||
int save_Recording;
|
||||
FILE *save_scriptout;
|
||||
|
||||
if (redraw == TRUE)
|
||||
must_redraw = CLEAR;
|
||||
if (redraw == true) {
|
||||
redraw_all_later(NOT_VALID);
|
||||
}
|
||||
|
||||
/* If using ":silent cmd", don't wait for a return. Also don't set
|
||||
* need_wait_return to do it later. */
|
||||
|
Reference in New Issue
Block a user