From e598811e76a4ee6666b680545097fb06b0ba59aa Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Sat, 20 Oct 2018 23:43:47 +0200 Subject: 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 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. --- test/functional/eval/input_spec.lua | 8 ++++---- test/functional/ui/cmdline_highlight_spec.lua | 2 +- test/functional/ui/cmdline_spec.lua | 11 +++++------ test/functional/ui/fold_spec.lua | 8 ++++---- test/functional/ui/highlight_spec.lua | 10 +++++----- test/functional/ui/mouse_spec.lua | 4 ++-- 6 files changed, 21 insertions(+), 22 deletions(-) (limited to 'test') diff --git a/test/functional/eval/input_spec.lua b/test/functional/eval/input_spec.lua index 82e75d7a8e..8c65297ac6 100644 --- a/test/functional/eval/input_spec.lua +++ b/test/functional/eval/input_spec.lua @@ -149,7 +149,7 @@ describe('input()', function() {EOB:~ }| {T:Foo>}Bar^ | ]]) - command('redraw!') + command('mode') screen:expect{grid=[[ | {EOB:~ }| @@ -165,7 +165,7 @@ describe('input()', function() {EOB:~ }| {T:Foo>}Ba^ | ]]) - command('redraw!') + command('mode') screen:expect{grid=[[ | {EOB:~ }| @@ -347,7 +347,7 @@ describe('inputdialog()', function() {EOB:~ }| {T:Foo>}Bar^ | ]]) - command('redraw!') + command('mode') screen:expect{grid=[[ | {EOB:~ }| @@ -363,7 +363,7 @@ describe('inputdialog()', function() {EOB:~ }| {T:Foo>}Ba^ | ]]) - command('redraw!') + command('mode') screen:expect{grid=[[ | {EOB:~ }| diff --git a/test/functional/ui/cmdline_highlight_spec.lua b/test/functional/ui/cmdline_highlight_spec.lua index 2eab44dc90..1568b7816e 100644 --- a/test/functional/ui/cmdline_highlight_spec.lua +++ b/test/functional/ui/cmdline_highlight_spec.lua @@ -32,7 +32,7 @@ before_each(function() highlight RBP4 guibg=Blue let g:NUM_LVLS = 4 function Redraw() - redraw! + mode return '' endfunction let g:id = '' diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index e86414fe5f..0ebb62f78f 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -253,7 +253,7 @@ local function test_cmdline(linegrid) ]], cmdline=expectation} -- erase information, so we check if it is retransmitted - command("redraw!") + command("mode") screen:expect{grid=[[ ^ | {1:~ }| @@ -320,7 +320,7 @@ local function test_cmdline(linegrid) {{' line1'}}, }} - command("redraw!") + command("mode") screen:expect{grid=[[ ^ | {1:~ }| @@ -411,7 +411,7 @@ local function test_cmdline(linegrid) pos = 4, }}} - command("redraw!") + command("mode") screen:expect{grid=[[ | {2:[No Name] }| @@ -435,9 +435,9 @@ local function test_cmdline(linegrid) feed("") screen:expect{grid=[[ - | + ^ | {2:[No Name] }| - {1::}make^ | + {1::}make | {3:[Command Line] }| | ]], cmdline={{ @@ -446,7 +446,6 @@ local function test_cmdline(linegrid) pos = 4, }}} - screen.cmdline = {} command("redraw!") screen:expect{grid=[[ ^ | diff --git a/test/functional/ui/fold_spec.lua b/test/functional/ui/fold_spec.lua index 9c5a59b58d..39a5c10bb7 100644 --- a/test/functional/ui/fold_spec.lua +++ b/test/functional/ui/fold_spec.lua @@ -65,7 +65,7 @@ describe("folded lines", function() {1:~ }| {1:~ }| {1:~ }| - | + :set noarabicshape | ]]) feed_command("set number foldcolumn=2") @@ -114,7 +114,7 @@ describe("folded lines", function() {1: ~}| {1: ~}| {1: ~}| - | + :set arabicshape | ]]) feed('zo') @@ -126,7 +126,7 @@ describe("folded lines", function() {1: ~}| {1: ~}| {1: ~}| - | + :set arabicshape | ]]) feed_command('set noarabicshape') @@ -138,7 +138,7 @@ describe("folded lines", function() {1: ~}| {1: ~}| {1: ~}| - | + :set noarabicshape | ]]) end) diff --git a/test/functional/ui/highlight_spec.lua b/test/functional/ui/highlight_spec.lua index 50df3c3606..55fc343e4c 100644 --- a/test/functional/ui/highlight_spec.lua +++ b/test/functional/ui/highlight_spec.lua @@ -122,7 +122,7 @@ describe('highlight defaults', function() {0:~ }| {0:~ }| {2:[No Name] }| - | + :vsp | ]]) -- navigate to verify that the attributes are properly moved feed('j') @@ -140,7 +140,7 @@ describe('highlight defaults', function() {0:~ }| {0:~ }| {1:[No Name] }| - | + :vsp | ]]) -- note that when moving to a window with small width nvim will increase -- the width of the new active window at the expense of a inactive window @@ -160,7 +160,7 @@ describe('highlight defaults', function() {0:~ }| {0:~ }| {2:[No Name] }| - | + :vsp | ]]) feed('l') screen:expect([[ @@ -177,7 +177,7 @@ describe('highlight defaults', function() {0:~ }| {0:~ }| {2:[No Name] }| - | + :vsp | ]]) feed('hh') screen:expect([[ @@ -194,7 +194,7 @@ describe('highlight defaults', function() {0:~ }| {0:~ }| {2:[No Name] }| - | + :vsp | ]]) end) diff --git a/test/functional/ui/mouse_spec.lua b/test/functional/ui/mouse_spec.lua index ff395adeb9..c531f838c1 100644 --- a/test/functional/ui/mouse_spec.lua +++ b/test/functional/ui/mouse_spec.lua @@ -530,7 +530,7 @@ describe('ui/mouse/input', function() mouse | support and selectio^n | {0:~ }| - | + :tabprevious | ]]) feed('<10,0>') -- go to second tab helpers.wait() @@ -540,7 +540,7 @@ describe('ui/mouse/input', function() ^this is bar | {0:~ }| {0:~ }| - | + :tabprevious | ]]) feed('<4,1>') screen:expect([[ -- cgit