if (name[1] == '0') // "w0": first visible line
{
#ifdef FEAT_TERMINAL
- if (bt_terminal(curwin->w_buffer) && curwin->w_buffer->b_term != NULL)
+ if (bt_terminal(curwin->w_buffer)
+ && curwin->w_buffer->b_term != NULL
+ && !term_in_normal_mode(curwin->w_buffer))
may_move_terminal_to_buffer(curwin->w_buffer->b_term, TRUE);
#endif
update_topline();
else if (name[1] == '$') // "w$": last visible line
{
#ifdef FEAT_TERMINAL
- if (bt_terminal(curwin->w_buffer) && curwin->w_buffer->b_term != NULL)
+ if (bt_terminal(curwin->w_buffer)
+ && curwin->w_buffer->b_term != NULL
+ && !term_in_normal_mode(curwin->w_buffer))
may_move_terminal_to_buffer(curwin->w_buffer->b_term, TRUE);
#endif
validate_botline();
buf[i++] = restart_edit;
}
# ifdef FEAT_TERMINAL
- else if (term_in_normal_mode())
+ else if (term_in_normal_mode(curbuf))
buf[i++] = 't';
# endif
}
if (VIsual_active && (cap->cmdchar == 'A' || cap->cmdchar == 'I'))
{
#ifdef FEAT_TERMINAL
- if (term_in_normal_mode())
+ if (term_in_normal_mode(curbuf))
{
end_visual_mode();
clearop(cap->oap);
nv_object(cap);
}
#ifdef FEAT_TERMINAL
- else if (term_in_normal_mode())
+ else if (term_in_normal_mode(curbuf))
{
clearop(cap->oap);
term_enter_job_mode();
#ifdef FEAT_TERMINAL
// Cannot set 'modifiable' when in Terminal mode.
- if (curbuf->b_p_ma && (term_in_normal_mode() || (bt_terminal(curbuf)
+ if (curbuf->b_p_ma && (term_in_normal_mode(curbuf) || (bt_terminal(curbuf)
&& curbuf->b_term != NULL && !term_is_finished(curbuf))))
{
curbuf->b_p_ma = FALSE;
int term_try_stop_job(buf_T *buf);
void may_move_terminal_to_buffer(term_T *term, int redraw);
int term_check_timers(int next_due_arg, proftime_T *now);
-int term_in_normal_mode(void);
+int term_in_normal_mode(buf_T *buf);
void term_enter_job_mode(void);
void check_no_reduce_keys(void);
int send_keys_to_term(term_T *term, int c, int modmask, int typed);
* Terminal-Normal mode.
*/
int
-term_in_normal_mode(void)
+term_in_normal_mode(buf_T *buf)
{
- term_T *term = curbuf->b_term;
+ term_T *term = buf->b_term;
return term != NULL && term->tl_normal_mode;
}
call assert_equal(13, str2nr(result[1]) - str2nr(result[0]))
call assert_true(str2nr(result[0]) > 1)
+ " Regression: line('w0') and line('w$') must not move cursor position
+ call term_sendkeys(buf, "gg")
+ call term_sendkeys(buf, ":call line('w0')\<cr>")
+ call term_sendkeys(buf, ":call line('w$')\<cr>")
+ call term_wait(buf)
+ call WaitForAssert({-> assert_match("for i in", term_getline(buf, 1))})
+ call WaitForAssert({-> assert_match("line12", term_getline(buf, 13))})
+
call StopVimInTerminal(buf)
" this crashed
new
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 181,
/**/
180,
/**/