mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(mksession): don't store floats in session #18635
Problem: If there are floating windows when `:mksession` runs, the session cannot be properly restored. Solution: Change `:mksession` to skip floating windows. This matches Vim's treatment of popup windows. An alternative approach could have `:mksession` save floating windows that can be _properly_ restored (rather than skip them entirely, which is what this PR does). While that would seemingly be a more complete fix, that could present additional issues since floating windows are ordinarily created by plugins, and they may no longer be properly under a plugin's control when restored. closes #18432
This commit is contained in:
parent
b863c150c9
commit
3fe6bf3a1e
@ -181,6 +181,10 @@ static bool ses_do_frame(const frame_T *fr)
|
|||||||
/// @return non-zero if window "wp" is to be stored in the Session.
|
/// @return non-zero if window "wp" is to be stored in the Session.
|
||||||
static int ses_do_win(win_T *wp)
|
static int ses_do_win(win_T *wp)
|
||||||
{
|
{
|
||||||
|
// Skip floating windows to avoid issues when restoring the Session. #18432
|
||||||
|
if (wp->w_floating) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (wp->w_buffer->b_fname == NULL
|
if (wp->w_buffer->b_fname == NULL
|
||||||
// When 'buftype' is "nofile" can't restore the window contents.
|
// When 'buftype' is "nofile" can't restore the window contents.
|
||||||
|| (!wp->w_buffer->terminal && bt_nofile(wp->w_buffer))) {
|
|| (!wp->w_buffer->terminal && bt_nofile(wp->w_buffer))) {
|
||||||
|
@ -13,6 +13,7 @@ local matches = helpers.matches
|
|||||||
local pesc = helpers.pesc
|
local pesc = helpers.pesc
|
||||||
local rmdir = helpers.rmdir
|
local rmdir = helpers.rmdir
|
||||||
local sleep = helpers.sleep
|
local sleep = helpers.sleep
|
||||||
|
local meths = helpers.meths
|
||||||
|
|
||||||
local file_prefix = 'Xtest-functional-ex_cmds-mksession_spec'
|
local file_prefix = 'Xtest-functional-ex_cmds-mksession_spec'
|
||||||
|
|
||||||
@ -166,4 +167,37 @@ describe(':mksession', function()
|
|||||||
-- Verify that the terminal's working directory is "/".
|
-- Verify that the terminal's working directory is "/".
|
||||||
screen:expect(expected_screen)
|
screen:expect(expected_screen)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('restores a session when there is a float #18432', function()
|
||||||
|
local tmpfile = file_prefix .. '-tmpfile-float'
|
||||||
|
|
||||||
|
command('edit ' .. tmpfile)
|
||||||
|
local buf = meths.create_buf(false, true)
|
||||||
|
local config = {
|
||||||
|
relative = 'editor',
|
||||||
|
focusable = false,
|
||||||
|
width = 10,
|
||||||
|
height = 3,
|
||||||
|
row = 0,
|
||||||
|
col = 1,
|
||||||
|
style = 'minimal'
|
||||||
|
}
|
||||||
|
meths.open_win(buf, false, config)
|
||||||
|
local cmdheight = meths.get_option('cmdheight')
|
||||||
|
command('mksession ' .. session_file)
|
||||||
|
|
||||||
|
-- Create a new test instance of Nvim.
|
||||||
|
clear()
|
||||||
|
|
||||||
|
command('source ' .. session_file)
|
||||||
|
|
||||||
|
eq(tmpfile, funcs.expand('%'))
|
||||||
|
-- Check that there is only a single window, which indicates the floating
|
||||||
|
-- window was not restored.
|
||||||
|
eq(1, funcs.winnr('$'))
|
||||||
|
-- The command-line height should remain the same as it was.
|
||||||
|
eq(cmdheight, meths.get_option('cmdheight'))
|
||||||
|
|
||||||
|
os.remove(tmpfile)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user