forked from aniani/vim
patch 8.0.0732: when updating a buffer modeless selection is lost
Problem: When updating a buffer for a callback the modeless selection is lost. Solution: Do not insert or delete screen lines when redrawing for a callback and there is a modeless selection.
This commit is contained in:
26
src/screen.c
26
src/screen.c
@@ -112,6 +112,10 @@ static foldinfo_T win_foldinfo; /* info for 'foldcolumn' */
|
|||||||
static int compute_foldcolumn(win_T *wp, int col);
|
static int compute_foldcolumn(win_T *wp, int col);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Flag that is set when drawing for a callback, not from the main command
|
||||||
|
* loop. */
|
||||||
|
static int redrawing_for_callback = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Buffer for one screen line (characters and attributes).
|
* Buffer for one screen line (characters and attributes).
|
||||||
*/
|
*/
|
||||||
@@ -445,6 +449,8 @@ redraw_asap(int type)
|
|||||||
void
|
void
|
||||||
redraw_after_callback(void)
|
redraw_after_callback(void)
|
||||||
{
|
{
|
||||||
|
++redrawing_for_callback;
|
||||||
|
|
||||||
if (State == HITRETURN || State == ASKMORE)
|
if (State == HITRETURN || State == ASKMORE)
|
||||||
; /* do nothing */
|
; /* do nothing */
|
||||||
else if (State & CMDLINE)
|
else if (State & CMDLINE)
|
||||||
@@ -479,6 +485,8 @@ redraw_after_callback(void)
|
|||||||
gui_mch_flush();
|
gui_mch_flush();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
--redrawing_for_callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -9742,8 +9750,14 @@ screen_ins_lines(
|
|||||||
* - the screen has to be redrawn completely
|
* - the screen has to be redrawn completely
|
||||||
* - the line count is less than one
|
* - the line count is less than one
|
||||||
* - the line count is more than 'ttyscroll'
|
* - the line count is more than 'ttyscroll'
|
||||||
|
* - redrawing for a callback and there is a modeless selection
|
||||||
*/
|
*/
|
||||||
if (!screen_valid(TRUE) || line_count <= 0 || line_count > p_ttyscroll)
|
if (!screen_valid(TRUE) || line_count <= 0 || line_count > p_ttyscroll
|
||||||
|
#ifdef FEAT_CLIPBOARD
|
||||||
|
|| (clip_star.state != SELECT_CLEARED
|
||||||
|
&& redrawing_for_callback > 0)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -9959,9 +9973,15 @@ screen_del_lines(
|
|||||||
* - the screen has to be redrawn completely
|
* - the screen has to be redrawn completely
|
||||||
* - the line count is less than one
|
* - the line count is less than one
|
||||||
* - the line count is more than 'ttyscroll'
|
* - the line count is more than 'ttyscroll'
|
||||||
|
* - redrawing for a callback and there is a modeless selection
|
||||||
*/
|
*/
|
||||||
if (!screen_valid(TRUE) || line_count <= 0 ||
|
if (!screen_valid(TRUE) || line_count <= 0
|
||||||
(!force && line_count > p_ttyscroll))
|
|| (!force && line_count > p_ttyscroll)
|
||||||
|
#ifdef FEAT_CLIPBOARD
|
||||||
|
|| (clip_star.state != SELECT_CLEARED
|
||||||
|
&& redrawing_for_callback > 0)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -769,6 +769,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
732,
|
||||||
/**/
|
/**/
|
||||||
731,
|
731,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user