:terminal : set topline based on window height #8325

This commit is contained in:
Justin M. Keyes 2019-02-06 04:12:14 +01:00 committed by GitHub
parent aaa8c3d711
commit 1204421888
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 29 additions and 14 deletions

View File

@ -1304,8 +1304,6 @@ static void redraw(bool restore_cursor)
static void adjust_topline(Terminal *term, buf_T *buf, long added)
{
int height, width;
vterm_get_size(term->vt, &height, &width);
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
if (wp->w_buffer == buf) {
linenr_T ml_end = buf->b_ml.ml_line_count;
@ -1314,7 +1312,7 @@ static void adjust_topline(Terminal *term, buf_T *buf, long added)
if (following || (wp == curwin && is_focused(term))) {
// "Follow" the terminal output
wp->w_cursor.lnum = ml_end;
set_topline(wp, MAX(wp->w_cursor.lnum - height + 1, 1));
set_topline(wp, MAX(wp->w_cursor.lnum - wp->w_height + 1, 1));
} else {
// Ensure valid cursor for each window displaying this terminal.
wp->w_cursor.lnum = MIN(wp->w_cursor.lnum, ml_end);

View File

@ -8,7 +8,7 @@ local exit_altscreen = thelpers.exit_altscreen
if helpers.pending_win32(pending) then return end
describe('terminal altscreen', function()
describe(':terminal altscreen', function()
local screen
before_each(function()

View File

@ -6,7 +6,7 @@ local eval, feed_command, source = helpers.eval, helpers.feed_command, helpers.s
local eq, neq = helpers.eq, helpers.neq
local write_file = helpers.write_file
describe('terminal buffer', function()
describe(':terminal buffer', function()
local screen
before_each(function()

View File

@ -7,7 +7,7 @@ local feed_command = helpers.feed_command
local hide_cursor = thelpers.hide_cursor
local show_cursor = thelpers.show_cursor
describe('terminal cursor', function()
describe(':terminal cursor', function()
local screen
before_each(function()

View File

@ -5,7 +5,7 @@ local feed, clear, nvim = helpers.feed, helpers.clear, helpers.nvim
local nvim_dir, command = helpers.nvim_dir, helpers.command
local eq, eval = helpers.eq, helpers.eval
describe('terminal window highlighting', function()
describe(':terminal window highlighting', function()
local screen
before_each(function()

View File

@ -4,7 +4,7 @@ local clear, eq, eval = helpers.clear, helpers.eq, helpers.eval
local feed, nvim = helpers.feed, helpers.nvim
local feed_data = thelpers.feed_data
describe('terminal mouse', function()
describe(':terminal mouse', function()
local screen
before_each(function()

View File

@ -12,7 +12,7 @@ local curbufmeths = helpers.curbufmeths
local nvim = helpers.nvim
local feed_data = thelpers.feed_data
describe('terminal scrollback', function()
describe(':terminal scrollback', function()
local screen
before_each(function()
@ -344,7 +344,7 @@ describe('terminal scrollback', function()
end)
end)
describe('terminal prints more lines than the screen height and exits', function()
describe(':terminal prints more lines than the screen height and exits', function()
it('will push extra lines to scrollback', function()
clear()
local screen = Screen.new(30, 7)
@ -460,7 +460,7 @@ describe("'scrollback' option", function()
screen:detach()
end)
it('defaults to 10000 in terminal buffers', function()
it('defaults to 10000 in :terminal buffers', function()
set_fake_shell()
command('terminal')
eq(10000, curbufmeths.get_option('scrollback'))

View File

@ -20,7 +20,7 @@ local read_file = helpers.read_file
if helpers.pending_win32(pending) then return end
describe('tui', function()
describe('TUI', function()
local screen
before_each(function()

View File

@ -3,8 +3,12 @@ local thelpers = require('test.functional.terminal.helpers')
local feed, clear = helpers.feed, helpers.clear
local wait = helpers.wait
local iswin = helpers.iswin
local command = helpers.command
local retry = helpers.retry
local eq = helpers.eq
local eval = helpers.eval
describe('terminal window', function()
describe(':terminal window', function()
local screen
before_each(function()
@ -12,6 +16,19 @@ describe('terminal window', function()
screen = thelpers.screen_setup()
end)
it('sets topline correctly #8556', function()
-- Test has hardcoded assumptions of dimensions.
eq(7, eval('&lines'))
command('set shell=sh')
command('terminal')
retry(nil, nil, function() assert(nil ~= eval('b:terminal_job_pid')) end)
-- Terminal/shell contents must exceed the height of this window.
command('topleft 1split')
feed([[i<cr>]])
-- Check topline _while_ in terminal-mode.
retry(nil, nil, function() eq(6, eval('winsaveview()["topline"]')) end)
end)
describe("with 'number'", function()
it('wraps text', function()
feed([[<C-\><C-N>]])

View File

@ -9,7 +9,7 @@ local eval = helpers.eval
local iswin = helpers.iswin
local retry = helpers.retry
describe('terminal', function()
describe(':terminal', function()
local screen
before_each(function()