annotate src/mark.c @ 4444:ccecb03e5e8b v7.3.970

updated for version 7.3.970 Problem: Syntax highlighting can be slow. Solution: Include the NFA regexp engine. Add the 'regexpengine' option to select which one is used. (various authors, including Ken Takata, Andrei Aiordachioaie, Russ Cox, Xiaozhou Liua, Ian Young)
author Bram Moolenaar <bram@vim.org>
date Sun, 19 May 2013 19:40:29 +0200
parents c0cc0e0620dd
children cd971e951b06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1 /* vi:set ts=8 sts=4 sw=4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * mark.c: functions for setting marks and jumping to them
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 * This file contains routines to maintain and manipulate marks.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 * If a named file mark's lnum is non-zero, it is valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 * If a named file mark's fnum is non-zero, it is for an existing buffer,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 * otherwise it is from .viminfo and namedfm[n].fname is the file name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 * There are marks 'A - 'Z (set by user) and '0 to '9 (set when writing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 * viminfo).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 #define EXTRA_MARKS 10 /* marks 0-9 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 static xfmark_T namedfm[NMARKS + EXTRA_MARKS]; /* marks with file nr */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 static void fname2fnum __ARGS((xfmark_T *fm));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 static void fmarks_check_one __ARGS((xfmark_T *fm, char_u *name, buf_T *buf));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 static char_u *mark_line __ARGS((pos_T *mp, int lead_len));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 static void show_one_mark __ARGS((int, char_u *, pos_T *, char_u *, int current));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 static void cleanup_jumplist __ARGS((void));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 #ifdef FEAT_VIMINFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 static void write_one_filemark __ARGS((FILE *fp, xfmark_T *fm, int c1, int c2));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 /*
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
42 * Set named mark "c" at current cursor position.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 * Returns OK on success, FAIL if bad name given.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 setmark(c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 {
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
49 return setmark_pos(c, &curwin->w_cursor, curbuf->b_fnum);
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
50 }
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
51
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
52 /*
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
53 * Set named mark "c" to position "pos".
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
54 * When "c" is upper case use file "fnum".
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
55 * Returns OK on success, FAIL if bad name given.
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
56 */
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
57 int
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
58 setmark_pos(c, pos, fnum)
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
59 int c;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
60 pos_T *pos;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
61 int fnum;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
62 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 /* Check for a special key (may cause islower() to crash). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 if (c < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 if (c == '\'' || c == '`')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 {
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
71 if (pos == &curwin->w_cursor)
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
72 {
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
73 setpcmark();
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
74 /* keep it even when the cursor doesn't move */
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
75 curwin->w_prev_pcmark = curwin->w_pcmark;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
76 }
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
77 else
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
78 curwin->w_pcmark = *pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
1533
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
82 if (c == '"')
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
83 {
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
84 curbuf->b_last_cursor = *pos;
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
85 return OK;
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
86 }
8abc0abf8cbd updated for version 7.1-248
vimboss
parents: 1480
diff changeset
87
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 /* Allow setting '[ and '] for an autocommand that simulates reading a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 * file. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 if (c == '[')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 {
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
92 curbuf->b_op_start = *pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 if (c == ']')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 {
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
97 curbuf->b_op_end = *pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100
3660
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
101 #ifdef FEAT_VISUAL
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
102 if (c == '<')
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
103 {
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
104 curbuf->b_visual.vi_start = *pos;
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
105 return OK;
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
106 }
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
107 if (c == '>')
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
108 {
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
109 curbuf->b_visual.vi_end = *pos;
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
110 return OK;
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
111 }
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
112 #endif
bdf7f3e4c763 updated for version 7.3.590
Bram Moolenaar <bram@vim.org>
parents: 2712
diff changeset
113
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 #ifndef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 if (c > 'z') /* some islower() and isupper() cannot handle
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 characters above 127 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 if (islower(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 i = c - 'a';
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
122 curbuf->b_namedm[i] = *pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 if (isupper(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127 i = c - 'A';
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
128 namedfm[i].fmark.mark = *pos;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
129 namedfm[i].fmark.fnum = fnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 vim_free(namedfm[i].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 namedfm[i].fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 * Set the previous context mark to the current position and add it to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 * jump list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 setpcmark()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 #ifdef JUMPLIST_ROTATE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 xfmark_T tempmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 /* for :global the mark is set only once */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 if (global_busy || listcmd_busy || cmdmod.keepjumps)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 curwin->w_prev_pcmark = curwin->w_pcmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 curwin->w_pcmark = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 # ifdef JUMPLIST_ROTATE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 * If last used entry is not at the top, put it at the top by rotating
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 * the stack until it is (the newer entries will be at the bottom).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 * Keep one entry (the last used one) at the top.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 if (curwin->w_jumplistidx < curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 ++curwin->w_jumplistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 while (curwin->w_jumplistidx < curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 tempmark = curwin->w_jumplist[curwin->w_jumplistlen - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 for (i = curwin->w_jumplistlen - 1; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 curwin->w_jumplist[i] = curwin->w_jumplist[i - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 curwin->w_jumplist[0] = tempmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 ++curwin->w_jumplistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 /* If jumplist is full: remove oldest entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 if (++curwin->w_jumplistlen > JUMPLISTSIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 curwin->w_jumplistlen = JUMPLISTSIZE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 vim_free(curwin->w_jumplist[0].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 for (i = 1; i < JUMPLISTSIZE; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 curwin->w_jumplist[i - 1] = curwin->w_jumplist[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 curwin->w_jumplistidx = curwin->w_jumplistlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 fm = &curwin->w_jumplist[curwin->w_jumplistlen - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 fm->fmark.mark = curwin->w_pcmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 fm->fmark.fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 fm->fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 * To change context, call setpcmark(), then move the current position to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 * where ever, then call checkpcmark(). This ensures that the previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 * context will only be changed if the cursor moved to a different line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 * If pcmark was deleted (with "dG") the previous mark is restored.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 checkpcmark()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 if (curwin->w_prev_pcmark.lnum != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 && (equalpos(curwin->w_pcmark, curwin->w_cursor)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 || curwin->w_pcmark.lnum == 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 curwin->w_pcmark = curwin->w_prev_pcmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 curwin->w_prev_pcmark.lnum = 0; /* Show it has been checked */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 #if defined(FEAT_JUMPLIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 * move "count" positions in the jump list (count may be negative)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 pos_T *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 movemark(count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 pos_T *pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 xfmark_T *jmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 cleanup_jumplist();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 if (curwin->w_jumplistlen == 0) /* nothing to jump to */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 if (curwin->w_jumplistidx + count < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 || curwin->w_jumplistidx + count >= curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 * if first CTRL-O or CTRL-I command after a jump, add cursor position
1188
2a276274c592 updated for version 7.1b
vimboss
parents: 706
diff changeset
237 * to list. Careful: If there are duplicates (CTRL-O immediately after
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 * starting Vim on a file), another entry may have been removed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 if (curwin->w_jumplistidx == curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 --curwin->w_jumplistidx; /* skip the new entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 if (curwin->w_jumplistidx + count < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 curwin->w_jumplistidx += count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 jmp = curwin->w_jumplist + curwin->w_jumplistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 if (jmp->fmark.fnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 fname2fnum(jmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 if (jmp->fmark.fnum != curbuf->b_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 /* jump to other file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 if (buflist_findnr(jmp->fmark.fnum) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 { /* Skip this one .. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 count += count < 0 ? -1 : 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 if (buflist_getfile(jmp->fmark.fnum, jmp->fmark.mark.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 0, FALSE) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 /* Set lnum again, autocommands my have changed it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 curwin->w_cursor = jmp->fmark.mark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 pos = (pos_T *)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 pos = &(jmp->fmark.mark);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 return pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 * Move "count" positions in the changelist (count may be negative).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 pos_T *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 movechangelist(count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 if (curbuf->b_changelistlen == 0) /* nothing to jump to */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 n = curwin->w_changelistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 if (n + count < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 if (n == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 else if (n + count >= curbuf->b_changelistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 if (n == curbuf->b_changelistlen - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 return (pos_T *)NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 n = curbuf->b_changelistlen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 n += count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 curwin->w_changelistidx = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 return curbuf->b_changelist + n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 /*
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
307 * Find mark "c" in buffer pointed to by "buf".
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
308 * If "changefile" is TRUE it's allowed to edit another file for '0, 'A, etc.
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
309 * If "fnum" is not NULL store the fnum there for '0, 'A etc., don't edit
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
310 * another file.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 * Returns:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 * - pointer to pos_T if found. lnum is 0 when mark not set, -1 when mark is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 * in another file which can't be gotten. (caller needs to check lnum!)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 * - NULL if there is no mark called 'c'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 * - -1 if mark is in other file and jumped there (only if changefile is TRUE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 pos_T *
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
318 getmark_buf(buf, c, changefile)
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
319 buf_T *buf;
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
320 int c;
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
321 int changefile;
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
322 {
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
323 return getmark_buf_fnum(buf, c, changefile, NULL);
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
324 }
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
325
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
326 pos_T *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 getmark(c, changefile)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 int c;
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
329 int changefile;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
330 {
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
331 return getmark_buf_fnum(curbuf, c, changefile, NULL);
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
332 }
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
333
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
334 pos_T *
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
335 getmark_buf_fnum(buf, c, changefile, fnum)
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
336 buf_T *buf;
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
337 int c;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
338 int changefile;
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
339 int *fnum;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 pos_T *posp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 pos_T *startp, *endp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 static pos_T pos_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 posp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 /* Check for special key, can't be a mark name and might cause islower()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 * to crash. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 if (c < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 return posp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 #ifndef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 if (c > '~') /* check for islower()/isupper() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 if (c == '\'' || c == '`') /* previous context mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 pos_copy = curwin->w_pcmark; /* need to make a copy because */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 posp = &pos_copy; /* w_pcmark may be changed soon */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 else if (c == '"') /* to pos when leaving buffer */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
364 posp = &(buf->b_last_cursor);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 else if (c == '^') /* to where Insert mode stopped */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
366 posp = &(buf->b_last_insert);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 else if (c == '.') /* to where last change was made */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
368 posp = &(buf->b_last_change);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 else if (c == '[') /* to start of previous operator */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
370 posp = &(buf->b_op_start);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 else if (c == ']') /* to end of previous operator */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
372 posp = &(buf->b_op_end);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 else if (c == '{' || c == '}') /* to previous/next paragraph */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 oparg_T oa;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 int slcb = listcmd_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 pos = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 listcmd_busy = TRUE; /* avoid that '' is changed */
503
c9ec7077a195 updated for version 7.0141
vimboss
parents: 358
diff changeset
381 if (findpar(&oa.inclusive,
c9ec7077a195 updated for version 7.0141
vimboss
parents: 358
diff changeset
382 c == '}' ? FORWARD : BACKWARD, 1L, NUL, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 pos_copy = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 posp = &pos_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 curwin->w_cursor = pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 listcmd_busy = slcb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 else if (c == '(' || c == ')') /* to previous/next sentence */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 int slcb = listcmd_busy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 pos = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 listcmd_busy = TRUE; /* avoid that '' is changed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 if (findsent(c == ')' ? FORWARD : BACKWARD, 1L))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 pos_copy = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 posp = &pos_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 curwin->w_cursor = pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 listcmd_busy = slcb;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 else if (c == '<' || c == '>') /* start/end of visual area */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 {
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
408 startp = &buf->b_visual.vi_start;
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
409 endp = &buf->b_visual.vi_end;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 if ((c == '<') == lt(*startp, *endp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 posp = startp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 posp = endp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 * For Visual line mode, set mark at begin or end of line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 */
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
417 if (buf->b_visual.vi_mode == 'V')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 pos_copy = *posp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 posp = &pos_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 if (c == '<')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 pos_copy.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 pos_copy.col = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 pos_copy.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 else if (ASCII_ISLOWER(c)) /* normal named mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 {
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
433 posp = &(buf->b_namedm[c - 'a']);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 else if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c)) /* named file mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 if (VIM_ISDIGIT(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 c = c - '0' + NMARKS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 c -= 'A';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 posp = &(namedfm[c].fmark.mark);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 if (namedfm[c].fmark.fnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 fname2fnum(&namedfm[c]);
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
445
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
446 if (fnum != NULL)
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
447 *fnum = namedfm[c].fmark.fnum;
4043
80b041b994d1 updated for version 7.3.776
Bram Moolenaar <bram@vim.org>
parents: 3660
diff changeset
448 else if (namedfm[c].fmark.fnum != buf->b_fnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 {
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 690
diff changeset
450 /* mark is in another file */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 posp = &pos_copy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 if (namedfm[c].fmark.mark.lnum != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 && changefile && namedfm[c].fmark.fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 if (buflist_getfile(namedfm[c].fmark.fnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 (linenr_T)1, GETF_SETMARK, FALSE) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 /* Set the lnum now, autocommands could have changed it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 curwin->w_cursor = namedfm[c].fmark.mark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 return (pos_T *)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 pos_copy.lnum = -1; /* can't get file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 pos_copy.lnum = 0; /* mark exists, but is not valid in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 current buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 return posp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 * Search for the next named mark in the current file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 * Returns pointer to pos_T of the next mark or NULL if no mark is found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 pos_T *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 getnextmark(startpos, dir, begin_line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 pos_T *startpos; /* where to start */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 int dir; /* direction for search */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 int begin_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 pos_T *result = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 pos_T pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 pos = *startpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 /* When searching backward and leaving the cursor on the first non-blank,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 * position must be in a previous line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
493 * When searching forward and leaving the cursor on the first non-blank,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
494 * position must be in a next line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
495 if (dir == BACKWARD && begin_line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496 pos.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 else if (dir == FORWARD && begin_line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 pos.col = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 if (curbuf->b_namedm[i].lnum > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 if (dir == FORWARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 if ((result == NULL || lt(curbuf->b_namedm[i], *result))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 && lt(pos, curbuf->b_namedm[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 result = &curbuf->b_namedm[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 if ((result == NULL || lt(*result, curbuf->b_namedm[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 && lt(curbuf->b_namedm[i], pos))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 result = &curbuf->b_namedm[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 return result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
523 * For an xtended filemark: set the fnum from the fname.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 * This is used for marks obtained from the .viminfo file. It's postponed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 * until the mark is used to avoid a long startup delay.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 fname2fnum(fm)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 if (fm->fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 * First expand "~/" in the file name to the home directory.
1480
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
537 * Don't expand the whole name, it may contain other '~' chars.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 */
1480
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
539 if (fm->fname[0] == '~' && (fm->fname[1] == '/'
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
540 #ifdef BACKSLASH_IN_FILENAME
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
541 || fm->fname[1] == '\\'
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
542 #endif
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
543 ))
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
544 {
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
545 int len;
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
546
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
547 expand_env((char_u *)"~/", NameBuff, MAXPATHL);
1570
f0cfff4dcc2f updated for version 7.1-283
vimboss
parents: 1533
diff changeset
548 len = (int)STRLEN(NameBuff);
1480
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
549 vim_strncpy(NameBuff + len, fm->fname + 2, MAXPATHL - len - 1);
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
550 }
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
551 else
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
552 vim_strncpy(NameBuff, fm->fname, MAXPATHL - 1);
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
553
801d55448282 updated for version 7.1-195
vimboss
parents: 1188
diff changeset
554 /* Try to shorten the file name. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 mch_dirname(IObuff, IOSIZE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 p = shorten_fname(NameBuff, IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 /* buflist_new() will call fmarks_check_names() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 (void)buflist_new(NameBuff, p, (linenr_T)1, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 * Check all file marks for a name that matches the file name in buf.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 * May replace the name with an fnum.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 * Used for marks that come from the .viminfo file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 fmarks_check_names(buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 if (buf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 name = home_replace_save(buf, buf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 if (name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 fmarks_check_one(&namedfm[i], name, buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
587
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
588 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 for (i = 0; i < wp->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 fmarks_check_one(&wp->w_jumplist[i], name, buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 fmarks_check_one(fm, name, buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 if (fm->fmark.fnum == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606 && fm->fname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 && fnamecmp(name, fm->fname) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 fm->fmark.fnum = buf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 vim_free(fm->fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 fm->fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 * Check a if a position from a mark is valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 * Give and error message and return FAIL if not.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 check_mark(pos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 pos_T *pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 if (pos == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 EMSG(_(e_umark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 if (pos->lnum <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 /* lnum is negative if mark is in another file can can't get that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 * file, error message already give then. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 if (pos->lnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 EMSG(_(e_marknotset));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 if (pos->lnum > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
638 EMSG(_(e_markinval));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 * clrallmarks() - clear all marks in the buffer 'buf'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 * Used mainly when trashing the entire buffer during ":e" type commands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 clrallmarks(buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 static int i = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 if (i == -1) /* first call ever: initialize */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 for (i = 0; i < NMARKS + 1; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 namedfm[i].fmark.mark.lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 namedfm[i].fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 buf->b_namedm[i].lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 buf->b_op_start.lnum = 0; /* start/end op mark cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 buf->b_op_end.lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 buf->b_last_cursor.lnum = 1; /* '" mark cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 buf->b_last_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 buf->b_last_cursor.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 buf->b_last_insert.lnum = 0; /* '^ mark cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672 buf->b_last_change.lnum = 0; /* '. mark cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 buf->b_changelistlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 * Get name of file from a filemark.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 * When it's in the current buffer, return the text at the mark.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 * Returns an allocated string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 fm_getname(fmark, lead_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 fmark_T *fmark;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 int lead_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 if (fmark->fnum == curbuf->b_fnum) /* current buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 return mark_line(&(fmark->mark), lead_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 return buflist_nr2name(fmark->fnum, FALSE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 * Return the line at mark "mp". Truncate to fit in window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 * The returned string has been allocated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 static char_u *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 mark_line(mp, lead_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 pos_T *mp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 int lead_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 char_u *s, *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 return vim_strsave((char_u *)"-invalid-");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 if (s == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 /* Truncate the line to fit it in the window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 len = 0;
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 24
diff changeset
712 for (p = s; *p != NUL; mb_ptr_adv(p))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 len += ptr2cells(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 if (len >= Columns - lead_len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 * print the marks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726 do_marks(eap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 exarg_T *eap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
733 if (arg != NULL && *arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 arg = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
736 show_one_mark('\'', arg, &curwin->w_pcmark, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 for (i = 0; i < NMARKS; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 show_one_mark(i + 'a', arg, &curbuf->b_namedm[i], NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
741 if (namedfm[i].fmark.fnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 name = fm_getname(&namedfm[i].fmark, 15);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
743 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
744 name = namedfm[i].fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
745 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 show_one_mark(i >= NMARKS ? i - NMARKS + '0' : i + 'A',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 arg, &namedfm[i].fmark.mark, name,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 namedfm[i].fmark.fnum == curbuf->b_fnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 if (namedfm[i].fmark.fnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 show_one_mark('"', arg, &curbuf->b_last_cursor, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 show_one_mark('[', arg, &curbuf->b_op_start, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 show_one_mark(']', arg, &curbuf->b_op_end, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 show_one_mark('^', arg, &curbuf->b_last_insert, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 show_one_mark('.', arg, &curbuf->b_last_change, NULL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 #ifdef FEAT_VISUAL
690
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
760 show_one_mark('<', arg, &curbuf->b_visual.vi_start, NULL, TRUE);
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
761 show_one_mark('>', arg, &curbuf->b_visual.vi_end, NULL, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 show_one_mark(-1, arg, NULL, NULL, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 show_one_mark(c, arg, p, name, current)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 char_u *arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 pos_T *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 int current; /* in current file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 static int did_title = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 int mustfree = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 if (c == -1) /* finish up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 if (did_title)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 did_title = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 if (arg == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 MSG(_("No marks set"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 EMSG2(_("E283: No marks matching \"%s\""), arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 /* don't output anything if 'q' typed at --more-- prompt */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 else if (!got_int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
791 && (arg == NULL || vim_strchr(arg, c) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 && p->lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 if (!did_title)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 /* Highlight title */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 MSG_PUTS_TITLE(_("\nmark line col file/text"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 did_title = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 if (!got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 sprintf((char *)IObuff, " %c %6ld %4d ", c, p->lnum, p->col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 if (name == NULL && current)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
807 name = mark_line(p, 15);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
808 mustfree = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
809 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 msg_outtrans_attr(name, current ? hl_attr(HLF_D) : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 if (mustfree)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 out_flush(); /* show one line at a time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
821 /*
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
822 * ":delmarks[!] [marks]"
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
823 */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
824 void
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
825 ex_delmarks(eap)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
826 exarg_T *eap;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
827 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
828 char_u *p;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
829 int from, to;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
830 int i;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
831 int lower;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
832 int digit;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
833 int n;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
834
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
835 if (*eap->arg == NUL && eap->forceit)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
836 /* clear all marks */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
837 clrallmarks(curbuf);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
838 else if (eap->forceit)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
839 EMSG(_(e_invarg));
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
840 else if (*eap->arg == NUL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
841 EMSG(_(e_argreq));
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
842 else
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
843 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
844 /* clear specified marks only */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
845 for (p = eap->arg; *p != NUL; ++p)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
846 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
847 lower = ASCII_ISLOWER(*p);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
848 digit = VIM_ISDIGIT(*p);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
849 if (lower || digit || ASCII_ISUPPER(*p))
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
850 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
851 if (p[1] == '-')
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
852 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
853 /* clear range of marks */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
854 from = *p;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
855 to = p[2];
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
856 if (!(lower ? ASCII_ISLOWER(p[2])
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
857 : (digit ? VIM_ISDIGIT(p[2])
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
858 : ASCII_ISUPPER(p[2])))
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
859 || to < from)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
860 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
861 EMSG2(_(e_invarg2), p);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
862 return;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
863 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
864 p += 2;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
865 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
866 else
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
867 /* clear one lower case mark */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
868 from = to = *p;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
869
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
870 for (i = from; i <= to; ++i)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
871 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
872 if (lower)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
873 curbuf->b_namedm[i - 'a'].lnum = 0;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
874 else
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
875 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
876 if (digit)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
877 n = i - '0' + NMARKS;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
878 else
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
879 n = i - 'A';
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
880 namedfm[n].fmark.mark.lnum = 0;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
881 vim_free(namedfm[n].fname);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
882 namedfm[n].fname = NULL;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
883 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
884 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
885 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
886 else
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
887 switch (*p)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
888 {
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
889 case '"': curbuf->b_last_cursor.lnum = 0; break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
890 case '^': curbuf->b_last_insert.lnum = 0; break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
891 case '.': curbuf->b_last_change.lnum = 0; break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
892 case '[': curbuf->b_op_start.lnum = 0; break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
893 case ']': curbuf->b_op_end.lnum = 0; break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
894 #ifdef FEAT_VISUAL
690
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
895 case '<': curbuf->b_visual.vi_start.lnum = 0; break;
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
896 case '>': curbuf->b_visual.vi_end.lnum = 0; break;
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
897 #endif
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
898 case ' ': break;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
899 default: EMSG2(_(e_invarg2), p);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
900 return;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
901 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
902 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
903 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
904 }
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 7
diff changeset
905
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 #if defined(FEAT_JUMPLIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 * print the jumplist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 ex_jumps(eap)
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1863
diff changeset
912 exarg_T *eap UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 cleanup_jumplist();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 /* Highlight title */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 MSG_PUTS_TITLE(_("\n jump line col file/text"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 for (i = 0; i < curwin->w_jumplistlen && !got_int; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 if (curwin->w_jumplist[i].fmark.mark.lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 if (curwin->w_jumplist[i].fmark.fnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 fname2fnum(&curwin->w_jumplist[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 name = fm_getname(&curwin->w_jumplist[i].fmark, 16);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 if (name == NULL) /* file name not available */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 if (got_int)
1702
5232b9862f23 updated for version 7.2-000
vimboss
parents: 1570
diff changeset
932 {
5232b9862f23 updated for version 7.2-000
vimboss
parents: 1570
diff changeset
933 vim_free(name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 break;
1702
5232b9862f23 updated for version 7.2-000
vimboss
parents: 1570
diff changeset
935 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 sprintf((char *)IObuff, "%c %2d %5ld %4d ",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 i == curwin->w_jumplistidx ? '>' : ' ',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 i > curwin->w_jumplistidx ? i - curwin->w_jumplistidx
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 : curwin->w_jumplistidx - i,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 curwin->w_jumplist[i].fmark.mark.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 curwin->w_jumplist[i].fmark.mark.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 msg_outtrans_attr(name,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 curwin->w_jumplist[i].fmark.fnum == curbuf->b_fnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 ? hl_attr(HLF_D) : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 if (curwin->w_jumplistidx == curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 MSG_PUTS("\n>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 * print the changelist
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 ex_changes(eap)
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1863
diff changeset
960 exarg_T *eap UNUSED;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 /* Highlight title */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 MSG_PUTS_TITLE(_("\nchange line col text"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 for (i = 0; i < curbuf->b_changelistlen && !got_int; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 if (curbuf->b_changelist[i].lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 sprintf((char *)IObuff, "%c %3d %5ld %4d ",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 i == curwin->w_changelistidx ? '>' : ' ',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 i > curwin->w_changelistidx ? i - curwin->w_changelistidx
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 : curwin->w_changelistidx - i,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 (long)curbuf->b_changelist[i].lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 curbuf->b_changelist[i].col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 name = mark_line(&curbuf->b_changelist[i], 17);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 if (name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 msg_outtrans_attr(name, hl_attr(HLF_D));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 if (curwin->w_changelistidx == curbuf->b_changelistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 MSG_PUTS("\n>");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 #define one_adjust(add) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 lp = add; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 if (*lp >= line1 && *lp <= line2) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 if (amount == MAXLNUM) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 *lp = 0; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 else \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 *lp += amount; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 } \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 else if (amount_after && *lp > line2) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 *lp += amount_after; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 /* don't delete the line, just put at first deleted line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 #define one_adjust_nodel(add) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 lp = add; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 if (*lp >= line1 && *lp <= line2) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 if (amount == MAXLNUM) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 *lp = line1; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 else \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 *lp += amount; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 } \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 else if (amount_after && *lp > line2) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 *lp += amount_after; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 * Adjust marks between line1 and line2 (inclusive) to move 'amount' lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 * Must be called before changed_*(), appended_lines() or deleted_lines().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 * May be called before or after changing the text.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 * When deleting lines line1 to line2, use an 'amount' of MAXLNUM: The marks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 * within this range are made invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 * If 'amount_after' is non-zero adjust marks after line2.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 * Example: Delete lines 34 and 35: mark_adjust(34, 35, MAXLNUM, -2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 * Example: Insert two lines below 55: mark_adjust(56, MAXLNUM, 2, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 * or: mark_adjust(56, 55, MAXLNUM, 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 mark_adjust(line1, line2, amount, amount_after)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 linenr_T line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 linenr_T line2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 long amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 long amount_after;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 int fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 linenr_T *lp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 win_T *win;
1863
63369d73b551 updated for version 7.2-161
vimboss
parents: 1733
diff changeset
1047 #ifdef FEAT_WINDOWS
63369d73b551 updated for version 7.2-161
vimboss
parents: 1733
diff changeset
1048 tabpage_T *tab;
63369d73b551 updated for version 7.2-161
vimboss
parents: 1733
diff changeset
1049 #endif
4092
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1050 static pos_T initpos = INIT_POS_T(1, 0, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 if (line2 < line1 && amount_after == 0L) /* nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1054
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1055 if (!cmdmod.lockmarks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 /* named marks, lower case and upper case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 one_adjust(&(curbuf->b_namedm[i].lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 if (namedfm[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 one_adjust_nodel(&(namedfm[i].fmark.mark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 for (i = NMARKS; i < NMARKS + EXTRA_MARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 if (namedfm[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 one_adjust_nodel(&(namedfm[i].fmark.mark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 /* last Insert position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 one_adjust(&(curbuf->b_last_insert.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 /* last change position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 one_adjust(&(curbuf->b_last_change.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075
4092
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1076 /* last cursor position, if it was set */
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1077 if (!equalpos(curbuf->b_last_cursor, initpos))
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1078 one_adjust(&(curbuf->b_last_cursor.lnum));
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1079
c0cc0e0620dd updated for version 7.3.800
Bram Moolenaar <bram@vim.org>
parents: 4043
diff changeset
1080
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 /* list of change positions */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 for (i = 0; i < curbuf->b_changelistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 one_adjust_nodel(&(curbuf->b_changelist[i].lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 /* Visual area */
690
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
1089 one_adjust_nodel(&(curbuf->b_visual.vi_start.lnum));
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
1090 one_adjust_nodel(&(curbuf->b_visual.vi_end.lnum));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 /* quickfix marks */
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 503
diff changeset
1095 qf_mark_adjust(NULL, line1, line2, amount, amount_after);
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 503
diff changeset
1096 /* location lists */
1863
63369d73b551 updated for version 7.2-161
vimboss
parents: 1733
diff changeset
1097 FOR_ALL_TAB_WINDOWS(tab, win)
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 503
diff changeset
1098 qf_mark_adjust(win, line1, line2, amount, amount_after);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 #ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 sign_mark_adjust(line1, line2, amount, amount_after);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 /* previous context mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 one_adjust(&(curwin->w_pcmark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 /* previous pcmark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 one_adjust(&(curwin->w_prev_pcmark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 /* saved cursor for formatting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 if (saved_cursor.lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 one_adjust_nodel(&(saved_cursor.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 * Adjust items in all windows related to the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 */
1863
63369d73b551 updated for version 7.2-161
vimboss
parents: 1733
diff changeset
1119 FOR_ALL_TAB_WINDOWS(tab, win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 if (!cmdmod.lockmarks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 /* Marks in the jumplist. When deleting lines, this may create
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 * duplicate marks in the jumplist, they will be removed later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 for (i = 0; i < win->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 if (win->w_jumplist[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 one_adjust_nodel(&(win->w_jumplist[i].fmark.mark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 if (win->w_buffer == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 if (!cmdmod.lockmarks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 /* marks in the tag stack */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 for (i = 0; i < win->w_tagstacklen; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 if (win->w_tagstack[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 one_adjust_nodel(&(win->w_tagstack[i].fmark.mark.lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 /* the displayed Visual area */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 if (win->w_old_cursor_lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 one_adjust_nodel(&(win->w_old_cursor_lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 one_adjust_nodel(&(win->w_old_visual_lnum));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 /* topline and cursor position for windows with the same buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 * other than the current window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 if (win != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 if (win->w_topline >= line1 && win->w_topline <= line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 if (amount == MAXLNUM) /* topline is deleted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 if (line1 <= 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 win->w_topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 win->w_topline = line1 - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 else /* keep topline on the same line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 win->w_topline += amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 win->w_topfill = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 else if (amount_after && win->w_topline > line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 win->w_topline += amount_after;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 win->w_topfill = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 if (win->w_cursor.lnum >= line1 && win->w_cursor.lnum <= line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 if (amount == MAXLNUM) /* line with cursor is deleted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 if (line1 <= 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 win->w_cursor.lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 win->w_cursor.lnum = line1 - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 win->w_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 else /* keep cursor on the same line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 win->w_cursor.lnum += amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 else if (amount_after && win->w_cursor.lnum > line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 win->w_cursor.lnum += amount_after;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 /* adjust folds */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 foldMarkAdjust(win, line1, line2, amount, amount_after);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 /* adjust diffs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 diff_mark_adjust(line1, line2, amount, amount_after);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 /* This code is used often, needs to be fast. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 #define col_adjust(pp) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 posp = pp; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 if (posp->lnum == lnum && posp->col >= mincol) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 { \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 posp->lnum += lnum_amount; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 if (col_amount < 0 && posp->col <= (colnr_T)-col_amount) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 posp->col = 0; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 else \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 posp->col += col_amount; \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 } \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 * Adjust marks in line "lnum" at column "mincol" and further: add
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 * "lnum_amount" to the line number and add "col_amount" to the column
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 * position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 mark_col_adjust(lnum, mincol, lnum_amount, col_amount)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 colnr_T mincol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 long lnum_amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 long col_amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 int fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 win_T *win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 pos_T *posp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 if ((col_amount == 0L && lnum_amount == 0L) || cmdmod.lockmarks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 return; /* nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 /* named marks, lower case and upper case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 col_adjust(&(curbuf->b_namedm[i]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 if (namedfm[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 col_adjust(&(namedfm[i].fmark.mark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 for (i = NMARKS; i < NMARKS + EXTRA_MARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 if (namedfm[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 col_adjust(&(namedfm[i].fmark.mark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 /* last Insert position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 col_adjust(&(curbuf->b_last_insert));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 /* last change position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 col_adjust(&(curbuf->b_last_change));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 /* list of change positions */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 for (i = 0; i < curbuf->b_changelistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 col_adjust(&(curbuf->b_changelist[i]));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 #ifdef FEAT_VISUAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 /* Visual area */
690
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
1264 col_adjust(&(curbuf->b_visual.vi_start));
0e922220d322 updated for version 7.0208
vimboss
parents: 671
diff changeset
1265 col_adjust(&(curbuf->b_visual.vi_end));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 /* previous context mark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 col_adjust(&(curwin->w_pcmark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 /* previous pcmark */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 col_adjust(&(curwin->w_prev_pcmark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 /* saved cursor for formatting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 col_adjust(&saved_cursor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 * Adjust items in all windows related to the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 FOR_ALL_WINDOWS(win)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 /* marks in the jumplist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 for (i = 0; i < win->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1285 if (win->w_jumplist[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 col_adjust(&(win->w_jumplist[i].fmark.mark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 if (win->w_buffer == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 /* marks in the tag stack */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 for (i = 0; i < win->w_tagstacklen; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 if (win->w_tagstack[i].fmark.fnum == fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 col_adjust(&(win->w_tagstack[i].fmark.mark));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296 /* cursor position for other windows with the same buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 if (win != curwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 col_adjust(&win->w_cursor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 * When deleting lines, this may create duplicate marks in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 * jumplist. They will be removed here for the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 cleanup_jumplist()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 int from, to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 to = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 for (from = 0; from < curwin->w_jumplistlen; ++from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 if (curwin->w_jumplistidx == from)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 curwin->w_jumplistidx = to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 for (i = from + 1; i < curwin->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 if (curwin->w_jumplist[i].fmark.fnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 == curwin->w_jumplist[from].fmark.fnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 && curwin->w_jumplist[from].fmark.fnum != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 && curwin->w_jumplist[i].fmark.mark.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 == curwin->w_jumplist[from].fmark.mark.lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 if (i >= curwin->w_jumplistlen) /* no duplicate */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 curwin->w_jumplist[to++] = curwin->w_jumplist[from];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 vim_free(curwin->w_jumplist[from].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 if (curwin->w_jumplistidx == curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 curwin->w_jumplistidx = to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 curwin->w_jumplistlen = to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 # if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 * Copy the jumplist from window "from" to window "to".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 copy_jumplist(from, to)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 win_T *from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 win_T *to;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 for (i = 0; i < from->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 to->w_jumplist[i] = from->w_jumplist[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 if (from->w_jumplist[i].fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 to->w_jumplist[i].fname = vim_strsave(from->w_jumplist[i].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 to->w_jumplistlen = from->w_jumplistlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 to->w_jumplistidx = from->w_jumplistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 * Free items in the jumplist of window "wp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 free_jumplist(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 for (i = 0; i < wp->w_jumplistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 vim_free(wp->w_jumplist[i].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 #endif /* FEAT_JUMPLIST */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 set_last_cursor(win)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 win_T *win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 win->w_buffer->b_last_cursor = win->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1379 #if defined(EXITFREE) || defined(PROTO)
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1380 void
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1381 free_all_marks()
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1382 {
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1383 int i;
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1384
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1385 for (i = 0; i < NMARKS + EXTRA_MARKS; i++)
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1386 if (namedfm[i].fmark.mark.lnum != 0)
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1387 vim_free(namedfm[i].fname);
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1388 }
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1389 #endif
e111db373ca4 updated for version 7.0093
vimboss
parents: 307
diff changeset
1390
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 #if defined(FEAT_VIMINFO) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 read_viminfo_filemark(virp, force)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 vir_T *virp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 int force;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 /* We only get here if line[0] == '\'' or '-'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 * Illegal mark names are ignored (for future expansion). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 str = virp->vir_line + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 #ifndef EBCDIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 *str <= 127 &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 || (*virp->vir_line == '-' && *str == '\'')))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 if (*str == '\'')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 /* If the jumplist isn't full insert fmark as oldest entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 if (curwin->w_jumplistlen == JUMPLISTSIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 fm = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 for (i = curwin->w_jumplistlen; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 curwin->w_jumplist[i] = curwin->w_jumplist[i - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 ++curwin->w_jumplistidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 ++curwin->w_jumplistlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 fm = &curwin->w_jumplist[0];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 fm->fmark.mark.lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 fm->fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 fm = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 else if (VIM_ISDIGIT(*str))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 fm = &namedfm[*str - '0' + NMARKS];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 fm = &namedfm[*str - 'A'];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 if (fm != NULL && (fm->fmark.mark.lnum == 0 || force))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 str = skipwhite(str + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 fm->fmark.mark.lnum = getdigits(&str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 str = skipwhite(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 fm->fmark.mark.col = getdigits(&str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 fm->fmark.mark.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 fm->fmark.fnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1445 str = skipwhite(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1446 vim_free(fm->fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1447 fm->fname = viminfo_readstring(virp, (int)(str - virp->vir_line),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 return vim_fgets(virp->vir_line, LSIZE, virp->vir_fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 write_viminfo_filemarks(fp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 FILE *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 if (get_viminfo_parameter('f') == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465
2545
298d8d6e69be Avoid warnings from the clang compiler. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 1880
diff changeset
1466 fputs(_("\n# File marks:\n"), fp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 * Find a mark that is the same file and position as the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 * That one, or else the last one is deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 * Move '0 to '1, '1 to '2, etc. until the matching one or '9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 * Set '0 mark to current cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474 if (curbuf->b_ffname != NULL && !removable(curbuf->b_ffname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 name = buflist_nr2name(curbuf->b_fnum, TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 for (i = NMARKS; i < NMARKS + EXTRA_MARKS - 1; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 if (namedfm[i].fmark.mark.lnum == curwin->w_cursor.lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 && (namedfm[i].fname == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 ? namedfm[i].fmark.fnum == curbuf->b_fnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 : (name != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 && STRCMP(name, namedfm[i].fname) == 0)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 vim_free(namedfm[i].fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 for ( ; i > NMARKS; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 namedfm[i] = namedfm[i - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 namedfm[NMARKS].fmark.mark = curwin->w_cursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 namedfm[NMARKS].fmark.fnum = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 namedfm[NMARKS].fname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 /* Write the filemarks '0 - '9 and 'A - 'Z */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 for (i = 0; i < NMARKS + EXTRA_MARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 write_one_filemark(fp, &namedfm[i], '\'',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 i < NMARKS ? i + 'A' : i - NMARKS + '0');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 /* Write the jumplist with -' */
2545
298d8d6e69be Avoid warnings from the clang compiler. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 1880
diff changeset
1501 fputs(_("\n# Jumplist (newest first):\n"), fp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 setpcmark(); /* add current cursor position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 cleanup_jumplist();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 for (fm = &curwin->w_jumplist[curwin->w_jumplistlen - 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 fm >= &curwin->w_jumplist[0]; --fm)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 if (fm->fmark.fnum == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 && !removable(buf->b_ffname)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 write_one_filemark(fp, fm, '-', '\'');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 write_one_filemark(fp, fm, c1, c2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 FILE *fp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 xfmark_T *fm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 int c1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 int c2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 if (fm->fmark.mark.lnum == 0) /* not set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 if (fm->fmark.fnum != 0) /* there is a buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 name = buflist_nr2name(fm->fmark.fnum, TRUE, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 name = fm->fname; /* use name from .viminfo */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 if (name != NULL && *name != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 fprintf(fp, "%c%c %ld %ld ", c1, c2, (long)fm->fmark.mark.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 (long)fm->fmark.mark.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 viminfo_writestring(fp, name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 if (fm->fmark.fnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 * Return TRUE if "name" is on removable media (depending on 'viminfo').
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 removable(name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 char_u part[51];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 int retval = FALSE;
307
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1552 size_t n;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 name = home_replace_save(NULL, name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 for (p = p_viminfo; *p; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 copy_option_part(&p, part, 51, ", ");
307
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1560 if (part[0] == 'r')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 {
307
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1562 n = STRLEN(part + 1);
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1563 if (MB_STRNICMP(part + 1, name, n) == 0)
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1564 {
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1565 retval = TRUE;
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1566 break;
7010607c5753 updated for version 7.0081
vimboss
parents: 302
diff changeset
1567 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 vim_free(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 static void write_one_mark __ARGS((FILE *fp_out, int c, pos_T *pos));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 * Write all the named marks for all buffers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 * Return the number of buffers for which marks have been written.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 int
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 write_viminfo_marks(fp_out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 FILE *fp_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 int is_mark_set;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1590 win_T *win;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 643
diff changeset
1591 tabpage_T *tp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 * Set b_last_cursor for the all buffers that have a window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 */
671
83a006f81bac updated for version 7.0199
vimboss
parents: 643
diff changeset
1596 FOR_ALL_TAB_WINDOWS(tp, win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 set_last_cursor(win);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 set_last_cursor(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601
2545
298d8d6e69be Avoid warnings from the clang compiler. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 1880
diff changeset
1602 fputs(_("\n# History of marks within files (newest to oldest):\n"), fp_out);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 for (buf = firstbuf; buf != NULL; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 * Only write something if buffer has been loaded and at least one
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 * mark is set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 if (buf->b_marks_read)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 if (buf->b_last_cursor.lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 is_mark_set = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 is_mark_set = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 if (buf->b_namedm[i].lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 is_mark_set = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 if (is_mark_set && buf->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 && buf->b_ffname[0] != NUL && !removable(buf->b_ffname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 home_replace(NULL, buf->b_ffname, IObuff, IOSIZE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 fprintf(fp_out, "\n> ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 viminfo_writestring(fp_out, IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 write_one_mark(fp_out, '"', &buf->b_last_cursor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 write_one_mark(fp_out, '^', &buf->b_last_insert);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 write_one_mark(fp_out, '.', &buf->b_last_change);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 /* changelist positions are stored oldest first */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 for (i = 0; i < buf->b_changelistlen; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 write_one_mark(fp_out, '+', &buf->b_changelist[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 for (i = 0; i < NMARKS; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 write_one_mark(fp_out, 'a' + i, &buf->b_namedm[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 count++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 return count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 static void
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 write_one_mark(fp_out, c, pos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 FILE *fp_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 pos_T *pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 if (pos->lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 fprintf(fp_out, "\t%c\t%ld\t%d\n", c, (long)pos->lnum, (int)pos->col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 * Handle marks in the viminfo file:
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1660 * fp_out != NULL: copy marks for buffers not in buffer list
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1661 * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1662 * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 void
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1665 copy_viminfo_marks(virp, fp_out, count, eof, flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 vir_T *virp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 FILE *fp_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 int count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 int eof;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1670 int flags;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 char_u *line = virp->vir_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 int num_marked_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 int load_marks;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 int copy_marks_out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 char_u *name_buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 pos_T pos;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1682 #ifdef FEAT_EVAL
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1683 list_T *list = NULL;
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1684 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 if ((name_buf = alloc(LSIZE)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 *name_buf = NUL;
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1689
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1690 #ifdef FEAT_EVAL
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1691 if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1692 {
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1693 list = list_alloc();
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1694 if (list != NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1695 set_vim_var_list(VV_OLDFILES, list);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1696 }
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1697 #endif
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1698
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 num_marked_files = get_viminfo_parameter('\'');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 while (!eof && (count < num_marked_files || fp_out == NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 if (line[0] != '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 if (line[0] != '\n' && line[0] != '\r' && line[0] != '#')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 if (viminfo_error("E576: ", _("Missing '>'"), line))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 break; /* too many errors, return now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 eof = vim_fgets(line, LSIZE, virp->vir_fd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 continue; /* Skip this dud line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1711 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 * Handle long line and translate escaped characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 * Find file name, set str to start.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716 * Ignore leading and trailing white space.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1718 str = skipwhite(line + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 str = viminfo_readstring(virp, (int)(str - virp->vir_line), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1720 if (str == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 p = str + STRLEN(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 while (p != str && (*p == NUL || vim_isspace(*p)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724 p--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 if (*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 p++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1729 #ifdef FEAT_EVAL
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1730 if (list != NULL)
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1731 list_append_string(list, str, -1);
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1732 #endif
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1733
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 * If fp_out == NULL, load marks for current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 * If fp_out != NULL, copy marks for buffers not in buflist.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 load_marks = copy_marks_out = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739 if (fp_out == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 {
1733
5a7384b9ca66 updated for version 7.2-031
vimboss
parents: 1702
diff changeset
1741 if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 if (*name_buf == NUL) /* only need to do this once */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 if (fnamecmp(str, name_buf) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 load_marks = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 else /* fp_out != NULL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 /* This is slow if there are many buffers!! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 for (buf = firstbuf; buf != NULL; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 if (buf->b_ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 home_replace(NULL, buf->b_ffname, name_buf, LSIZE, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 if (fnamecmp(str, name_buf) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 * copy marks if the buffer has not been loaded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 if (buf == NULL || !buf->b_marks_read)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 copy_marks_out = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 fputs("\n> ", fp_out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 viminfo_writestring(fp_out, str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 count++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 vim_free(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 pos.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 while (!(eof = viminfo_readline(virp)) && line[0] == TAB)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 if (load_marks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 if (line[1] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 {
2712
43243f7ce351 updated for version 7.3.128
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1782 unsigned u;
43243f7ce351 updated for version 7.3.128
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1783
43243f7ce351 updated for version 7.3.128
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1784 sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
43243f7ce351 updated for version 7.3.128
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1785 pos.col = u;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 switch (line[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 case '"': curbuf->b_last_cursor = pos; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 case '^': curbuf->b_last_insert = pos; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 case '.': curbuf->b_last_change = pos; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 case '+':
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 /* changelist positions are stored oldest
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 * first */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 if (curbuf->b_changelistlen == JUMPLISTSIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 /* list is full, remove oldest entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 mch_memmove(curbuf->b_changelist,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 curbuf->b_changelist + 1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 sizeof(pos_T) * (JUMPLISTSIZE - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 ++curbuf->b_changelistlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 curbuf->b_changelist[
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 curbuf->b_changelistlen - 1] = pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 default: if ((i = line[1] - 'a') >= 0 && i < NMARKS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 curbuf->b_namedm[i] = pos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 else if (copy_marks_out)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 fputs((char *)line, fp_out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 if (load_marks)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 FOR_ALL_WINDOWS(wp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 if (wp->w_buffer == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 wp->w_changelistidx = curbuf->b_changelistlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 vim_free(name_buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 #endif /* FEAT_VIMINFO */