aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2018-06-06 00:34:08 +0200
committerGitHub <noreply@github.com>2018-06-06 00:34:08 +0200
commit5861dc596687b48e5817f944cdcffca50592fb38 (patch)
tree8777a300d7f84612932ca3f5efc689968f32ac49
parent078202d6f8b4f7312e88790ea0af0b67bf300951 (diff)
parent37e00c6e656435c8b58d442aa5853c94a76cabca (diff)
downloadrneovim-5861dc596687b48e5817f944cdcffca50592fb38.tar.gz
rneovim-5861dc596687b48e5817f944cdcffca50592fb38.tar.bz2
rneovim-5861dc596687b48e5817f944cdcffca50592fb38.zip
Merge #8461 from bfredl/scrollstatus
-rw-r--r--src/nvim/ex_getln.c5
-rw-r--r--test/functional/ex_cmds/debug_spec.lua110
-rw-r--r--test/functional/ui/cmdline_spec.lua101
3 files changed, 194 insertions, 22 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index f62b0a2060..3eb66cd2dc 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -295,10 +295,7 @@ static uint8_t *command_line_enter(int firstc, long count, int indent)
redir_off = true; // don't redirect the typed command
if (!cmd_silent) {
- s->i = msg_scrolled;
- msg_scrolled = 0; // avoid wait_return message
gotocmdline(true);
- msg_scrolled += s->i;
redrawcmdprompt(); // draw prompt or indent
set_cmdspos();
}
@@ -349,7 +346,7 @@ static uint8_t *command_line_enter(int firstc, long count, int indent)
// redraw the statusline for statuslines that display the current mode
// using the mode() function.
- if (KeyTyped) {
+ if (KeyTyped && msg_scrolled == 0) {
curwin->w_redr_status = true;
redraw_statuslines();
}
diff --git a/test/functional/ex_cmds/debug_spec.lua b/test/functional/ex_cmds/debug_spec.lua
new file mode 100644
index 0000000000..5dad8098ea
--- /dev/null
+++ b/test/functional/ex_cmds/debug_spec.lua
@@ -0,0 +1,110 @@
+local helpers = require('test.functional.helpers')(after_each)
+local Screen = require('test.functional.ui.screen')
+local feed = helpers.feed
+local clear = helpers.clear
+
+describe(':debug', function()
+ local screen
+ before_each(function()
+ clear()
+ screen = Screen.new(50, 14)
+ screen:set_default_attr_ids({
+ [1] = {bold = true, foreground = Screen.colors.Blue1},
+ [2] = {bold = true, reverse = true},
+ [3] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
+ [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
+ })
+ screen:attach()
+ end)
+ it('scrolls messages correctly', function()
+ feed(':echoerr bork<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {2: }|
+ {3:E121: Undefined variable: bork} |
+ {3:E15: Invalid expression: bork} |
+ {4:Press ENTER or type command to continue}^ |
+ ]])
+
+ feed(':debug echo "aa"| echo "bb"<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {2: }|
+ {3:E121: Undefined variable: bork} |
+ {3:E15: Invalid expression: bork} |
+ Entering Debug mode. Type "cont" to continue. |
+ cmd: echo "aa"| echo "bb" |
+ >^ |
+ ]])
+
+ feed('step<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {2: }|
+ {3:E121: Undefined variable: bork} |
+ {3:E15: Invalid expression: bork} |
+ Entering Debug mode. Type "cont" to continue. |
+ cmd: echo "aa"| echo "bb" |
+ >step |
+ aa |
+ cmd: echo "bb" |
+ >^ |
+ ]])
+
+ feed('step<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {2: }|
+ {3:E121: Undefined variable: bork} |
+ {3:E15: Invalid expression: bork} |
+ Entering Debug mode. Type "cont" to continue. |
+ cmd: echo "aa"| echo "bb" |
+ >step |
+ aa |
+ cmd: echo "bb" |
+ >step |
+ bb |
+ {4:Press ENTER or type command to continue}^ |
+ ]])
+
+ feed('<cr>')
+ screen:expect([[
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ |
+ ]])
+ end)
+end)
diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua
index 41c290a462..5ce49822e5 100644
--- a/test/functional/ui/cmdline_spec.lua
+++ b/test/functional/ui/cmdline_spec.lua
@@ -22,6 +22,8 @@ describe('external cmdline', function()
[1] = {bold = true, foreground = Screen.colors.Blue1},
[2] = {reverse = true},
[3] = {bold = true, reverse = true},
+ [4] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
+ [5] = {bold = true, foreground = Screen.colors.SeaGreen4},
})
screen:set_on_event_handler(function(name, data)
if name == "cmdline_show" then
@@ -157,24 +159,87 @@ describe('external cmdline', function()
end)
end)
- it("redraws statusline on entering", function()
- command('set laststatus=2')
- command('set statusline=%{mode()}')
- feed(':')
- screen:expect([[
- |
- {1:~ }|
- {1:~ }|
- {3:c^ }|
- |
- ]], nil, nil, function()
- eq({{
- content = { { {}, "" } },
- firstc = ":",
- indent = 0,
- pos = 0,
- prompt = ""
- }}, cmdline)
+ describe("redraws statusline on entering", function()
+ before_each(function()
+ command('set laststatus=2')
+ command('set statusline=%{mode()}')
+ end)
+
+ it('from normal mode', function()
+ feed(':')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {3:c^ }|
+ |
+ ]], nil, nil, function()
+ eq({{
+ content = { { {}, "" } },
+ firstc = ":",
+ indent = 0,
+ pos = 0,
+ prompt = ""
+ }}, cmdline)
+ end)
+ end)
+
+ it('but not with scrolled messages', function()
+ screen:try_resize(50,10)
+ feed(':echoerr doesnotexist<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {3: }|
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {5:Press ENTER or type command to continue}^ |
+ ]])
+ feed(':echoerr doesnotexist<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {3: }|
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {5:Press ENTER or type command to continue}^ |
+ ]])
+
+ feed(':echoerr doesnotexist<cr>')
+ screen:expect([[
+ |
+ {1:~ }|
+ {3: }|
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {4:E121: Undefined variable: doesnotexist} |
+ {4:E15: Invalid expression: doesnotexist} |
+ {5:Press ENTER or type command to continue}^ |
+ ]])
+
+ feed('<cr>')
+ screen:expect([[
+ ^ |
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {1:~ }|
+ {3:n }|
+ |
+ ]])
end)
end)