Mercurial > vim
changeset 11698:4f59d2a66bf7 v8.0.0732
patch 8.0.0732: when updating a buffer modeless selection is lost
commit https://github.com/vim/vim/commit/80dd3f9d41ce2ff6ab3544cdb266627bbdfc34a6
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jul 19 12:51:52 2017 +0200
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 19 Jul 2017 13:00:03 +0200 |
parents | 4560036348af |
children | 2b7abaf3a2a0 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/screen.c +++ b/src/screen.c @@ -112,6 +112,10 @@ static foldinfo_T win_foldinfo; /* info static int compute_foldcolumn(win_T *wp, int col); #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). */ @@ -445,6 +449,8 @@ redraw_asap(int type) void redraw_after_callback(void) { + ++redrawing_for_callback; + if (State == HITRETURN || State == ASKMORE) ; /* do nothing */ else if (State & CMDLINE) @@ -479,6 +485,8 @@ redraw_after_callback(void) gui_mch_flush(); } #endif + + --redrawing_for_callback; } /* @@ -9742,8 +9750,14 @@ screen_ins_lines( * - the screen has to be redrawn completely * - the line count is less than one * - 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; /* @@ -9959,9 +9973,15 @@ screen_del_lines( * - the screen has to be redrawn completely * - the line count is less than one * - the line count is more than 'ttyscroll' + * - redrawing for a callback and there is a modeless selection */ - if (!screen_valid(TRUE) || line_count <= 0 || - (!force && line_count > p_ttyscroll)) + if (!screen_valid(TRUE) || line_count <= 0 + || (!force && line_count > p_ttyscroll) +#ifdef FEAT_CLIPBOARD + || (clip_star.state != SELECT_CLEARED + && redrawing_for_callback > 0) +#endif + ) return FAIL; /*