Mercurial > vim
annotate src/session.c @ 33591:288da62613ba v9.0.2040
patch 9.0.2040: trim(): hard to use default mask
Commit: https://github.com/vim/vim/commit/6e6386716f9494ae86027c6d34f657fd03dfec42
Author: Illia Bobyr <illia.bobyr@gmail.com>
Date: Tue Oct 17 11:09:45 2023 +0200
patch 9.0.2040: trim(): hard to use default mask
Problem: trim(): hard to use default mask
Solution: Use default 'mask' when it is v:none
The default 'mask' value is pretty complex, as it includes many
characters. Yet, if one needs to specify the trimming direction, the
third argument, 'trim()' currently requires the 'mask' value to be
provided explicitly.
'v:none' is already used to mean "use the default argument value" in
user defined functions. See |none-function_argument| in help.
closes: #13363
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Illia Bobyr <illia.bobyr@gmail.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 17 Oct 2023 11:15:09 +0200 |
parents | 04d9dff67d99 |
children | 172f30203d25 |
rev | line source |
---|---|
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * session.c: session related functions |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
16 #if defined(FEAT_SESSION) || defined(PROTO) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
17 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
18 static int did_lcd; // whether ":lcd" was produced for a session |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
19 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
20 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
21 * Write a file name to the session file. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
22 * Takes care of the "slash" option in 'sessionoptions' and escapes special |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
23 * characters. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
24 * Returns FAIL if writing fails or out of memory. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
25 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
26 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
27 ses_put_fname(FILE *fd, char_u *name, unsigned *flagp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
28 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
29 char_u *sname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
30 char_u *p; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
31 int retval = OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
32 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
33 sname = home_replace_save(NULL, name); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
34 if (sname == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
35 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
36 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
37 if (*flagp & SSOP_SLASH) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
38 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
39 // change all backslashes to forward slashes |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
40 for (p = sname; *p != NUL; MB_PTR_ADV(p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
41 if (*p == '\\') |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
42 *p = '/'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
43 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
44 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
45 // escape special characters |
25994
e8873138ffbb
patch 8.2.3530: ":buf {a}" fails while ":edit {a}" works
Bram Moolenaar <Bram@vim.org>
parents:
25306
diff
changeset
|
46 p = vim_strsave_fnameescape(sname, VSE_NONE); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
47 vim_free(sname); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
48 if (p == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
49 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
50 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
51 // write the result |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
52 if (fputs((char *)p, fd) < 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
53 retval = FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
54 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
55 vim_free(p); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
56 return retval; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
57 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
58 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
59 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
60 * Write a buffer name to the session file. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
61 * Also ends the line, if "add_eol" is TRUE. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
62 * Returns FAIL if writing fails. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
63 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
64 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
65 ses_fname(FILE *fd, buf_T *buf, unsigned *flagp, int add_eol) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
66 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
67 char_u *name; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
68 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
69 // Use the short file name if the current directory is known at the time |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
70 // the session file will be sourced. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
71 // Don't do this for ":mkview", we don't know the current directory. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
72 // Don't do this after ":lcd", we don't keep track of what the current |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
73 // directory is. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
74 if (buf->b_sfname != NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
75 && flagp == &ssop_flags |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
76 && (ssop_flags & (SSOP_CURDIR | SSOP_SESDIR)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
77 #ifdef FEAT_AUTOCHDIR |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
78 && !p_acd |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
79 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
80 && !did_lcd) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
81 name = buf->b_sfname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
83 name = buf->b_ffname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 if (ses_put_fname(fd, name, flagp) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
85 || (add_eol && put_eol(fd) == FAIL)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
86 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
87 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
88 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
89 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
90 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
91 * Write an argument list to the session file. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
92 * Returns FAIL if writing fails. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
93 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
94 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
95 ses_arglist( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
96 FILE *fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
97 char *cmd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
98 garray_T *gap, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
99 int fullname, // TRUE: use full path name |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
100 unsigned *flagp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
101 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
102 int i; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
103 char_u *buf = NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
104 char_u *s; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
105 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
106 if (fputs(cmd, fd) < 0 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
107 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
108 if (put_line(fd, "%argdel") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
109 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
110 for (i = 0; i < gap->ga_len; ++i) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
111 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
112 // NULL file names are skipped (only happens when out of memory). |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
113 s = alist_name(&((aentry_T *)gap->ga_data)[i]); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
114 if (s != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
115 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
116 if (fullname) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
117 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
118 buf = alloc(MAXPATHL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
119 if (buf != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
120 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
121 (void)vim_FullName(s, buf, MAXPATHL, FALSE); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
122 s = buf; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
123 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
124 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
125 if (fputs("$argadd ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
126 || ses_put_fname(fd, s, flagp) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
127 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
128 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
129 vim_free(buf); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
130 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
131 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
132 vim_free(buf); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
133 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
134 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
135 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
136 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
137 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
138 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
139 * Return non-zero if window "wp" is to be stored in the Session. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
140 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
141 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
142 ses_do_win(win_T *wp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
143 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
144 #ifdef FEAT_TERMINAL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
145 if (bt_terminal(wp->w_buffer)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
146 return !term_is_finished(wp->w_buffer) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
147 && (ssop_flags & SSOP_TERMINAL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
148 && term_should_restore(wp->w_buffer); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
149 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
150 if (wp->w_buffer->b_fname == NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
151 // When 'buftype' is "nofile" can't restore the window contents. |
29849
6c7eddcce52c
patch 9.0.0263: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
28915
diff
changeset
|
152 || bt_nofilename(wp->w_buffer)) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
153 return (ssop_flags & SSOP_BLANK); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
154 if (bt_help(wp->w_buffer)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
155 return (ssop_flags & SSOP_HELP); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
156 return TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
157 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
158 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
159 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
160 * Return TRUE if frame "fr" has a window somewhere that we want to save in |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
161 * the Session. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
162 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
163 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
164 ses_do_frame(frame_T *fr) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
165 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
166 frame_T *frc; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
167 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
168 if (fr->fr_layout == FR_LEAF) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
169 return ses_do_win(fr->fr_win); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
170 FOR_ALL_FRAMES(frc, fr->fr_child) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
171 if (ses_do_frame(frc)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
172 return TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
173 return FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
174 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
175 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
176 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
177 * Skip frames that don't contain windows we want to save in the Session. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
178 * Returns NULL when there none. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
180 static frame_T * |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 ses_skipframe(frame_T *fr) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 frame_T *frc; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 FOR_ALL_FRAMES(frc, fr) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 if (ses_do_frame(frc)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 break; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 return frc; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
189 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
191 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 * Write commands to "fd" to recursively create windows for frame "fr", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
193 * horizontally and vertically split. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
194 * After the commands the last window in the frame is the current window. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
195 * Returns FAIL when writing the commands to "fd" fails. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 ses_win_rec(FILE *fd, frame_T *fr) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 frame_T *frc; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 int count = 0; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
203 if (fr->fr_layout == FR_LEAF) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
204 return OK; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
205 |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
206 // Find first frame that's not skipped and then create a window for |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
207 // each following one (first frame is already there). |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
208 frc = ses_skipframe(fr->fr_child); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
209 if (frc != NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
210 while ((frc = ses_skipframe(frc->fr_next)) != NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
211 { |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
212 // Make window as big as possible so that we have lots of room |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
213 // to split. |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
214 if (put_line(fd, "wincmd _ | wincmd |") == FAIL |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
215 || put_line(fd, fr->fr_layout == FR_COL |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
216 ? "split" : "vsplit") == FAIL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
217 return FAIL; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
218 ++count; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
219 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
220 |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
221 // Go back to the first window. |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
222 if (count > 0 && (fprintf(fd, fr->fr_layout == FR_COL |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
223 ? "%dwincmd k" : "%dwincmd h", count) < 0 |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
224 || put_eol(fd) == FAIL)) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
225 return FAIL; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
227 // Recursively create frames/windows in each window of this column or |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
228 // row. |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
229 frc = ses_skipframe(fr->fr_child); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
230 while (frc != NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
231 { |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
232 ses_win_rec(fd, frc); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
233 frc = ses_skipframe(frc->fr_next); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
234 // Go to next window. |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
235 if (frc != NULL && put_line(fd, "wincmd w") == FAIL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
236 return FAIL; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
237 } |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
238 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
239 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
240 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
241 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
242 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 ses_winsizes( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
244 FILE *fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 int restore_size, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
246 win_T *tab_firstwin) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
248 int n = 0; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
249 win_T *wp; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
250 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
251 if (restore_size && (ssop_flags & SSOP_WINSIZE)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
252 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
253 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
254 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
255 if (!ses_do_win(wp)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 continue; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 ++n; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 // restore height when not full height |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 if (wp->w_height + wp->w_status_height < topframe->fr_height |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 && (fprintf(fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 "exe '%dresize ' . ((&lines * %ld + %ld) / %ld)", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
263 n, (long)wp->w_height, Rows / 2, Rows) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 || put_eol(fd) == FAIL)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
267 // restore width when not full width |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 if (wp->w_width < Columns && (fprintf(fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 "exe 'vert %dresize ' . ((&columns * %ld + %ld) / %ld)", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 n, (long)wp->w_width, Columns / 2, Columns) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 || put_eol(fd) == FAIL)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
274 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 // Just equalise window sizes |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
278 if (put_line(fd, "wincmd =") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
281 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
283 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
284 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
285 put_view_curpos(FILE *fd, win_T *wp, char *spaces) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
286 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
287 int r; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 if (wp->w_curswant == MAXCOL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 r = fprintf(fd, "%snormal! $", spaces); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 r = fprintf(fd, "%snormal! 0%d|", spaces, wp->w_virtcol + 1); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 return r < 0 || put_eol(fd) == FAIL ? FALSE : OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
295 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 * Write commands to "fd" to restore the view of a window. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 * Caller must make sure 'scrolloff' is zero. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
299 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
300 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
301 put_view( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
302 FILE *fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
303 win_T *wp, |
22230
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
304 int add_edit, // add ":edit" command to view |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
305 unsigned *flagp, // vop_flags or ssop_flags |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
306 int current_arg_idx, // current argument index of the window, |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
307 // use -1 if unknown |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
308 hashtab_T *terminal_bufs UNUSED) // already encountered terminal buffers, |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
309 // can be NULL |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
310 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 win_T *save_curwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 int f; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
313 int do_cursor; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
314 int did_next = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 // Always restore cursor position for ":mksession". For ":mkview" only |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 // when 'viewoptions' contains "cursor". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 do_cursor = (flagp == &ssop_flags || *flagp & SSOP_CURSOR); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 // Local argument list. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 if (wp->w_alist == &global_alist) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
322 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
323 if (put_line(fd, "argglobal") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
324 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
325 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
326 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
327 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
328 if (ses_arglist(fd, "arglocal", &wp->w_alist->al_ga, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
329 flagp == &vop_flags |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
330 || !(*flagp & SSOP_CURDIR) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
331 || wp->w_localdir != NULL, flagp) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
332 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
333 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
334 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
335 // Only when part of a session: restore the argument index. Some |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
336 // arguments may have been deleted, check if the index is valid. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
337 if (wp->w_arg_idx != current_arg_idx && wp->w_arg_idx < WARGCOUNT(wp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
338 && flagp == &ssop_flags) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
339 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
340 if (fprintf(fd, "%ldargu", (long)wp->w_arg_idx + 1) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
341 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
342 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
343 did_next = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
344 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
345 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
346 // Edit the file. Skip this when ":next" already did it. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
347 if (add_edit && (!did_next || wp->w_arg_idx_invalid)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
348 { |
26956
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
349 if (bt_help(wp->w_buffer)) |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
350 { |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
351 char *curtag = ""; |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
352 |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
353 // A help buffer needs some options to be set. |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
354 // First, create a new empty buffer with "buftype=help". |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
355 // Then ":help" will re-use both the buffer and the window and set |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
356 // the options, even when "options" is not in 'sessionoptions'. |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
357 if (0 < wp->w_tagstackidx |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
358 && wp->w_tagstackidx <= wp->w_tagstacklen) |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
359 curtag = (char *)wp->w_tagstack[wp->w_tagstackidx - 1].tagname; |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
360 |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
361 if (put_line(fd, "enew | setl bt=help") == FAIL |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
362 || fprintf(fd, "help %s", curtag) < 0 |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
363 || put_eol(fd) == FAIL) |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
364 return FAIL; |
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
365 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
366 # ifdef FEAT_TERMINAL |
26956
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
367 else if (bt_terminal(wp->w_buffer)) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
368 { |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
369 if (term_write_session(fd, wp, terminal_bufs) == FAIL) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
370 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
371 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
372 # endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
373 // Load the file. |
26956
86f8718c643d
patch 8.2.4007: session does not restore help buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
374 else if (wp->w_buffer->b_ffname != NULL |
29849
6c7eddcce52c
patch 9.0.0263: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
28915
diff
changeset
|
375 && !bt_nofilename(wp->w_buffer)) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
376 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
377 // Editing a file in this buffer: use ":edit file". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
378 // This may have side effects! (e.g., compressed or network file). |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
379 // |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
380 // Note, if a buffer for that file already exists, use :badd to |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
381 // edit that buffer, to not lose folding information (:edit resets |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
382 // folds in other buffers) |
28083
f1c00b8085f6
patch 8.2.4566: check for existing buffer in session file may not work
Bram Moolenaar <Bram@vim.org>
parents:
27122
diff
changeset
|
383 if (fputs("if bufexists(fnamemodify(\"", fd) < 0 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
384 || ses_fname(fd, wp->w_buffer, flagp, FALSE) == FAIL |
28083
f1c00b8085f6
patch 8.2.4566: check for existing buffer in session file may not work
Bram Moolenaar <Bram@vim.org>
parents:
27122
diff
changeset
|
385 || fputs("\", \":p\")) | buffer ", fd) < 0 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
386 || ses_fname(fd, wp->w_buffer, flagp, FALSE) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
387 || fputs(" | else | edit ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
388 || ses_fname(fd, wp->w_buffer, flagp, FALSE) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
389 || fputs(" | endif", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
390 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
391 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
392 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
393 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
394 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
395 // No file in this buffer, just make it empty. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
396 if (put_line(fd, "enew") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
397 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
398 #ifdef FEAT_QUICKFIX |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
399 if (wp->w_buffer->b_ffname != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
400 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
401 // The buffer does have a name, but it's not a file name. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
402 if (fputs("file ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
403 || ses_fname(fd, wp->w_buffer, flagp, TRUE) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
404 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
405 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
406 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
407 do_cursor = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
408 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
409 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
410 |
22840
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
411 if (wp->w_alt_fnum) |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
412 { |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
413 buf_T *alt = buflist_findnr(wp->w_alt_fnum); |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
414 |
24106
3b5d499c2bb5
patch 8.2.2594: alternate buffer added to session file even when it's hidden
Bram Moolenaar <Bram@vim.org>
parents:
23851
diff
changeset
|
415 // Set the alternate file if the buffer is listed. |
23851
a2f13e56b0e7
patch 8.2.2467: script generated by :mkview changes alternate file
Bram Moolenaar <Bram@vim.org>
parents:
23023
diff
changeset
|
416 if ((flagp == &ssop_flags) |
a2f13e56b0e7
patch 8.2.2467: script generated by :mkview changes alternate file
Bram Moolenaar <Bram@vim.org>
parents:
23023
diff
changeset
|
417 && alt != NULL |
22840
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
418 && alt->b_fname != NULL |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
419 && *alt->b_fname != NUL |
24106
3b5d499c2bb5
patch 8.2.2594: alternate buffer added to session file even when it's hidden
Bram Moolenaar <Bram@vim.org>
parents:
23851
diff
changeset
|
420 && alt->b_p_bl |
22840
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
421 && (fputs("balt ", fd) < 0 |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
422 || ses_fname(fd, alt, flagp, TRUE) == FAIL)) |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
423 return FAIL; |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
424 } |
7c1e2e3f2d8d
patch 8.2.1967: the session file does not restore the alternate file
Bram Moolenaar <Bram@vim.org>
parents:
22776
diff
changeset
|
425 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
426 // Local mappings and abbreviations. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
427 if ((*flagp & (SSOP_OPTIONS | SSOP_LOCALOPTIONS)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
428 && makemap(fd, wp->w_buffer) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
429 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
430 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
431 // Local options. Need to go to the window temporarily. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
432 // Store only local values when using ":mkview" and when ":mksession" is |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
433 // used and 'sessionoptions' doesn't include "options". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
434 // Some folding options are always stored when "folds" is included, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
435 // otherwise the folds would not be restored correctly. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
436 save_curwin = curwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
437 curwin = wp; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
438 curbuf = curwin->w_buffer; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
439 if (*flagp & (SSOP_OPTIONS | SSOP_LOCALOPTIONS)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
440 f = makeset(fd, OPT_LOCAL, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
441 flagp == &vop_flags || !(*flagp & SSOP_OPTIONS)); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
442 #ifdef FEAT_FOLDING |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
443 else if (*flagp & SSOP_FOLDS) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
444 f = makefoldset(fd); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
445 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
446 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
447 f = OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
448 curwin = save_curwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
449 curbuf = curwin->w_buffer; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
450 if (f == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
451 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
452 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
453 #ifdef FEAT_FOLDING |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
454 // Save Folds when 'buftype' is empty and for help files. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
455 if ((*flagp & SSOP_FOLDS) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
456 && wp->w_buffer->b_ffname != NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
457 && (bt_normal(wp->w_buffer) || bt_help(wp->w_buffer))) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
458 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
459 if (put_folds(fd, wp) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
460 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
461 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
462 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
463 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
464 // Set the cursor after creating folds, since that moves the cursor. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
465 if (do_cursor) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
466 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
467 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
468 // Restore the cursor line in the file and relatively in the |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
469 // window. Don't use "G", it changes the jumplist. |
24561
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
470 if (wp->w_height <= 0) |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
471 { |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
472 if (fprintf(fd, "let s:l = %ld", (long)wp->w_cursor.lnum) < 0) |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
473 return FAIL; |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
474 } |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
475 else if (fprintf(fd, |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
476 "let s:l = %ld - ((%ld * winheight(0) + %ld) / %ld)", |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
477 (long)wp->w_cursor.lnum, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
478 (long)(wp->w_cursor.lnum - wp->w_topline), |
24561
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
479 (long)wp->w_height / 2, (long)wp->w_height) < 0) |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
480 return FAIL; |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
481 |
f6049d3ab81c
patch 8.2.2820: session file may divide by zero
Bram Moolenaar <Bram@vim.org>
parents:
24473
diff
changeset
|
482 if (put_eol(fd) == FAIL |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
483 || put_line(fd, "if s:l < 1 | let s:l = 1 | endif") == FAIL |
23023
4384c44c031a
patch 8.2.2058: using mkview/loadview changes the jumplist
Bram Moolenaar <Bram@vim.org>
parents:
22840
diff
changeset
|
484 || put_line(fd, "keepjumps exe s:l") == FAIL |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
485 || put_line(fd, "normal! zt") == FAIL |
23023
4384c44c031a
patch 8.2.2058: using mkview/loadview changes the jumplist
Bram Moolenaar <Bram@vim.org>
parents:
22840
diff
changeset
|
486 || fprintf(fd, "keepjumps %ld", (long)wp->w_cursor.lnum) < 0 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
487 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
488 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
489 // Restore the cursor column and left offset when not wrapping. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
490 if (wp->w_cursor.col == 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
491 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
492 if (put_line(fd, "normal! 0") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
493 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
494 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
495 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
496 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
497 if (!wp->w_p_wrap && wp->w_leftcol > 0 && wp->w_width > 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
498 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
499 if (fprintf(fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
500 "let s:c = %ld - ((%ld * winwidth(0) + %ld) / %ld)", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
501 (long)wp->w_virtcol + 1, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
502 (long)(wp->w_virtcol - wp->w_leftcol), |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
503 (long)wp->w_width / 2, (long)wp->w_width) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
504 || put_eol(fd) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
505 || put_line(fd, "if s:c > 0") == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
506 || fprintf(fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
507 " exe 'normal! ' . s:c . '|zs' . %ld . '|'", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
508 (long)wp->w_virtcol + 1) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
509 || put_eol(fd) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
510 || put_line(fd, "else") == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
511 || put_view_curpos(fd, wp, " ") == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
512 || put_line(fd, "endif") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
513 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
514 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
515 else if (put_view_curpos(fd, wp, "") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
516 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
517 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
518 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
519 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
520 // Local directory, if the current flag is not view options or the "curdir" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
521 // option is included. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
522 if (wp->w_localdir != NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
523 && (flagp != &vop_flags || (*flagp & SSOP_CURDIR))) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
524 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
525 if (fputs("lcd ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
526 || ses_put_fname(fd, wp->w_localdir, flagp) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
527 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
528 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
529 did_lcd = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
530 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
531 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
532 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
533 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
534 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
535 #ifdef FEAT_EVAL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
536 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
537 store_session_globals(FILE *fd) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
538 { |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17539
diff
changeset
|
539 hashtab_T *gvht = get_globvar_ht(); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
540 hashitem_T *hi; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
541 dictitem_T *this_var; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
542 int todo; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
543 char_u *p, *t; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
544 |
17922
4d63d47d87ef
patch 8.1.1957: more code can be moved to evalvars.c
Bram Moolenaar <Bram@vim.org>
parents:
17539
diff
changeset
|
545 todo = (int)gvht->ht_used; |
32118
04d9dff67d99
patch 9.0.1390: FOR_ALL_ macros are defined in an unexpected file
Bram Moolenaar <Bram@vim.org>
parents:
31809
diff
changeset
|
546 FOR_ALL_HASHTAB_ITEMS(gvht, hi, todo) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
547 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
548 if (!HASHITEM_EMPTY(hi)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
549 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
550 --todo; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
551 this_var = HI2DI(hi); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
552 if ((this_var->di_tv.v_type == VAR_NUMBER |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
553 || this_var->di_tv.v_type == VAR_STRING) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
554 && var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
555 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
556 // Escape special characters with a backslash. Turn a LF and |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
557 // CR into \n and \r. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
558 p = vim_strsave_escaped(tv_get_string(&this_var->di_tv), |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
559 (char_u *)"\\\"\n\r"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
560 if (p == NULL) // out of memory |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
561 break; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
562 for (t = p; *t != NUL; ++t) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
563 if (*t == '\n') |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
564 *t = 'n'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
565 else if (*t == '\r') |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
566 *t = 'r'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
567 if ((fprintf(fd, "let %s = %c%s%c", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
568 this_var->di_key, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
569 (this_var->di_tv.v_type == VAR_STRING) ? '"' |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
570 : ' ', |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
571 p, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
572 (this_var->di_tv.v_type == VAR_STRING) ? '"' |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
573 : ' ') < 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
574 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
575 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
576 vim_free(p); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
577 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
578 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
579 vim_free(p); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
580 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
581 else if (this_var->di_tv.v_type == VAR_FLOAT |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
582 && var_flavour(this_var->di_key) == VAR_FLAVOUR_SESSION) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
583 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
584 float_T f = this_var->di_tv.vval.v_float; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
585 int sign = ' '; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
586 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
587 if (f < 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
588 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
589 f = -f; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
590 sign = '-'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
591 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
592 if ((fprintf(fd, "let %s = %c%f", |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
593 this_var->di_key, sign, f) < 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
594 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
595 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
596 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
597 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
598 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
599 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
600 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
601 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
602 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
603 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
604 * Write openfile commands for the current buffers to an .exrc file. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
605 * Return FAIL on error, OK otherwise. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
606 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
607 static int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
608 makeopens( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
609 FILE *fd, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
610 char_u *dirnow) // Current directory name |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
611 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
612 buf_T *buf; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
613 int only_save_windows = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
614 int nr; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
615 int restore_size = TRUE; |
28654
8fc86c943863
patch 8.2.4851: compiler warning for uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
28652
diff
changeset
|
616 int restore_height_width = FALSE; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
617 win_T *wp; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
618 char_u *sname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
619 win_T *edited_win = NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
620 int restore_stal = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
621 win_T *tab_firstwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
622 frame_T *tab_topframe; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
623 int cur_arg_idx = 0; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
624 int next_arg_idx = 0; |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
625 int ret = FAIL; |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
626 tabpage_T *tp; |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
627 #ifdef FEAT_TERMINAL |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
628 hashtab_T terminal_bufs; |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
629 |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
630 hash_init(&terminal_bufs); |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
631 #endif |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
632 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
633 if (ssop_flags & SSOP_BUFFERS) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
634 only_save_windows = FALSE; // Save ALL buffers |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
635 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
636 // Begin by setting the this_session variable, and then other |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
637 // sessionable variables. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
638 #ifdef FEAT_EVAL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
639 if (put_line(fd, "let v:this_session=expand(\"<sfile>:p\")") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
640 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
641 if (ssop_flags & SSOP_GLOBALS) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
642 if (store_session_globals(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
643 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
644 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
645 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
646 // Close all windows and tabs but one. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
647 if (put_line(fd, "silent only") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
648 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
649 if ((ssop_flags & SSOP_TABPAGES) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
650 && put_line(fd, "silent tabonly") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
651 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
652 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
653 // Now a :cd command to the session directory or the current directory |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
654 if (ssop_flags & SSOP_SESDIR) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
655 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
656 if (put_line(fd, "exe \"cd \" . escape(expand(\"<sfile>:p:h\"), ' ')") |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
657 == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
658 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
659 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
660 else if (ssop_flags & SSOP_CURDIR) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
661 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
662 sname = home_replace_save(NULL, globaldir != NULL ? globaldir : dirnow); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
663 if (sname == NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
664 || fputs("cd ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
665 || ses_put_fname(fd, sname, &ssop_flags) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
666 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
667 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
668 vim_free(sname); |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
669 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
670 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
671 vim_free(sname); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
672 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
673 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
674 // If there is an empty, unnamed buffer we will wipe it out later. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
675 // Remember the buffer number. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
676 if (put_line(fd, "if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
677 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
678 if (put_line(fd, " let s:wipebuf = bufnr('%')") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
679 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
680 if (put_line(fd, "endif") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
681 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
682 |
28238
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
683 // save 'shortmess' if not storing options |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
684 if ((ssop_flags & SSOP_OPTIONS) == 0 |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
685 && put_line(fd, "let s:shortmess_save = &shortmess") == FAIL) |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
686 goto fail; |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
687 |
28915
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
688 // set 'shortmess' for the following. Add the 'A' flag if it was there |
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
689 if (put_line(fd, "if &shortmess =~ 'A'") == FAIL |
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
690 || put_line(fd, " set shortmess=aoOA") == FAIL |
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
691 || put_line(fd, "else") == FAIL |
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
692 || put_line(fd, " set shortmess=aoO") == FAIL |
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
693 || put_line(fd, "endif") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
694 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
695 |
28915
6c67aeb82b65
patch 8.2.4980: when 'shortmess' contains 'A' loading session may still warn
Bram Moolenaar <Bram@vim.org>
parents:
28809
diff
changeset
|
696 // Now save the current files, current buffer first. |
27122
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
697 // Put all buffers into the buffer list. |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
698 // Do it very early to preserve buffer order after loading session (which |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
699 // can be disrupted by prior `edit` or `tabedit` calls). |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
700 FOR_ALL_BUFFERS(buf) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
701 { |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
702 if (!(only_save_windows && buf->b_nwindows == 0) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
703 && !(buf->b_help && !(ssop_flags & SSOP_HELP)) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
704 // Skip terminal buffers: finished ones are not useful, others |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
705 // will be resurrected and result in a new buffer. |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
706 && !bt_terminal(buf) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
707 && buf->b_fname != NULL |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
708 && buf->b_p_bl) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
709 { |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
710 if (fprintf(fd, "badd +%ld ", buf->b_wininfo == NULL ? 1L |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
711 : buf->b_wininfo->wi_fpos.lnum) < 0 |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
712 || ses_fname(fd, buf, &ssop_flags, TRUE) == FAIL) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
713 goto fail; |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
714 } |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
715 } |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
716 |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
717 // the global argument list |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
718 if (ses_arglist(fd, "argglobal", &global_alist.al_ga, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
719 !(ssop_flags & SSOP_CURDIR), &ssop_flags) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
720 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
721 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
722 if (ssop_flags & SSOP_RESIZE) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
723 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
724 // Note: after the restore we still check it worked! |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
725 if (fprintf(fd, "set lines=%ld columns=%ld" , Rows, Columns) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
726 || put_eol(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
727 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
728 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
729 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
730 #ifdef FEAT_GUI |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
731 if (gui.in_use && (ssop_flags & SSOP_WINPOS)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
732 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
733 int x, y; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
734 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
735 if (gui_mch_get_winpos(&x, &y) == OK) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
736 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
737 // Note: after the restore we still check it worked! |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
738 if (fprintf(fd, "winpos %d %d", x, y) < 0 || put_eol(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
739 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
740 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
741 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
742 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
743 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
744 // When there are two or more tabpages and 'showtabline' is 1 the tabline |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
745 // will be displayed when creating the next tab. That resizes the windows |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
746 // in the first tab, which may cause problems. Set 'showtabline' to 2 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
747 // temporarily to avoid that. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
748 if (p_stal == 1 && first_tabpage->tp_next != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
749 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
750 if (put_line(fd, "set stal=2") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
751 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
752 restore_stal = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
753 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
754 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
755 if ((ssop_flags & SSOP_TABPAGES)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
756 { |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
757 // "tabpages" is in 'sessionoptions': Similar to ses_win_rec() below, |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
758 // populate the tab pages first so later local options won't be copied |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
759 // to the new tabs. |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
760 FOR_ALL_TABPAGES(tp) |
27122
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
761 // Use `bufhidden=wipe` to remove empty "placeholder" buffers once |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
762 // they are not needed. This prevents creating extra buffers (see |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
763 // cause of patch 8.1.0829) |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
764 if (tp->tp_next != NULL |
4fd87205ca80
patch 8.2.4090: after restoring a session buffer order can be quite different
Bram Moolenaar <Bram@vim.org>
parents:
26956
diff
changeset
|
765 && put_line(fd, "tabnew +setlocal\\ bufhidden=wipe") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
766 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
767 if (first_tabpage->tp_next != NULL && put_line(fd, "tabrewind") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
768 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
769 } |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
770 |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
771 // Assume "tabpages" is in 'sessionoptions'. If not then we only do |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
772 // "curtab" and bail out of the loop. |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
773 FOR_ALL_TABPAGES(tp) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
774 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
775 int need_tabnext = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
776 int cnr = 1; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
777 |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
778 // May repeat putting Windows for each tab, when "tabpages" is in |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
779 // 'sessionoptions'. |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
780 // Don't use goto_tabpage(), it may change directory and trigger |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
781 // autocommands. |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
782 if ((ssop_flags & SSOP_TABPAGES)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
783 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
784 if (tp == curtab) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
785 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
786 tab_firstwin = firstwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
787 tab_topframe = topframe; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
788 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
789 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
790 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
791 tab_firstwin = tp->tp_firstwin; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
792 tab_topframe = tp->tp_topframe; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
793 } |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
794 if (tp != first_tabpage) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
795 need_tabnext = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
796 } |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
797 else |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
798 { |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
799 tp = curtab; |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
800 tab_firstwin = firstwin; |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
801 tab_topframe = topframe; |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
802 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
803 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
804 // Before creating the window layout, try loading one file. If this |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
805 // is aborted we don't end up with a number of useless windows. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
806 // This may have side effects! (e.g., compressed or network file). |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
807 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
808 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
809 if (ses_do_win(wp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
810 && wp->w_buffer->b_ffname != NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
811 && !bt_help(wp->w_buffer) |
29849
6c7eddcce52c
patch 9.0.0263: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
28915
diff
changeset
|
812 && !bt_nofilename(wp->w_buffer)) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
813 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
814 if (need_tabnext && put_line(fd, "tabnext") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
815 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
816 need_tabnext = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
817 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
818 if (fputs("edit ", fd) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
819 || ses_fname(fd, wp->w_buffer, &ssop_flags, TRUE) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
820 == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
821 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
822 if (!wp->w_arg_idx_invalid) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
823 edited_win = wp; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
824 break; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
825 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
826 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
827 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
828 // If no file got edited create an empty tab page. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
829 if (need_tabnext && put_line(fd, "tabnext") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
830 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
831 |
24473
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
832 if (tab_topframe->fr_layout != FR_LEAF) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
833 { |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
834 // Save current window layout. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
835 if (put_line(fd, "let s:save_splitbelow = &splitbelow") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
836 || put_line(fd, "let s:save_splitright = &splitright") |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
837 == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
838 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
839 if (put_line(fd, "set splitbelow splitright") == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
840 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
841 if (ses_win_rec(fd, tab_topframe) == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
842 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
843 if (put_line(fd, "let &splitbelow = s:save_splitbelow") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
844 || put_line(fd, "let &splitright = s:save_splitright") |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
845 == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
846 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
847 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
848 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
849 // Check if window sizes can be restored (no windows omitted). |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
850 // Remember the window number of the current window after restoring. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
851 nr = 0; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
852 for (wp = tab_firstwin; wp != NULL; wp = W_NEXT(wp)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
853 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
854 if (ses_do_win(wp)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
855 ++nr; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
856 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
857 restore_size = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
858 if (curwin == wp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
859 cnr = nr; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
860 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
861 |
24473
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
862 if (tab_firstwin->w_next != NULL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
863 { |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
864 // Go to the first window. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
865 if (put_line(fd, "wincmd t") == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
866 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
867 |
24473
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
868 // If more than one window, see if sizes can be restored. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
869 // First set 'winheight' and 'winwidth' to 1 to avoid the windows |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
870 // being resized when moving between windows. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
871 // Do this before restoring the view, so that the topline and the |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
872 // cursor can be set. This is done again below. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
873 // winminheight and winminwidth need to be set to avoid an error if |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
874 // the user has set winheight or winwidth. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
875 if (put_line(fd, "let s:save_winminheight = &winminheight") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
876 || put_line(fd, "let s:save_winminwidth = &winminwidth") |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
877 == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
878 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
879 if (put_line(fd, "set winminheight=0") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
880 || put_line(fd, "set winheight=1") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
881 || put_line(fd, "set winminwidth=0") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
882 || put_line(fd, "set winwidth=1") == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
883 goto fail; |
28654
8fc86c943863
patch 8.2.4851: compiler warning for uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
28652
diff
changeset
|
884 restore_height_width = TRUE; |
24473
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
885 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
886 if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
887 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
888 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
889 // Restore the tab-local working directory if specified |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
890 // Do this before the windows, so that the window-local directory can |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
891 // override the tab-local directory. |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
892 if ((ssop_flags & SSOP_CURDIR) && tp->tp_localdir != NULL) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
893 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
894 if (fputs("tcd ", fd) < 0 |
28652
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
895 || ses_put_fname(fd, tp->tp_localdir, &ssop_flags) == FAIL |
27dcbe70e1f0
patch 8.2.4850: mksession mixes up "tabpages" and "curdir" arguments
Bram Moolenaar <Bram@vim.org>
parents:
28238
diff
changeset
|
896 || put_eol(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
897 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
898 did_lcd = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
899 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
900 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
901 // Restore the view of the window (options, file, cursor, etc.). |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
902 for (wp = tab_firstwin; wp != NULL; wp = wp->w_next) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
903 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
904 if (!ses_do_win(wp)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
905 continue; |
22230
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
906 if (put_view(fd, wp, wp != edited_win, &ssop_flags, cur_arg_idx, |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
907 #ifdef FEAT_TERMINAL |
22230
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
908 &terminal_bufs |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
909 #else |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
910 NULL |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
911 #endif |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
912 ) == FAIL) |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
913 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
914 if (nr > 1 && put_line(fd, "wincmd w") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
915 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 next_arg_idx = wp->w_arg_idx; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
917 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
918 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
919 // The argument index in the first tab page is zero, need to set it in |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 // each window. For further tab pages it's the window where we do |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
921 // "tabedit". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
922 cur_arg_idx = next_arg_idx; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
923 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
924 // Restore cursor to the current window if it's not the first one. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
925 if (cnr > 1 && (fprintf(fd, "%dwincmd w", cnr) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
926 || put_eol(fd) == FAIL)) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
927 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
928 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
929 // Restore window sizes again after jumping around in windows, because |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
930 // the current window has a minimum size while others may not. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
931 if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
932 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
933 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
934 // Don't continue in another tab page when doing only the current one |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
935 // or when at the last tab page. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
936 if (!(ssop_flags & SSOP_TABPAGES)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
937 break; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
938 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
939 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
940 if (ssop_flags & SSOP_TABPAGES) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
941 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
942 if (fprintf(fd, "tabnext %d", tabpage_index(curtab)) < 0 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
943 || put_eol(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
944 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
945 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
946 if (restore_stal && put_line(fd, "set stal=1") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
947 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
948 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
949 // Wipe out an empty unnamed buffer we started in. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
950 if (put_line(fd, "if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0") |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
951 == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
952 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
953 if (put_line(fd, " silent exe 'bwipe ' . s:wipebuf") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
954 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
955 if (put_line(fd, "endif") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
956 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
957 if (put_line(fd, "unlet! s:wipebuf") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
958 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
959 |
28238
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
960 // Re-apply 'winheight' and 'winwidth'. |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
961 if (fprintf(fd, "set winheight=%ld winwidth=%ld", |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
962 p_wh, p_wiw) < 0 || put_eol(fd) == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
963 goto fail; |
28238
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
964 |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
965 // Restore 'shortmess'. |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
966 if (ssop_flags & SSOP_OPTIONS) |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
967 { |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28654
diff
changeset
|
968 if (fprintf(fd, "set shortmess=%s", p_shm) < 0 || put_eol(fd) == FAIL) |
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28654
diff
changeset
|
969 goto fail; |
28238
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
970 } |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
971 else |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
972 { |
28809
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28654
diff
changeset
|
973 if (put_line(fd, "let &shortmess = s:shortmess_save") == FAIL) |
d0241e74bfdb
patch 8.2.4928: various white space and cosmetic mistakes
Bram Moolenaar <Bram@vim.org>
parents:
28654
diff
changeset
|
974 goto fail; |
28238
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
975 } |
800e7de2f96d
patch 8.2.4645: 'shortmess' changed when session does not store options
Bram Moolenaar <Bram@vim.org>
parents:
28083
diff
changeset
|
976 |
28654
8fc86c943863
patch 8.2.4851: compiler warning for uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
28652
diff
changeset
|
977 if (restore_height_width) |
24473
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
978 { |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
979 // Restore 'winminheight' and 'winminwidth'. |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
980 if (put_line(fd, "let &winminheight = s:save_winminheight") == FAIL |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
981 || put_line(fd, "let &winminwidth = s:save_winminwidth") == FAIL) |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
982 goto fail; |
b2484fa6cb02
patch 8.2.2776: :mksession uses current value of 'splitbelow' and 'splitright'
Bram Moolenaar <Bram@vim.org>
parents:
24464
diff
changeset
|
983 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
984 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
985 // Lastly, execute the x.vim file if it exists. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 if (put_line(fd, "let s:sx = expand(\"<sfile>:p:r\").\"x.vim\"") == FAIL |
20057
407351a89c61
patch 8.2.0584: viminfo file uses obsolete function file_readable()
Bram Moolenaar <Bram@vim.org>
parents:
19181
diff
changeset
|
987 || put_line(fd, "if filereadable(s:sx)") == FAIL |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 || put_line(fd, " exe \"source \" . fnameescape(s:sx)") == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
989 || put_line(fd, "endif") == FAIL) |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
990 goto fail; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 |
22226
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
992 ret = OK; |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
993 fail: |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
994 #ifdef FEAT_TERMINAL |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
995 hash_clear_all(&terminal_bufs, 0); |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
996 #endif |
4ed106deb772
patch 8.2.1662: :mksession does not restore shared terminal buffer properly
Bram Moolenaar <Bram@vim.org>
parents:
20057
diff
changeset
|
997 return ret; |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
998 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
999 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1000 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1001 * Get the name of the view file for the current buffer. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1002 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 static char_u * |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1004 get_view_file(int c) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1006 int len = 0; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 char_u *p, *s; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 char_u *retval; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1009 char_u *sname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1010 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1011 if (curbuf->b_ffname == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1012 { |
25306
078edc1821bf
patch 8.2.3190: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
24561
diff
changeset
|
1013 emsg(_(e_no_file_name)); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 return NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 sname = home_replace_save(NULL, curbuf->b_ffname); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 if (sname == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 return NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1020 // We want a file name without separators, because we're not going to make |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 // a directory. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 // "normal" path separator -> "=+" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 // "=" -> "==" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 // ":" path separator -> "=-" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 for (p = sname; *p; ++p) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 if (*p == '=' || vim_ispathsep(*p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 ++len; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 retval = alloc(STRLEN(sname) + len + STRLEN(p_vdir) + 9); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 if (retval != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 STRCPY(retval, p_vdir); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 add_pathsep(retval); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 s = retval + STRLEN(retval); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1034 for (p = sname; *p; ++p) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1036 if (*p == '=') |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 *s++ = '='; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 *s++ = '='; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 else if (vim_ispathsep(*p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 *s++ = '='; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 #if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 if (*p == ':') |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 *s++ = '-'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 *s++ = '+'; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 *s++ = *p; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1054 *s++ = '='; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1055 *s++ = c; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1056 STRCPY(s, ".vim"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1057 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1058 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1059 vim_free(sname); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1060 return retval; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1061 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1062 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1063 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1064 * ":loadview [nr]" |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1065 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1066 void |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1067 ex_loadview(exarg_T *eap) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1068 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1069 char_u *fname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1070 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1071 fname = get_view_file(*eap->arg); |
31809
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
1072 if (fname == NULL) |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
1073 return; |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
1074 |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
1075 do_source(fname, FALSE, DOSO_NONE, NULL); |
543153d582d5
patch 9.0.1237: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
30310
diff
changeset
|
1076 vim_free(fname); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1077 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1078 |
18215
86a865a89661
patch 8.1.2102: can't build with GTK and FEAT_GUI_GNOME
Bram Moolenaar <Bram@vim.org>
parents:
18213
diff
changeset
|
1079 # if defined(FEAT_GUI_GNOME) \ |
18213
aa0972536d3e
patch 8.1.2101: write_session_file() often defined but not used
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
1080 || (defined(GUI_MAY_SPAWN) && defined(EXPERIMENTAL_GUI_CMD)) \ |
aa0972536d3e
patch 8.1.2101: write_session_file() often defined but not used
Bram Moolenaar <Bram@vim.org>
parents:
17922
diff
changeset
|
1081 || defined(PROTO) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1082 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1083 * Generate a script that can be used to restore the current editing session. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1084 * Save the value of v:this_session before running :mksession in order to make |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1085 * automagic session save fully transparent. Return TRUE on success. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1086 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1087 int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1088 write_session_file(char_u *filename) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1089 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1090 char_u *escaped_filename; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1091 char *mksession_cmdline; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1092 unsigned int save_ssop_flags; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1093 int failed; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1094 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1095 // Build an ex command line to create a script that restores the current |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1096 // session if executed. Escape the filename to avoid nasty surprises. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1097 escaped_filename = vim_strsave_escaped(filename, escape_chars); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1098 if (escaped_filename == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1099 return FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1100 mksession_cmdline = alloc(10 + (int)STRLEN(escaped_filename) + 1); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1101 if (mksession_cmdline == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1102 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1103 vim_free(escaped_filename); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1104 return FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1105 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1106 strcpy(mksession_cmdline, "mksession "); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1107 STRCAT(mksession_cmdline, escaped_filename); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1108 vim_free(escaped_filename); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1109 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1110 // Use a reasonable hardcoded set of 'sessionoptions' flags to avoid |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1111 // unpredictable effects when the session is saved automatically. Also, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1112 // we definitely need SSOP_GLOBALS to be able to restore v:this_session. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1113 // Don't use SSOP_BUFFERS to prevent the buffer list from becoming |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1114 // enormously large if the GNOME session feature is used regularly. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1115 save_ssop_flags = ssop_flags; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1116 ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1117 |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1118 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1119 do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1120 failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1121 do_cmdline_cmd((char_u *)"let v:this_session = Save_VV_this_session"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1122 do_unlet((char_u *)"Save_VV_this_session", TRUE); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1123 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1124 ssop_flags = save_ssop_flags; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1125 vim_free(mksession_cmdline); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1126 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1127 // Reopen the file and append a command to restore v:this_session, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1128 // as if this save never happened. This is to avoid conflicts with |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1129 // the user's own sessions. FIXME: It's probably less hackish to add |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1130 // a "stealth" flag to 'sessionoptions' -- gotta ask Bram. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1131 if (!failed) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1132 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1133 FILE *fd; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1134 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1135 fd = open_exfile(filename, TRUE, APPENDBIN); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1136 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1137 failed = (fd == NULL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1138 || put_line(fd, "let v:this_session = Save_VV_this_session") |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1139 == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1140 || put_line(fd, "unlet Save_VV_this_session") == FAIL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1141 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1142 if (fd != NULL && fclose(fd) != 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1143 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1144 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1145 if (failed) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1146 mch_remove(filename); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 return !failed; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 # endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 #endif // FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1155 #if defined(FEAT_SESSION) && defined(USE_CRNL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1156 # define MKSESSION_NL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1157 static int mksession_nl = FALSE; // use NL only in put_eol() |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 * ":mkexrc", ":mkvimrc", ":mkview" and ":mksession". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 void |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 ex_mkrc(exarg_T *eap) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1166 FILE *fd; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1167 int failed = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1168 char_u *fname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 #ifdef FEAT_BROWSE |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 char_u *browseFile = NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1171 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1172 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 int view_session = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 int using_vdir = FALSE; // using 'viewdir'? |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1175 char_u *viewFile = NULL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1176 unsigned *flagp; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 if (eap->cmdidx == CMD_mksession || eap->cmdidx == CMD_mkview) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1180 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1181 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1182 view_session = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1183 #else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 ex_ni(eap); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 return; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1189 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 // Use the short file name until ":lcd" is used. We also don't use the |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 // short file name when 'acd' is set, that is checked later. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 did_lcd = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 // ":mkview" or ":mkview 9": generate file name with 'viewdir' |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 if (eap->cmdidx == CMD_mkview |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 && (*eap->arg == NUL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 || (vim_isdigit(*eap->arg) && eap->arg[1] == NUL))) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1198 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 eap->forceit = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1200 fname = get_view_file(*eap->arg); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 if (fname == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1202 return; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1203 viewFile = fname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 using_vdir = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1206 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1207 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1208 if (*eap->arg != NUL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1209 fname = eap->arg; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1210 else if (eap->cmdidx == CMD_mkvimrc) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1211 fname = (char_u *)VIMRC_FILE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1213 else if (eap->cmdidx == CMD_mksession) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 fname = (char_u *)SESSION_FILE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1215 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1216 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1217 fname = (char_u *)EXRC_FILE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1219 #ifdef FEAT_BROWSE |
22699
e82579016863
patch 8.2.1898: command modifier parsing always uses global cmdmod
Bram Moolenaar <Bram@vim.org>
parents:
22230
diff
changeset
|
1220 if (cmdmod.cmod_flags & CMOD_BROWSE) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1221 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1222 browseFile = do_browse(BROWSE_SAVE, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1223 # ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1224 eap->cmdidx == CMD_mkview ? (char_u *)_("Save View") : |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 eap->cmdidx == CMD_mksession ? (char_u *)_("Save Session") : |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 # endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1227 (char_u *)_("Save Setup"), |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 fname, (char_u *)"vim", NULL, |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 (char_u *)_(BROWSE_FILTER_MACROS), NULL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 if (browseFile == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 goto theend; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 fname = browseFile; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 eap->forceit = TRUE; // since dialog already asked |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1234 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1236 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 #if defined(FEAT_SESSION) && defined(vim_mkdir) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1238 // When using 'viewdir' may have to create the directory. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1239 if (using_vdir && !mch_isdir(p_vdir)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 vim_mkdir_emsg(p_vdir, 0755); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1241 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1243 fd = open_exfile(fname, eap->forceit, WRITEBIN); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1244 if (fd != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1246 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 if (eap->cmdidx == CMD_mkview) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1248 flagp = &vop_flags; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1249 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 flagp = &ssop_flags; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1252 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 #ifdef MKSESSION_NL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1254 // "unix" in 'sessionoptions': use NL line separator |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 if (view_session && (*flagp & SSOP_UNIX)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 mksession_nl = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1258 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 // Write the version command for :mkvimrc |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1260 if (eap->cmdidx == CMD_mkvimrc) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 (void)put_line(fd, "version 6.0"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1264 if (eap->cmdidx == CMD_mksession) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1265 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1266 if (put_line(fd, "let SessionLoad = 1") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1267 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1268 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 if (eap->cmdidx != CMD_mkview) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 // Write setting 'compatible' first, because it has side effects. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 // For that same reason only do it when needed. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 if (p_cp) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1276 (void)put_line(fd, "if !&cp | set cp | endif"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 (void)put_line(fd, "if &cp | set nocp | endif"); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 if (!view_session |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 || (eap->cmdidx == CMD_mksession |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 && (*flagp & SSOP_OPTIONS))) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 #endif |
24464
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1286 { |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1287 int flags = OPT_GLOBAL; |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1288 |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1289 #ifdef FEAT_SESSION |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1290 if (eap->cmdidx == CMD_mksession && (*flagp & SSOP_SKIP_RTP)) |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1291 flags |= OPT_SKIPRTP; |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1292 #endif |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 failed |= (makemap(fd, NULL) == FAIL |
24464
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1294 || makeset(fd, flags, FALSE) == FAIL); |
a56f9c2ba51c
patch 8.2.2772: problems when restoring 'runtimepath' from a session file
Bram Moolenaar <Bram@vim.org>
parents:
24106
diff
changeset
|
1295 } |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 if (!failed && view_session) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1299 { |
22776
0583f3e2c12e
patch 8.2.1936: session sets the local 'scrolloff' value to the global value
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
1300 if (put_line(fd, "let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1") == FAIL) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 if (eap->cmdidx == CMD_mksession) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1303 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 char_u *dirnow; // current directory |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 dirnow = alloc(MAXPATHL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1307 if (dirnow == NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1310 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 // Change to session file's dir. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 if (mch_dirname(dirnow, MAXPATHL) == FAIL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 || mch_chdir((char *)dirnow) != 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 *dirnow = NUL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1315 if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 if (vim_chdirfile(fname, NULL) == OK) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1318 shorten_fnames(TRUE); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1320 else if (*dirnow != NUL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 && (ssop_flags & SSOP_CURDIR) && globaldir != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1323 if (mch_chdir((char *)globaldir) == 0) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 shorten_fnames(TRUE); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 failed |= (makeopens(fd, dirnow) == FAIL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 // restore original dir |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 || ((ssop_flags & SSOP_CURDIR) && globaldir != NULL))) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1332 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 if (mch_chdir((char *)dirnow) != 0) |
26877
06a137af96f8
patch 8.2.3967: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26439
diff
changeset
|
1334 emsg(_(e_cannot_go_back_to_previous_directory)); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 shorten_fnames(TRUE); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 vim_free(dirnow); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 { |
22230
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
1342 failed |= (put_view(fd, curwin, !using_vdir, flagp, -1, NULL) |
0bbc8be90207
patch 8.2.1664: memory leak when using :mkview with a terminal buffer
Bram Moolenaar <Bram@vim.org>
parents:
22226
diff
changeset
|
1343 == FAIL); |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 } |
22776
0583f3e2c12e
patch 8.2.1936: session sets the local 'scrolloff' value to the global value
Bram Moolenaar <Bram@vim.org>
parents:
22699
diff
changeset
|
1345 if (put_line(fd, "let &g:so = s:so_save | let &g:siso = s:siso_save") |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1346 == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1347 failed = TRUE; |
17539
554240b9574b
patch 8.1.1767: FEAT_SESSION defined separately
Bram Moolenaar <Bram@vim.org>
parents:
17536
diff
changeset
|
1348 #ifdef FEAT_SEARCH_EXTRA |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 if (no_hlsearch && put_line(fd, "nohlsearch") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 failed = TRUE; |
17539
554240b9574b
patch 8.1.1767: FEAT_SESSION defined separately
Bram Moolenaar <Bram@vim.org>
parents:
17536
diff
changeset
|
1351 #endif |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 if (put_line(fd, "doautoall SessionLoadPost") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 if (eap->cmdidx == CMD_mksession) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 if (put_line(fd, "unlet SessionLoad") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1361 if (put_line(fd, "\" vim: set ft=vim :") == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 failed = TRUE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 failed |= fclose(fd); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 if (failed) |
26439
b18f3b0f317c
patch 8.2.3750: error messages are everywhere
Bram Moolenaar <Bram@vim.org>
parents:
25994
diff
changeset
|
1367 emsg(_(e_error_while_writing)); |
17539
554240b9574b
patch 8.1.1767: FEAT_SESSION defined separately
Bram Moolenaar <Bram@vim.org>
parents:
17536
diff
changeset
|
1368 #if defined(FEAT_SESSION) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 else if (eap->cmdidx == CMD_mksession) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 // successful session write - set this_session var |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 char_u *tbuf; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 tbuf = alloc(MAXPATHL); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1375 if (tbuf != NULL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 set_vim_var_string(VV_THIS_SESSION, tbuf, -1); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1379 vim_free(tbuf); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1382 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 #ifdef MKSESSION_NL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 mksession_nl = FALSE; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 #ifdef FEAT_BROWSE |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 theend: |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 vim_free(browseFile); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1391 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1392 #ifdef FEAT_SESSION |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 vim_free(viewFile); |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1395 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 |
17539
554240b9574b
patch 8.1.1767: FEAT_SESSION defined separately
Bram Moolenaar <Bram@vim.org>
parents:
17536
diff
changeset
|
1397 #if (defined(FEAT_VIMINFO) || defined(FEAT_SESSION)) || defined(PROTO) |
17536
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 var_flavour_T |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 var_flavour(char_u *varname) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 char_u *p = varname; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 if (ASCII_ISUPPER(*p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 while (*(++p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1406 if (ASCII_ISLOWER(*p)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 return VAR_FLAVOUR_SESSION; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1408 return VAR_FLAVOUR_VIMINFO; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 else |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 return VAR_FLAVOUR_DEFAULT; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1412 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 * Write end-of-line character(s) for ":mkexrc", ":mkvimrc" and ":mksession". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1417 * Return FAIL for a write error. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 put_eol(FILE *fd) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1422 if ( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 #ifdef USE_CRNL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 ( |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 # ifdef MKSESSION_NL |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 !mksession_nl && |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 # endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1428 (putc('\r', fd) < 0)) || |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 #endif |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 (putc('\n', fd) < 0)) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1431 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1432 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1433 } |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1434 |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1435 /* |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1436 * Write a line to "fd". |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1437 * Return FAIL for a write error. |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1438 */ |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 int |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1440 put_line(FILE *fd, char *s) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 { |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1442 if (fputs(s, fd) < 0 || put_eol(fd) == FAIL) |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 return FAIL; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 return OK; |
e00d12c085a5
patch 8.1.1766: code for writing session file is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 } |