Skip to content

Commit

Permalink
terminal: disable 'scrolloff' (fixes flicker)
Browse files Browse the repository at this point in the history
Besides the special-case in get_scrolloff_value(), it makes sense for
'scrolloff' and 'sidescrolloff' to reflect the correct values (for
plugins, scripts, …).

ref 53d607af9c53accfd634435908fb79061f1212b9
ref #11915
ref #12230
  • Loading branch information
justinmk committed May 5, 2020
1 parent edd5b23 commit 7b764bb
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
7 changes: 7 additions & 0 deletions runtime/doc/nvim_terminal_emulator.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ mode" in a normal buffer, such as |i| or |:startinsert|. In this mode all keys
except <C-\><C-N> are sent to the underlying program. Use <C-\><C-N> to return
to normal-mode. |CTRL-\_CTRL-N|

Terminal-mode forces these local options:

'nocursorline'
'nocursorcolumn'
'scrolloff' = 0
'sidescrolloff' = 0

Terminal-mode has its own |:tnoremap| namespace for mappings, this can be used
to automate any terminal interaction.

Expand Down
8 changes: 7 additions & 1 deletion src/nvim/terminal.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,12 +343,16 @@ void terminal_enter(void)
RedrawingDisabled = false;

// Disable these options in terminal-mode. They are nonsense because cursor is
// placed at end of buffer to "follow" output.
// placed at end of buffer to "follow" output. #11072
win_T *save_curwin = curwin;
int save_w_p_cul = curwin->w_p_cul;
int save_w_p_cuc = curwin->w_p_cuc;
long save_w_p_so = curwin->w_p_so;
long save_w_p_siso = curwin->w_p_siso;
curwin->w_p_cul = false;
curwin->w_p_cuc = false;
curwin->w_p_so = 0;
curwin->w_p_siso = 0;

adjust_topline(s->term, buf, 0); // scroll to end
// erase the unfocused cursor
Expand All @@ -370,6 +374,8 @@ void terminal_enter(void)
if (save_curwin == curwin) { // save_curwin may be invalid (window closed)!
curwin->w_p_cul = save_w_p_cul;
curwin->w_p_cuc = save_w_p_cuc;
curwin->w_p_so = save_w_p_so;
curwin->w_p_siso = save_w_p_siso;
}

// draw the unfocused cursor
Expand Down
12 changes: 12 additions & 0 deletions test/functional/terminal/buffer_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ describe(':terminal buffer', function()
screen = thelpers.screen_setup()
end)

it('terminal-mode forces various options', function()
feed([[<C-\><C-N>]])
command('setlocal cursorline cursorcolumn scrolloff=4 sidescrolloff=7')
eq({ 1, 1, 4, 7 }, eval('[&l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]'))
eq('n', eval('mode()'))

-- Enter terminal-mode ("insert" mode in :terminal).
feed('i')
eq('t', eval('mode()'))
eq({ 0, 0, 0, 0 }, eval('[&l:cursorline, &l:cursorcolumn, &l:scrolloff, &l:sidescrolloff]'))
end)

describe('when a new file is edited', function()
before_each(function()
feed('<c-\\><c-n>:set bufhidden=wipe<cr>:enew<cr>')
Expand Down

0 comments on commit 7b764bb

Please sign in to comment.