mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
multigrid: reset win scrolling after swap message
This commit is contained in:
parent
bfe2435459
commit
0f96a21e3f
@ -194,12 +194,15 @@ EXTERN int compl_cont_status INIT(= 0);
|
|||||||
EXTERN int cmdmsg_rl INIT(= false); // cmdline is drawn right to left
|
EXTERN int cmdmsg_rl INIT(= false); // cmdline is drawn right to left
|
||||||
EXTERN int msg_col;
|
EXTERN int msg_col;
|
||||||
EXTERN int msg_row;
|
EXTERN int msg_row;
|
||||||
EXTERN int msg_scrolled; /* Number of screen lines that windows have
|
EXTERN int msg_scrolled; // Number of screen lines that windows have
|
||||||
* scrolled because of printing messages. */
|
// scrolled because of printing messages.
|
||||||
EXTERN int msg_scrolled_ign INIT(= FALSE);
|
// when true don't set need_wait_return in msg_puts_attr()
|
||||||
/* when TRUE don't set need_wait_return in
|
// when msg_scrolled is non-zero
|
||||||
msg_puts_attr() when msg_scrolled is
|
EXTERN bool msg_scrolled_ign INIT(= false);
|
||||||
non-zero */
|
// Whether the screen is damaged due to scrolling. Sometimes msg_scrolled
|
||||||
|
// is reset before the screen is redrawn, so we need to keep track of this.
|
||||||
|
EXTERN bool msg_did_scroll INIT(= false);
|
||||||
|
|
||||||
|
|
||||||
EXTERN char_u *keep_msg INIT(= NULL); /* msg to be shown after redraw */
|
EXTERN char_u *keep_msg INIT(= NULL); /* msg to be shown after redraw */
|
||||||
EXTERN int keep_msg_attr INIT(= 0); /* highlight attr for keep_msg */
|
EXTERN int keep_msg_attr INIT(= 0); /* highlight attr for keep_msg */
|
||||||
|
@ -3412,7 +3412,9 @@ static char *findswapname(buf_T *buf, char **dirp, char *old_fname,
|
|||||||
# endif
|
# endif
|
||||||
xfree(name);
|
xfree(name);
|
||||||
|
|
||||||
/* pretend screen didn't scroll, need redraw anyway */
|
// pretend screen didn't scroll, need redraw anyway
|
||||||
|
// TODO(bfredl): when doing the message grid refactor,
|
||||||
|
// simplify this special case.
|
||||||
msg_scrolled = 0;
|
msg_scrolled = 0;
|
||||||
redraw_all_later(NOT_VALID);
|
redraw_all_later(NOT_VALID);
|
||||||
}
|
}
|
||||||
|
@ -1960,8 +1960,9 @@ int msg_scrollsize(void)
|
|||||||
*/
|
*/
|
||||||
static void msg_scroll_up(void)
|
static void msg_scroll_up(void)
|
||||||
{
|
{
|
||||||
if (msg_scrolled == 0) {
|
if (!msg_did_scroll) {
|
||||||
ui_call_win_scroll_over_start();
|
ui_call_win_scroll_over_start();
|
||||||
|
msg_did_scroll = true;
|
||||||
}
|
}
|
||||||
if (dy_flags & DY_MSGSEP) {
|
if (dy_flags & DY_MSGSEP) {
|
||||||
if (msg_scrolled == 0) {
|
if (msg_scrolled == 0) {
|
||||||
|
@ -307,11 +307,15 @@ void update_screen(int type)
|
|||||||
++display_tick; /* let syntax code know we're in a next round of
|
++display_tick; /* let syntax code know we're in a next round of
|
||||||
* display updating */
|
* display updating */
|
||||||
|
|
||||||
/*
|
// Tricky: vim code can reset msg_scrolled behind our back, so need
|
||||||
* if the screen was scrolled up when displaying a message, scroll it down
|
// separate bookkeeping for now.
|
||||||
*/
|
if (msg_did_scroll) {
|
||||||
if (msg_scrolled) {
|
|
||||||
ui_call_win_scroll_over_reset();
|
ui_call_win_scroll_over_reset();
|
||||||
|
msg_did_scroll = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the screen was scrolled up when displaying a message, scroll it down
|
||||||
|
if (msg_scrolled) {
|
||||||
clear_cmdline = true;
|
clear_cmdline = true;
|
||||||
if (dy_flags & DY_MSGSEP) {
|
if (dy_flags & DY_MSGSEP) {
|
||||||
int valid = MAX(Rows - msg_scrollsize(), 0);
|
int valid = MAX(Rows - msg_scrollsize(), 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user