diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-04-01 08:02:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-01 08:02:42 +0800 |
commit | b8858dddbf7b7f1ee3033acfab3d6f54a0ed3114 (patch) | |
tree | c53eb61a7aad48c1f1cecbc0612ea239cb24a591 | |
parent | 6b9a808d13b0d2857228a47511355fd6e12709ed (diff) | |
parent | b61575ba70f8e9276d64a5ab312a9a56e833c2fe (diff) | |
download | rneovim-b8858dddbf7b7f1ee3033acfab3d6f54a0ed3114.tar.gz rneovim-b8858dddbf7b7f1ee3033acfab3d6f54a0ed3114.tar.bz2 rneovim-b8858dddbf7b7f1ee3033acfab3d6f54a0ed3114.zip |
Merge pull request #28080 from echasnovski/intro-buf-change
fix(intro): link showing intro to state at start
-rw-r--r-- | src/nvim/drawscreen.c | 2 | ||||
-rw-r--r-- | src/nvim/version.c | 8 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 72 |
3 files changed, 69 insertions, 13 deletions
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index 1fb42af786..a01cbe6223 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -424,7 +424,7 @@ int update_screen(void) static bool still_may_intro = true; if (still_may_intro) { if (!may_show_intro()) { - must_redraw = UPD_NOT_VALID; + redraw_later(firstwin, UPD_NOT_VALID); still_may_intro = false; } } diff --git a/src/nvim/version.c b/src/nvim/version.c index 14e2491d18..5443371ba7 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -2715,9 +2715,11 @@ void list_version(void) /// Whether it still is not too late to show an intro message bool may_show_intro(void) { - return (buf_is_empty(firstwin->w_buffer) - && (firstwin->w_buffer->b_fname == NULL) - && one_window(firstwin) + return (buf_is_empty(curbuf) + && (curbuf->b_fname == NULL) + && (curbuf->handle == 1) + && (curwin->handle == LOWEST_WIN_ID) + && one_window(curwin) && (vim_strchr(p_shm, SHM_INTRO) == NULL)); } diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua index fb02af46b5..fcfd94ff7c 100644 --- a/test/functional/ui/messages_spec.lua +++ b/test/functional/ui/messages_spec.lua @@ -1630,25 +1630,25 @@ describe('ui/ext_messages', function() {1:~ }type :help iccf{5:<Enter>} for information {1: }| {1:~ }|*5 ]] + local showmode = { { '-- INSERT --', 3 } } screen:expect(introscreen) -- <c-l> (same as :mode) does _not_ clear intro message feed('<c-l>i') - screen:expect { grid = introscreen, showmode = { { '-- INSERT --', 3 } } } + screen:expect { grid = introscreen, showmode = showmode } - -- opening a float also does not - local win = api.nvim_open_win(api.nvim_create_buf(false, false), true, { + -- opening a float without focus also does not + local win = api.nvim_open_win(api.nvim_create_buf(false, false), false, { relative = 'editor', height = 1, width = 5, row = 1, col = 5, }) - feed('float<esc><c-l>') screen:expect { grid = [[ - | - {1:~ }{8:floa^t}{1: }| + ^ | + {1:~ }{8: }{1: }| {1:~ }|*3 {MATCH:.*}| {1:~ }| @@ -1666,18 +1666,20 @@ describe('ui/ext_messages', function() {1:~ }type :help iccf{5:<Enter>} for information {1: }| {1:~ }|*5 ]], + showmode = showmode, } + api.nvim_win_close(win, true) - screen:expect { grid = introscreen } + screen:expect { grid = introscreen, showmode = showmode } -- but editing text does.. - feed('ix') + feed('x') screen:expect { grid = [[ x^ | {1:~ }|*23 ]], - showmode = { { '-- INSERT --', 3 } }, + showmode = showmode, } feed('<esc>:intro<cr>') @@ -1715,6 +1717,58 @@ describe('ui/ext_messages', function() } end) + it('clears intro screen when new buffer is active', function() + api.nvim_set_current_buf(api.nvim_create_buf(true, false)) + screen:expect { + grid = [[ + ^ | + {1:~ }|*23 + ]], + } + end) + + it('clears intro screen when new buffer is active in floating window', function() + local win_opts = { relative = 'editor', height = 1, width = 5, row = 1, col = 5 } + api.nvim_open_win(api.nvim_create_buf(false, false), true, win_opts) + screen:expect { + grid = [[ + | + {1:~ }{8:^ }{1: }| + {1:~ }|*22 + ]], + } + end) + + it('clears intro screen when initial buffer is active in floating window', function() + local win_opts = { relative = 'editor', height = 1, width = 5, row = 1, col = 5 } + api.nvim_open_win(api.nvim_get_current_buf(), true, win_opts) + screen:expect { + grid = [[ + | + {1:~ }{8:^ }{1: }| + {1:~ }|*22 + ]], + } + end) + + it('clears intro screen when initial window is converted to be floating', function() + exec_lua([[ + local init_win_id = vim.api.nvim_get_current_win() + vim.cmd('split') + local win_opts = { relative = 'editor', height = 1, width = 5, row = 1, col = 5 } + vim.api.nvim_win_set_config(init_win_id, win_opts) + vim.api.nvim_set_current_win(init_win_id) + ]]) + screen:expect { + grid = [[ + | + {1:~ }{8:^ }{1: }| + {1:~ }|*21 + {6:[No Name] }| + ]], + } + end) + it('supports global statusline', function() feed(':set laststatus=3<cr>') feed(':sp<cr>') |