Mercurial > vim
diff src/ex_docmd.c @ 13435:fa198b71bab2 v8.0.1592
patch 8.0.1592: terminal windows in a session are not properly restored
commit https://github.com/vim/vim/commit/4d8bac8bf593ff087517ff79090c2d224325aae6
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Mar 9 21:33:34 2018 +0100
patch 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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 09 Mar 2018 21:45:06 +0100 |
parents | d5347779fb20 |
children | 94e638936d3e |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -11095,6 +11095,11 @@ makeopens( { if (!(only_save_windows && buf->b_nwindows == 0) && !(buf->b_help && !(ssop_flags & SSOP_HELP)) +#ifdef FEAT_TERMINAL + /* skip terminal buffers: finished ones are not useful, others + * will be resurrected and result in a new buffer */ + && !bt_terminal(buf) +#endif && buf->b_fname != NULL && buf->b_p_bl) { @@ -11305,7 +11310,8 @@ makeopens( /* * Wipe out an empty unnamed buffer we started in. */ - if (put_line(fd, "if exists('s:wipebuf')") == FAIL) + if (put_line(fd, "if exists('s:wipebuf') && s:wipebuf != bufnr('%')") + == FAIL) return FAIL; if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL) return FAIL; @@ -11465,6 +11471,12 @@ ses_do_frame(frame_T *fr) static int ses_do_win(win_T *wp) { +#ifdef FEAT_TERMINAL + if (bt_terminal(wp->w_buffer)) + return !term_is_finished(wp->w_buffer) + && (ssop_flags & SSOP_TERMINAL) + && term_should_restore(wp->w_buffer); +#endif if (wp->w_buffer->b_fname == NULL #ifdef FEAT_QUICKFIX /* When 'buftype' is "nofile" can't restore the window contents. */ @@ -11530,13 +11542,21 @@ put_view( /* Edit the file. Skip this when ":next" already did it. */ if (add_edit && (!did_next || wp->w_arg_idx_invalid)) { +# ifdef FEAT_TERMINAL + if (bt_terminal(wp->w_buffer)) + { + if (term_write_session(fd, wp) == FAIL) + return FAIL; + } + else +# endif /* * Load the file. */ if (wp->w_buffer->b_ffname != NULL -#ifdef FEAT_QUICKFIX +# ifdef FEAT_QUICKFIX && !bt_nofile(wp->w_buffer) -#endif +# endif ) { /* @@ -11554,8 +11574,7 @@ put_view( || fputs(" | else | edit ", fd) < 0 || ses_fname(fd, wp->w_buffer, flagp, FALSE) == FAIL || fputs(" | endif", fd) < 0 - || - put_eol(fd) == FAIL) + || put_eol(fd) == FAIL) return FAIL; } else