mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	vim-patch:partial:8.0.1592: terminal windows in a session are not properly restored
Problem:    Terminal windows in a session are not properly restored.
Solution:   Add "terminal" in 'sessionoptions'.  When possible restore the
            command running in a terminal.
4d8bac8bf5
Tests only. Nvim has no equivalent to "norestore" yet.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
			
			
This commit is contained in:
		@@ -353,6 +353,108 @@ func Test_mksession_blank_windows()
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
if has('terminal')
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_shell()
 | 
			
		||||
  terminal
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      let term_cmd = line
 | 
			
		||||
    elseif line =~ 'badd.*' . &shell
 | 
			
		||||
      call assert_report('unexpected shell line: ' . line)
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
  call assert_match('terminal ++curwin ++cols=\d\+ ++rows=\d\+\s*$', term_cmd)
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_no_restore_cmdarg()
 | 
			
		||||
  terminal ++norestore
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      call assert_report('session must not restore teminal')
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_no_restore_funcarg()
 | 
			
		||||
  call term_start(&shell, {'norestore': 1})
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      call assert_report('session must not restore teminal')
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_no_restore_func()
 | 
			
		||||
  terminal
 | 
			
		||||
  call term_setrestore(bufnr('%'), 'NONE')
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      call assert_report('session must not restore teminal')
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_no_ssop()
 | 
			
		||||
  terminal
 | 
			
		||||
  set sessionoptions-=terminal
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      call assert_report('session must not restore teminal')
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
  set sessionoptions&
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_mksession_terminal_restore_other()
 | 
			
		||||
  terminal
 | 
			
		||||
  call term_setrestore(bufnr('%'), 'other')
 | 
			
		||||
  mksession! Xtest_mks.out
 | 
			
		||||
  let lines = readfile('Xtest_mks.out')
 | 
			
		||||
  let term_cmd = ''
 | 
			
		||||
  for line in lines
 | 
			
		||||
    if line =~ '^terminal'
 | 
			
		||||
      let term_cmd = line
 | 
			
		||||
    endif
 | 
			
		||||
  endfor
 | 
			
		||||
  call assert_match('terminal ++curwin ++cols=\d\+ ++rows=\d\+ other', term_cmd)
 | 
			
		||||
 | 
			
		||||
  call Stop_shell_in_terminal(bufnr('%'))
 | 
			
		||||
  call delete('Xtest_mks.out')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
endif " has('terminal')
 | 
			
		||||
 | 
			
		||||
func Test_mkview_open_folds()
 | 
			
		||||
  enew!
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user