annotate src/buffer.c @ 11757:74abb6c84984 v8.0.0761

patch 8.0.0761: options not set properly for a terminal buffer commit https://github.com/vim/vim/commit/1f2903c43109b16594d141a730659317b15f388d Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jul 23 19:51:01 2017 +0200 patch 8.0.0761: options not set properly for a terminal buffer Problem: Options of a buffer for a terminal window are not set properly. Solution: Add "terminal" value for 'buftype'. Make 'buftype' and 'bufhidden' not depend on the quickfix feature. Also set the buffer name and show "running" or "finished" in the window title.
author Christian Brabandt <cb@256bit.org>
date Sun, 23 Jul 2017 20:00:05 +0200
parents ce434212d682
children f33b9375ba03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9943
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
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 * buffer.c: functions for dealing with the buffer structure
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 * The buffer list is a double linked list of all buffers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 * Each buffer can be in one of these states:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 * never loaded: BF_NEVERLOADED is set, only the file name is valid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 * not loaded: b_ml.ml_mfp == NULL, no memfile allocated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 * hidden: b_nwindows == 0, loaded but not displayed in a window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 * normal: loaded and displayed in a window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 * Instead of storing file names all over the place, each file name is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 * stored in the buffer list. It can be referenced by a number.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 * The current implementation remembers all file names ever used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 #if defined(FEAT_CMDL_COMPL) || defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
31 static char_u *buflist_match(regmatch_T *rmp, buf_T *buf, int ignore_case);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 # define HAVE_BUFLIST_MATCH
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
33 static char_u *fname_match(regmatch_T *rmp, char_u *name, int ignore_case);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
34 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
35 static void buflist_setfpos(buf_T *buf, win_T *win, linenr_T lnum, colnr_T col, int copy_options);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
36 static wininfo_T *find_wininfo(buf_T *buf, int skip_diff_buffer);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 #ifdef UNIX
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
38 static buf_T *buflist_findname_stat(char_u *ffname, stat_T *st);
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
39 static int otherfile_buf(buf_T *buf, char_u *ffname, stat_T *stp);
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
40 static int buf_same_ino(buf_T *buf, stat_T *stp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 #else
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
42 static int otherfile_buf(buf_T *buf, char_u *ffname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 #ifdef FEAT_TITLE
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
45 static int ti_change(char_u *str, char_u **last);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
46 #endif
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
47 static int append_arg_number(win_T *wp, char_u *buf, int buflen, int add_file);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
48 static void free_buffer(buf_T *);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
49 static void free_buffer_stuff(buf_T *buf, int free_options);
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
50 static void clear_wininfo(buf_T *buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 # define dev_T dev_t
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 # define dev_T unsigned
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 #if defined(FEAT_SIGNS)
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
59 static void insert_sign(buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
62 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
63 static char *msg_loclist = N_("[Location List]");
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
64 static char *msg_qflist = N_("[Quickfix List]");
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
65 #endif
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
66 #ifdef FEAT_AUTOCMD
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
67 static char *e_auabort = N_("E855: Autocommands caused command to abort");
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
68 #endif
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
69
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
70 /* Number of times free_buffer() was called. */
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
71 static int buf_free_count = 0;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
72
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
73 /* Read data from buffer for retrying. */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
74 static int
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
75 read_buffer(
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
76 int read_stdin, /* read file from stdin, otherwise fifo */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
77 exarg_T *eap, /* for forced 'ff' and 'fenc' or NULL */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
78 int flags) /* extra flags for readfile() */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
79 {
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
80 int retval = OK;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
81 linenr_T line_count;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
82
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
83 /*
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
84 * Read from the buffer which the text is already filled in and append at
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
85 * the end. This makes it possible to retry when 'fileformat' or
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
86 * 'fileencoding' was guessed wrong.
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
87 */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
88 line_count = curbuf->b_ml.ml_line_count;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
89 retval = readfile(
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
90 read_stdin ? NULL : curbuf->b_ffname,
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
91 read_stdin ? NULL : curbuf->b_fname,
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
92 (linenr_T)line_count, (linenr_T)0, (linenr_T)MAXLNUM, eap,
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
93 flags | READ_BUFFER);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
94 if (retval == OK)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
95 {
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
96 /* Delete the binary lines. */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
97 while (--line_count >= 0)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
98 ml_delete((linenr_T)1, FALSE);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
99 }
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
100 else
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
101 {
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
102 /* Delete the converted lines. */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
103 while (curbuf->b_ml.ml_line_count > line_count)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
104 ml_delete(line_count, FALSE);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
105 }
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
106 /* Put the cursor on the first line. */
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
107 curwin->w_cursor.lnum = 1;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
108 curwin->w_cursor.col = 0;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
109
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
110 if (read_stdin)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
111 {
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
112 /* Set or reset 'modified' before executing autocommands, so that
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
113 * it can be changed there. */
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11063
diff changeset
114 if (!readonlymode && !BUFEMPTY())
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
115 changed();
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
116 else if (retval == OK)
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
117 unchanged(curbuf, FALSE);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
118
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
119 #ifdef FEAT_AUTOCMD
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
120 if (retval == OK)
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
121 {
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
122 # ifdef FEAT_EVAL
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
123 apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
124 curbuf, &retval);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
125 # else
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
126 apply_autocmds(EVENT_STDINREADPOST, NULL, NULL, FALSE, curbuf);
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
127 # endif
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
128 }
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
129 #endif
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
130 }
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
131 return retval;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
132 }
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
133
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 /*
2214
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
135 * Open current buffer, that is: open the memfile and read the file into
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
136 * memory.
f8222d1f9a73 Included patch for persistent undo. Lots of changes and added test.
Bram Moolenaar <bram@vim.org>
parents: 2210
diff changeset
137 * Return FAIL for failure, OK otherwise.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
140 open_buffer(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
141 int read_stdin, /* read file from stdin */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
142 exarg_T *eap, /* for forced 'ff' and 'fenc' or NULL */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
143 int flags) /* extra flags for readfile() */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 int retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 #ifdef FEAT_AUTOCMD
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
147 bufref_T old_curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 #endif
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
149 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
150 long old_tw = curbuf->b_p_tw;
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
151 #endif
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
152 int read_fifo = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 * The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 * When re-entering the same buffer, it should not change, because the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 * user may have reset the flag by hand.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 if (readonlymode && curbuf->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 && (curbuf->b_flags & BF_NEVERLOADED))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 curbuf->b_p_ro = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 602
diff changeset
163 if (ml_open(curbuf) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 * There MUST be a memfile, otherwise we can't do anything
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 * If we can't create one for the current buffer, take another buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 */
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
169 close_buffer(NULL, curbuf, 0, FALSE);
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
170 FOR_ALL_BUFFERS(curbuf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 if (curbuf->b_ml.ml_mfp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 * if there is no memfile at all, exit
1698
f4f8014d516e updated for version 7.2c-000
vimboss
parents: 1618
diff changeset
175 * This is OK, since there are no changes to lose.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 if (curbuf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 EMSG(_("E82: Cannot allocate any buffer, exiting..."));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 getout(2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 EMSG(_("E83: Cannot allocate buffer, using other one..."));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 enter_buffer(curbuf);
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
184 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
185 if (old_tw != curbuf->b_p_tw)
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
186 check_colorcolumn(curwin);
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
187 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 /* The autocommands in readfile() may change the buffer, but only AFTER
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 * reading the file. */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
194 set_bufref(&old_curbuf, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 modified_was_set = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 /* mark cursor position as being invalid */
2091
95b659982b7c updated for version 7.2.375
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
199 curwin->w_valid = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 if (curbuf->b_ffname != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 && netbeansReadFile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 {
8560
f3c636c673f7 commit https://github.com/vim/vim/commit/426dd0219512af5f4abeb0901b533159253ffba3
Christian Brabandt <cb@256bit.org>
parents: 8441
diff changeset
207 int old_msg_silent = msg_silent;
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
208 #ifdef UNIX
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
209 int save_bin = curbuf->b_p_bin;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
210 int perm;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
211 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 int oldFire = netbeansFireChanges;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 netbeansFireChanges = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 #endif
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
217 #ifdef UNIX
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
218 perm = mch_getperm(curbuf->b_ffname);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
219 if (perm >= 0 && (0
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
220 # ifdef S_ISFIFO
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
221 || S_ISFIFO(perm)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
222 # endif
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
223 # ifdef S_ISSOCK
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
224 || S_ISSOCK(perm)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
225 # endif
9911
74e345d2878c commit https://github.com/vim/vim/commit/f04507d132fbcb63999167ec006fc6e700b5af4f
Christian Brabandt <cb@256bit.org>
parents: 9875
diff changeset
226 # ifdef OPEN_CHR_FILES
74e345d2878c commit https://github.com/vim/vim/commit/f04507d132fbcb63999167ec006fc6e700b5af4f
Christian Brabandt <cb@256bit.org>
parents: 9875
diff changeset
227 || (S_ISCHR(perm) && is_dev_fd_file(curbuf->b_ffname))
74e345d2878c commit https://github.com/vim/vim/commit/f04507d132fbcb63999167ec006fc6e700b5af4f
Christian Brabandt <cb@256bit.org>
parents: 9875
diff changeset
228 # endif
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
229 ))
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
230 read_fifo = TRUE;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
231 if (read_fifo)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
232 curbuf->b_p_bin = TRUE;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
233 #endif
8560
f3c636c673f7 commit https://github.com/vim/vim/commit/426dd0219512af5f4abeb0901b533159253ffba3
Christian Brabandt <cb@256bit.org>
parents: 8441
diff changeset
234 if (shortmess(SHM_FILEINFO))
f3c636c673f7 commit https://github.com/vim/vim/commit/426dd0219512af5f4abeb0901b533159253ffba3
Christian Brabandt <cb@256bit.org>
parents: 8441
diff changeset
235 msg_silent = 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 retval = readfile(curbuf->b_ffname, curbuf->b_fname,
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
237 (linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM, eap,
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
238 flags | READ_NEW | (read_fifo ? READ_FIFO : 0));
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
239 #ifdef UNIX
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
240 if (read_fifo)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
241 {
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
242 curbuf->b_p_bin = save_bin;
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
243 if (retval == OK)
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
244 retval = read_buffer(FALSE, eap, flags);
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
245 }
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
246 #endif
8560
f3c636c673f7 commit https://github.com/vim/vim/commit/426dd0219512af5f4abeb0901b533159253ffba3
Christian Brabandt <cb@256bit.org>
parents: 8441
diff changeset
247 msg_silent = old_msg_silent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 netbeansFireChanges = oldFire;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 /* Help buffer is filtered. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 if (curbuf->b_help)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 fix_help_buffer();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 else if (read_stdin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 {
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
257 int save_bin = curbuf->b_p_bin;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 * First read the text in binary mode into the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 * Then read from that same buffer and append at the end. This makes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 * it possible to retry when 'fileformat' or 'fileencoding' was
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 * guessed wrong.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 curbuf->b_p_bin = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266 retval = readfile(NULL, NULL, (linenr_T)0,
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
267 (linenr_T)0, (linenr_T)MAXLNUM, NULL,
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
268 flags | (READ_NEW + READ_STDIN));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 curbuf->b_p_bin = save_bin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 if (retval == OK)
9828
e84e45786691 commit https://github.com/vim/vim/commit/f71d7b9ee5ceba75f70c30845332ddd728fd16c6
Christian Brabandt <cb@256bit.org>
parents: 9649
diff changeset
271 retval = read_buffer(TRUE, eap, flags);
7
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 /* if first time loading this buffer, init b_chartab[] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 if (curbuf->b_flags & BF_NEVERLOADED)
5438
878ed73c7070 updated for version 7.4.069
Bram Moolenaar <bram@vim.org>
parents: 5407
diff changeset
276 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 (void)buf_init_chartab(curbuf, FALSE);
5440
e6f3f66028d4 updated for version 7.4.070
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
278 #ifdef FEAT_CINDENT
5438
878ed73c7070 updated for version 7.4.069
Bram Moolenaar <bram@vim.org>
parents: 5407
diff changeset
279 parse_cino(curbuf);
5440
e6f3f66028d4 updated for version 7.4.070
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
280 #endif
5438
878ed73c7070 updated for version 7.4.069
Bram Moolenaar <bram@vim.org>
parents: 5407
diff changeset
281 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 * Set/reset the Changed flag first, autocmds may change the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 * Apply the automatic commands, before processing the modelines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 * So the modelines have priority over auto commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 /* When reading stdin, the buffer contents always needs writing, so set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 * the changed flag. Unless in readonly mode: "ls | gview -".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 * When interrupted and 'cpoptions' contains 'i' set changed flag. */
1291
f12d38ee49de updated for version 7.1-006
vimboss
parents: 1187
diff changeset
291 if ((got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 || modified_was_set /* ":set modified" used in autocmd */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 || (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 #endif
1291
f12d38ee49de updated for version 7.1-006
vimboss
parents: 1187
diff changeset
298 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 changed();
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
300 else if (retval == OK && !read_stdin && !read_fifo)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 unchanged(curbuf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 save_file_ff(curbuf); /* keep this fileformat */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 /* require "!" to overwrite the file, because it wasn't read completely */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 if (aborting())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 curbuf->b_flags |= BF_READERR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
312 #ifdef FEAT_FOLDING
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
313 /* Need to update automatic folding. Do this before the autocommands,
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
314 * they may use the fold info. */
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
315 foldUpdateAll(curwin);
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
316 #endif
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
317
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 /* need to set w_topline, unless some autocommand already did that. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 if (!(curwin->w_valid & VALID_TOPLINE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 curwin->w_topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 curwin->w_topfill = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 apply_autocmds_retval(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf, &retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333
10575
01a5f64a7a20 patch 8.0.0177: BufEnter autocommand not fired for a directory
Christian Brabandt <cb@256bit.org>
parents: 10432
diff changeset
334 if (retval == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 * The autocommands may have changed the current buffer. Apply the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 * modelines to the correct buffer, if it still exists and is loaded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
341 if (bufref_valid(&old_curbuf) && old_curbuf.br_buf->b_ml.ml_mfp != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 aco_save_T aco;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 /* Go to the buffer that was opened. */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
346 aucmd_prepbuf(&aco, old_curbuf.br_buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 #endif
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
348 do_modelines(0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 curbuf->b_flags &= ~(BF_CHECK_RO | BF_NEVERLOADED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 apply_autocmds_retval(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 &retval);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 # else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 /* restore curwin/curbuf and a few other things */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360 aucmd_restbuf(&aco);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 /*
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
369 * Store "buf" in "bufref" and set the free count.
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
370 */
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
371 void
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
372 set_bufref(bufref_T *bufref, buf_T *buf)
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
373 {
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
374 bufref->br_buf = buf;
11531
e349dc7889f5 patch 8.0.0648: possible use of NULL pointer
Christian Brabandt <cb@256bit.org>
parents: 11476
diff changeset
375 bufref->br_fnum = buf == NULL ? 0 : buf->b_fnum;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
376 bufref->br_buf_free_count = buf_free_count;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
377 }
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
378
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
379 /*
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
380 * Return TRUE if "bufref->br_buf" points to the same buffer as when
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
381 * set_bufref() was called and it is a valid buffer.
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
382 * Only goes through the buffer list if buf_free_count changed.
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
383 * Also checks if b_fnum is still the same, a :bwipe followed by :new might get
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
384 * the same allocated memory, but it's a different buffer.
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
385 */
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
386 int
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
387 bufref_valid(bufref_T *bufref)
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
388 {
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
389 return bufref->br_buf_free_count == buf_free_count
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
390 ? TRUE : buf_valid(bufref->br_buf)
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
391 && bufref->br_fnum == bufref->br_buf->b_fnum;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
392 }
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
393
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
394 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 * Return TRUE if "buf" points to a valid buffer (in the buffer list).
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
396 * This can be slow if there are many buffers, prefer using bufref_valid().
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
399 buf_valid(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 buf_T *bp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
403 /* Assume that we more often have a recent buffer, start with the last
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
404 * one. */
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
405 for (bp = lastbuf; bp != NULL; bp = bp->b_prev)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 if (bp == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 /*
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
412 * A hash table used to quickly lookup a buffer by its number.
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
413 */
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
414 static hashtab_T buf_hashtab;
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
415
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
416 static void
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
417 buf_hashtab_add(buf_T *buf)
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
418 {
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
419 sprintf((char *)buf->b_key, "%x", buf->b_fnum);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
420 if (hash_add(&buf_hashtab, buf->b_key) == FAIL)
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
421 EMSG(_("E931: Buffer cannot be registered"));
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
422 }
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
423
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
424 static void
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
425 buf_hashtab_remove(buf_T *buf)
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
426 {
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
427 hashitem_T *hi = hash_find(&buf_hashtab, buf->b_key);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
428
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
429 if (!HASHITEM_EMPTY(hi))
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
430 hash_remove(&buf_hashtab, hi);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
431 }
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
432
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
433 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 * Close the link to a buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 * "action" is used when there is no longer a window for the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 * It can be:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 * 0 buffer becomes hidden
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 * DOBUF_UNLOAD buffer is unloaded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
439 * DOBUF_DELETE buffer is unloaded and removed from buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 * DOBUF_WIPE buffer is unloaded and really deleted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 * When doing all but the first one on the current buffer, the caller should
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 * get a new buffer very soon!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 * The 'bufhidden' option can force freeing and deleting.
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
445 *
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
446 * When "abort_if_last" is TRUE then do not close the buffer if autocommands
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
447 * cause there to be only one window with this buffer. e.g. when ":quit" is
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
448 * supposed to close the window but autocommands close all other windows.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
451 close_buffer(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
452 win_T *win, /* if not NULL, set b_last_cursor */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
453 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
454 int action,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
455 int abort_if_last UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 int is_curbuf;
2047
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 1883
diff changeset
459 int nwindows;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
460 bufref_T bufref;
10114
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
461 # ifdef FEAT_WINDOWS
10320
6ab770e97152 commit https://github.com/vim/vim/commit/3a117e19e02bf29cfc5e398470dd7851ae3d6803
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
462 int is_curwin = (curwin != NULL && curwin->w_buffer == buf);
10114
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
463 win_T *the_curwin = curwin;
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
464 tabpage_T *the_curtab = curtab;
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
465 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 int unload_buf = (action != 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 int del_buf = (action == DOBUF_DEL || action == DOBUF_WIPE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 int wipe_buf = (action == DOBUF_WIPE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 * Force unloading or deleting when 'bufhidden' says so.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 * The caller must take care of NOT deleting/freeing when 'bufhidden' is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 * "hide" (otherwise we could never free or delete a buffer).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 if (buf->b_p_bh[0] == 'd') /* 'bufhidden' == "delete" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 del_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 unload_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 else if (buf->b_p_bh[0] == 'w') /* 'bufhidden' == "wipe" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 del_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 unload_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 wipe_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 else if (buf->b_p_bh[0] == 'u') /* 'bufhidden' == "unload" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 unload_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489
10108
7cb49e98d582 commit https://github.com/vim/vim/commit/30180b8dad5c1478e7920e56a71352cb318fadb0
Christian Brabandt <cb@256bit.org>
parents: 10106
diff changeset
490 #ifdef FEAT_AUTOCMD
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
491 /* Disallow deleting the buffer when it is locked (already being closed or
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
492 * halfway a command that relies on it). Unloading is allowed. */
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
493 if (buf->b_locked > 0 && (del_buf || wipe_buf))
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
494 {
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
495 EMSG(_("E937: Attempt to delete a buffer that is in use"));
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
496 return;
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
497 }
10108
7cb49e98d582 commit https://github.com/vim/vim/commit/30180b8dad5c1478e7920e56a71352cb318fadb0
Christian Brabandt <cb@256bit.org>
parents: 10106
diff changeset
498 #endif
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
499
5958
f7bc601823e5 updated for version 7.4.320
Bram Moolenaar <bram@vim.org>
parents: 5869
diff changeset
500 if (win != NULL
f7bc601823e5 updated for version 7.4.320
Bram Moolenaar <bram@vim.org>
parents: 5869
diff changeset
501 #ifdef FEAT_WINDOWS
9875
42adbf172ecd commit https://github.com/vim/vim/commit/e59215c7dcae17b03daf39517560cfaa03314f5a
Christian Brabandt <cb@256bit.org>
parents: 9828
diff changeset
502 && win_valid_any_tab(win) /* in case autocommands closed the window */
5958
f7bc601823e5 updated for version 7.4.320
Bram Moolenaar <bram@vim.org>
parents: 5869
diff changeset
503 #endif
f7bc601823e5 updated for version 7.4.320
Bram Moolenaar <bram@vim.org>
parents: 5869
diff changeset
504 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 /* Set b_last_cursor when closing the last window for the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 * Remember the last cursor position and window options of the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 * This used to be only for the current window, but then options like
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 * 'foldmethod' may be lost with a ":only" command. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 if (buf->b_nwindows == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 set_last_cursor(win);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 buflist_setfpos(buf, win,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 win->w_cursor.lnum == 1 ? 0 : win->w_cursor.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 win->w_cursor.col, TRUE);
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 #ifdef FEAT_AUTOCMD
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
518 set_bufref(&bufref, buf);
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
519
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 /* When the buffer is no longer in a window, trigger BufWinLeave */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
521 if (buf->b_nwindows == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
522 {
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
523 ++buf->b_locked;
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
524 if (apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
525 FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
526 && !bufref_valid(&bufref))
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
527 {
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
528 /* Autocommands deleted the buffer. */
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
529 aucmd_abort:
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
530 EMSG(_(e_auabort));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 return;
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
532 }
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
533 --buf->b_locked;
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
534 if (abort_if_last && one_window())
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
535 /* Autocommands made this the only window. */
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
536 goto aucmd_abort;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 /* When the buffer becomes hidden, but is not unloaded, trigger
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 * BufHidden */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 if (!unload_buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 {
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
542 ++buf->b_locked;
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
543 if (apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
544 FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
545 && !bufref_valid(&bufref))
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
546 /* Autocommands deleted the buffer. */
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
547 goto aucmd_abort;
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
548 --buf->b_locked;
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
549 if (abort_if_last && one_window())
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
550 /* Autocommands made this the only window. */
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
551 goto aucmd_abort;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 if (aborting()) /* autocmds may abort script processing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 }
10114
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
558
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
559 # ifdef FEAT_WINDOWS
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
560 /* If the buffer was in curwin and the window has changed, go back to that
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
561 * window, if it still exists. This avoids that ":edit x" triggering a
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
562 * "tabnext" BufUnload autocmd leaves a window behind without a buffer. */
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
563 if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin))
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
564 {
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
565 block_autocmds();
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
566 goto_tabpage_win(the_curtab, the_curwin);
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
567 unblock_autocmds();
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
568 }
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
569 # endif
aa2219afd1c2 commit https://github.com/vim/vim/commit/f9e687e0681a250e1549ab27b6c7ef2c500395e3
Christian Brabandt <cb@256bit.org>
parents: 10108
diff changeset
570
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 nwindows = buf->b_nwindows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
574 /* decrease the link count from windows (unless not in any window) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 if (buf->b_nwindows > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 --buf->b_nwindows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 /* Return when a window is displaying the buffer or when it's not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 * unloaded. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 if (buf->b_nwindows > 0 || !unload_buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 /* Always remove the buffer when there is no file name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 if (buf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
585 del_buf = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586
10154
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
587 /* When closing the current buffer stop Visual mode before freeing
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
588 * anything. */
10184
4669440016f2 commit https://github.com/vim/vim/commit/4930a76a0357f76a829eafe4985d04cf3ce0e9e0
Christian Brabandt <cb@256bit.org>
parents: 10156
diff changeset
589 if (buf == curbuf && VIsual_active
10156
f1ad88f3834c commit https://github.com/vim/vim/commit/9a27c7fde6d453d9892b6f6baa756bce4d6d419d
Christian Brabandt <cb@256bit.org>
parents: 10154
diff changeset
590 #if defined(EXITFREE)
f1ad88f3834c commit https://github.com/vim/vim/commit/9a27c7fde6d453d9892b6f6baa756bce4d6d419d
Christian Brabandt <cb@256bit.org>
parents: 10154
diff changeset
591 && !entered_free_all_mem
f1ad88f3834c commit https://github.com/vim/vim/commit/9a27c7fde6d453d9892b6f6baa756bce4d6d419d
Christian Brabandt <cb@256bit.org>
parents: 10154
diff changeset
592 #endif
f1ad88f3834c commit https://github.com/vim/vim/commit/9a27c7fde6d453d9892b6f6baa756bce4d6d419d
Christian Brabandt <cb@256bit.org>
parents: 10154
diff changeset
593 )
10154
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
594 end_visual_mode();
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
595
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 * Free all things allocated for this buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 * Also calls the "BufDelete" autocommands when del_buf is TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 /* Remember if we are closing the current buffer. Restore the number of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 * windows, so that autocommands in buf_freeall() don't get confused. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 is_curbuf = (buf == curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
604 buf->b_nwindows = nwindows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
605 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
606
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
607 buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 /* Autocommands may have deleted the buffer. */
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
611 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 # ifdef FEAT_EVAL
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
614 if (aborting()) /* autocmds may abort script processing */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 * It's possible that autocommands change curbuf to the one being deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 * This might cause the previous curbuf to be deleted unexpectedly. But
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 * in some cases it's OK to delete the curbuf, because a new one is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 * obtained anyway. Therefore only return if curbuf changed to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 * deleted buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 if (buf == curbuf && !is_curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 return;
9450
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
627
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
628 if (
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
629 #ifdef FEAT_WINDOWS
9875
42adbf172ecd commit https://github.com/vim/vim/commit/e59215c7dcae17b03daf39517560cfaa03314f5a
Christian Brabandt <cb@256bit.org>
parents: 9828
diff changeset
630 win_valid_any_tab(win) &&
9450
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
631 #else
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
632 win != NULL &&
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
633 #endif
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
634 win->w_buffer == buf)
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
635 win->w_buffer = NULL; /* make sure we don't use the buffer now */
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
636
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
637 /* Autocommands may have opened or closed windows for this buffer.
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
638 * Decrement the count for the close we do here. */
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
639 if (buf->b_nwindows > 0)
073aebdba121 commit https://github.com/vim/vim/commit/30445cb6e94698d212ba866ef3e4022ac625540a
Christian Brabandt <cb@256bit.org>
parents: 9414
diff changeset
640 --buf->b_nwindows;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
643 /* Change directories when the 'acd' option is set. */
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
644 DO_AUTOCHDIR
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 * Remove the buffer from the list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 if (wipe_buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651 #ifdef FEAT_SUN_WORKSHOP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 if (usingSunWorkShop)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 workshop_file_closed_lineno((char *)buf->b_ffname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 (int)buf->b_last_cursor.lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 vim_free(buf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 vim_free(buf->b_sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 if (buf->b_prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 firstbuf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 buf->b_prev->b_next = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 if (buf->b_next == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 lastbuf = buf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 buf->b_next->b_prev = buf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 free_buffer(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 if (del_buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672 /* Free all internal variables and reset option values, to make
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 * ":bdel" compatible with Vim 5.7. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 free_buffer_stuff(buf, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 /* Make it look like a new buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 buf->b_flags = BF_CHECK_RO | BF_NEVERLOADED;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 /* Init the options when loaded again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 buf->b_p_initialized = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 buf_clear_file(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 if (del_buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 buf->b_p_bl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 * Make buffer not contain a file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
690 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
692 buf_clear_file(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 buf->b_ml.ml_line_count = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 unchanged(buf, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 buf->b_shortname = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 buf->b_p_eol = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 buf->b_start_eol = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 buf->b_p_bomb = FALSE;
1352
c544a3507e83 updated for version 7.1-066
vimboss
parents: 1341
diff changeset
701 buf->b_start_bomb = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 buf->b_ml.ml_mfp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 buf->b_ml.ml_flags = ML_EMPTY; /* empty buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706 netbeans_deleted_all_lines(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 * buf_freeall() - free all things allocated for a buffer that are related to
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
712 * the file. Careful: get here with "curwin" NULL when exiting.
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
713 * flags:
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
714 * BFA_DEL buffer is going to be deleted
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
715 * BFA_WIPE buffer is going to be wiped out
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
716 * BFA_KEEP_UNDO do not free undo information
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
719 buf_freeall(buf_T *buf, int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
720 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
722 int is_curbuf = (buf == curbuf);
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
723 bufref_T bufref;
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
724 # ifdef FEAT_WINDOWS
10118
5d77565e6222 commit https://github.com/vim/vim/commit/030cddc7ec0c3d2fe3969140cd1b92b2f18633c0
Christian Brabandt <cb@256bit.org>
parents: 10114
diff changeset
725 int is_curwin = (curwin != NULL && curwin->w_buffer == buf);
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
726 win_T *the_curwin = curwin;
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
727 tabpage_T *the_curtab = curtab;
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
728 # endif
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
729
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
730 /* Make sure the buffer isn't closed by autocommands. */
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
731 ++buf->b_locked;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
732 set_bufref(&bufref, buf);
9106
97a9538c37ff commit https://github.com/vim/vim/commit/c67e89213476b5f4756d92208b57ce9ef4a4cf24
Christian Brabandt <cb@256bit.org>
parents: 9087
diff changeset
733 if (buf->b_ml.ml_mfp != NULL)
97a9538c37ff commit https://github.com/vim/vim/commit/c67e89213476b5f4756d92208b57ce9ef4a4cf24
Christian Brabandt <cb@256bit.org>
parents: 9087
diff changeset
734 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
735 if (apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname,
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
736 FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
737 && !bufref_valid(&bufref))
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
738 /* autocommands deleted the buffer */
9106
97a9538c37ff commit https://github.com/vim/vim/commit/c67e89213476b5f4756d92208b57ce9ef4a4cf24
Christian Brabandt <cb@256bit.org>
parents: 9087
diff changeset
739 return;
97a9538c37ff commit https://github.com/vim/vim/commit/c67e89213476b5f4756d92208b57ce9ef4a4cf24
Christian Brabandt <cb@256bit.org>
parents: 9087
diff changeset
740 }
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
741 if ((flags & BFA_DEL) && buf->b_p_bl)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
742 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
743 if (apply_autocmds(EVENT_BUFDELETE, buf->b_fname, buf->b_fname,
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
744 FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
745 && !bufref_valid(&bufref))
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
746 /* autocommands deleted the buffer */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 }
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
749 if (flags & BFA_WIPE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
751 if (apply_autocmds(EVENT_BUFWIPEOUT, buf->b_fname, buf->b_fname,
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
752 FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
753 && !bufref_valid(&bufref))
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
754 /* autocommands deleted the buffer */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 }
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
757 --buf->b_locked;
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
758
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
759 # ifdef FEAT_WINDOWS
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
760 /* If the buffer was in curwin and the window has changed, go back to that
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
761 * window, if it still exists. This avoids that ":edit x" triggering a
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
762 * "tabnext" BufUnload autocmd leaves a window behind without a buffer. */
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
763 if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin))
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
764 {
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
765 block_autocmds();
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
766 goto_tabpage_win(the_curtab, the_curwin);
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
767 unblock_autocmds();
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
768 }
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
769 # endif
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
770
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 # ifdef FEAT_EVAL
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
772 if (aborting()) /* autocmds may abort script processing */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
776 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 * It's possible that autocommands change curbuf to the one being deleted.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 * This might cause curbuf to be deleted unexpectedly. But in some cases
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 * it's OK to delete the curbuf, because a new one is obtained anyway.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 * Therefore only return if curbuf changed to the deleted buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 if (buf == curbuf && !is_curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 diff_buf_delete(buf); /* Can't use 'diff' for unloaded buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 #endif
3068
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
788 #ifdef FEAT_SYN_HL
3182
e42252611e74 updated for version 7.3.361
Bram Moolenaar <bram@vim.org>
parents: 3080
diff changeset
789 /* Remove any ownsyntax, unless exiting. */
10118
5d77565e6222 commit https://github.com/vim/vim/commit/030cddc7ec0c3d2fe3969140cd1b92b2f18633c0
Christian Brabandt <cb@256bit.org>
parents: 10114
diff changeset
790 if (curwin != NULL && curwin->w_buffer == buf)
3182
e42252611e74 updated for version 7.3.361
Bram Moolenaar <bram@vim.org>
parents: 3080
diff changeset
791 reset_synblock(curwin);
3068
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
792 #endif
1187
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
793
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
794 #ifdef FEAT_FOLDING
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
795 /* No folds in an empty buffer. */
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
796 # ifdef FEAT_WINDOWS
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
797 {
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
798 win_T *win;
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
799 tabpage_T *tp;
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
800
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
801 FOR_ALL_TAB_WINDOWS(tp, win)
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
802 if (win->w_buffer == buf)
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
803 clearFolding(win);
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
804 }
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
805 # else
10118
5d77565e6222 commit https://github.com/vim/vim/commit/030cddc7ec0c3d2fe3969140cd1b92b2f18633c0
Christian Brabandt <cb@256bit.org>
parents: 10114
diff changeset
806 if (curwin != NULL && curwin->w_buffer == buf)
1187
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
807 clearFolding(curwin);
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
808 # endif
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
809 #endif
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
810
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 #ifdef FEAT_TCL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 tcl_buffer_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 ml_close(buf, TRUE); /* close and delete the memline/memfile */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 buf->b_ml.ml_line_count = 0; /* no lines in buffer */
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
816 if ((flags & BFA_KEEP_UNDO) == 0)
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
817 {
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
818 u_blockfree(buf); /* free the memory allocated for undo */
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
819 u_clearall(buf); /* reset all undo information */
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
820 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 #ifdef FEAT_SYN_HL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
822 syntax_clear(&buf->b_s); /* reset syntax info */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 #endif
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
824 buf->b_flags &= ~BF_READERR; /* a read error is no longer relevant */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 * Free a buffer structure and the things it contains related to the buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 * itself (not the file, that must have been done already).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 static void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
832 free_buffer(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
834 ++buf_free_count;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 free_buffer_stuff(buf, TRUE);
4287
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
836 #ifdef FEAT_EVAL
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
837 unref_var_dict(buf->b_vars);
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
838 #endif
2320
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2280
diff changeset
839 #ifdef FEAT_LUA
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2280
diff changeset
840 lua_buffer_free(buf);
966a5609669e Added Lua interfae. (Luis Carvalho)
Bram Moolenaar <bram@vim.org>
parents: 2280
diff changeset
841 #endif
14
946da5994c01 updated for version 7.0006
vimboss
parents: 12
diff changeset
842 #ifdef FEAT_MZSCHEME
946da5994c01 updated for version 7.0006
vimboss
parents: 12
diff changeset
843 mzscheme_buffer_free(buf);
946da5994c01 updated for version 7.0006
vimboss
parents: 12
diff changeset
844 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 #ifdef FEAT_PERL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 perl_buf_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 #ifdef FEAT_PYTHON
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 python_buffer_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 #endif
2329
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
851 #ifdef FEAT_PYTHON3
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
852 python3_buffer_free(buf);
ad2889f48843 Added support for Python 3. (Roland Puntaier)
Bram Moolenaar <bram@vim.org>
parents: 2320
diff changeset
853 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
854 #ifdef FEAT_RUBY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855 ruby_buffer_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856 #endif
9087
d4606ae170aa commit https://github.com/vim/vim/commit/e0f76d00979c972329f6c371463a20da61ccad65
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
857 #ifdef FEAT_JOB_CHANNEL
d4606ae170aa commit https://github.com/vim/vim/commit/e0f76d00979c972329f6c371463a20da61ccad65
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
858 channel_buffer_free(buf);
d4606ae170aa commit https://github.com/vim/vim/commit/e0f76d00979c972329f6c371463a20da61ccad65
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
859 #endif
11690
ce434212d682 patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents: 11531
diff changeset
860 #ifdef FEAT_TERMINAL
ce434212d682 patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents: 11531
diff changeset
861 free_terminal(buf->b_term);
ce434212d682 patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents: 11531
diff changeset
862 #endif
9515
bb538c090668 commit https://github.com/vim/vim/commit/9280e3f95d065733f04fa22869e5ef071d531931
Christian Brabandt <cb@256bit.org>
parents: 9511
diff changeset
863
bb538c090668 commit https://github.com/vim/vim/commit/9280e3f95d065733f04fa22869e5ef071d531931
Christian Brabandt <cb@256bit.org>
parents: 9511
diff changeset
864 buf_hashtab_remove(buf);
bb538c090668 commit https://github.com/vim/vim/commit/9280e3f95d065733f04fa22869e5ef071d531931
Christian Brabandt <cb@256bit.org>
parents: 9511
diff changeset
865
40
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
866 #ifdef FEAT_AUTOCMD
f1d2a58883b9 updated for version 7.0024
vimboss
parents: 39
diff changeset
867 aubuflocal_remove(buf);
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
868
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
869 if (autocmd_busy)
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
870 {
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
871 /* Do not free the buffer structure while autocommands are executing,
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
872 * it's still needed. Free it when autocmd_busy is reset. */
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
873 buf->b_next = au_pending_free_buf;
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
874 au_pending_free_buf = buf;
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
875 }
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
876 else
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
877 #endif
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
878 vim_free(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 /*
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
882 * Initializes b:changedtick.
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
883 */
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
884 static void
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
885 init_changedtick(buf_T *buf)
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
886 {
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
887 dictitem_T *di = (dictitem_T *)&buf->b_ct_di;
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
888
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
889 di->di_flags = DI_FLAGS_FIX | DI_FLAGS_RO;
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
890 di->di_tv.v_type = VAR_NUMBER;
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
891 di->di_tv.v_lock = VAR_FIXED;
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
892 di->di_tv.vval.v_number = 0;
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
893
10954
8ff62b4cffae patch 8.0.0366: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10952
diff changeset
894 #ifdef FEAT_EVAL
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
895 STRCPY(buf->b_ct_di.di_key, "changedtick");
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
896 (void)dict_add(buf->b_vars, di);
10954
8ff62b4cffae patch 8.0.0366: build fails with tiny features
Christian Brabandt <cb@256bit.org>
parents: 10952
diff changeset
897 #endif
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
898 }
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
899
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
900 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 * Free stuff in the buffer for ":bdel" and when wiping out the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 static void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
904 free_buffer_stuff(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
905 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
906 int free_options) /* free options as well */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 if (free_options)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 clear_wininfo(buf); /* including window-local options */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 free_buf_options(buf, TRUE);
2620
5fbc411a611d updated for version 7.3.042
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
912 #ifdef FEAT_SPELL
5fbc411a611d updated for version 7.3.042
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
913 ga_clear(&buf->b_s.b_langp);
5fbc411a611d updated for version 7.3.042
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
914 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 #ifdef FEAT_EVAL
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
917 {
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
918 varnumber_T tick = CHANGEDTICK(buf);
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
919
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
920 vars_clear(&buf->b_vars->dv_hashtab); /* free all buffer variables */
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
921 hash_init(&buf->b_vars->dv_hashtab);
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
922 init_changedtick(buf);
10952
835604f3c37a patch 8.0.0365: might free a dict item that wasn't allocated
Christian Brabandt <cb@256bit.org>
parents: 10912
diff changeset
923 CHANGEDTICK(buf) = tick;
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
924 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 #ifdef FEAT_USR_CMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 uc_clear(&buf->b_ucmds); /* clear local user commands */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 #ifdef FEAT_SIGNS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 buf_delete_signs(buf); /* delete any signs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 #endif
1781
021f9d0f60a1 updated for version 7.2-079
vimboss
parents: 1764
diff changeset
932 #ifdef FEAT_NETBEANS_INTG
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2091
diff changeset
933 netbeans_file_killed(buf);
1781
021f9d0f60a1 updated for version 7.2-079
vimboss
parents: 1764
diff changeset
934 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 #ifdef FEAT_LOCALMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE); /* clear local mappings */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE); /* clear local abbrevs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 vim_free(buf->b_start_fenc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 buf->b_start_fenc = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 * Free the b_wininfo list for buffer "buf".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 static void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
949 clear_wininfo(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 wininfo_T *wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 while (buf->b_wininfo != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 wip = buf->b_wininfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 buf->b_wininfo = wip->wi_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 if (wip->wi_optset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 clear_winopt(&wip->wi_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 deleteFoldRecurse(&wip->wi_folds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 vim_free(wip);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 #if defined(FEAT_LISTCMDS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 * Go to another buffer. Handles the result of the ATTENTION dialog.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
973 goto_buffer(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
974 exarg_T *eap,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
975 int start,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
976 int dir,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
977 int count)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 {
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
979 # if defined(FEAT_WINDOWS) && defined(HAS_SWAP_EXISTS_ACTION)
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
980 bufref_T old_curbuf;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
981
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
982 set_bufref(&old_curbuf, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 swap_exists_action = SEA_DIALOG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 (void)do_buffer(*eap->cmd == 's' ? DOBUF_SPLIT : DOBUF_GOTO,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 start, dir, count, eap->forceit);
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
988 # if defined(FEAT_WINDOWS) && defined(HAS_SWAP_EXISTS_ACTION)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 if (swap_exists_action == SEA_QUIT && *eap->cmd == 's')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
991 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
992 cleanup_T cs;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
993
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
994 /* Reset the error/interrupt/exception state here so that
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
995 * aborting() returns FALSE when closing a window. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
996 enter_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
997 # endif
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
998
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
999 /* Quitting means closing the split window, nothing else. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 win_close(curwin, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 swap_exists_action = SEA_NONE;
602
111509d2767a updated for version 7.0171
vimboss
parents: 576
diff changeset
1002 swap_exists_did_quit = TRUE;
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1003
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1004 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1005 /* Restore the error/interrupt/exception state if not discarded by a
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1006 * new aborting error, interrupt, or uncaught exception. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1007 leave_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1008 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 else
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1011 handle_swap_exists(&old_curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1015
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
1016 #if defined(HAS_SWAP_EXISTS_ACTION) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 * Handle the situation of swap_exists_action being set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1019 * It is allowed for "old_curbuf" to be NULL or invalid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 void
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1022 handle_swap_exists(bufref_T *old_curbuf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1024 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1025 cleanup_T cs;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1026 # endif
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1027 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1028 long old_tw = curbuf->b_p_tw;
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1029 #endif
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1030 buf_T *buf;
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
1031
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 if (swap_exists_action == SEA_QUIT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1034 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1035 /* Reset the error/interrupt/exception state here so that
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1036 * aborting() returns FALSE when closing a buffer. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1037 enter_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1038 # endif
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1039
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 /* User selected Quit at ATTENTION prompt. Go back to previous
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 * buffer. If that buffer is gone or the same as the current one,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 * open a new, empty buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 swap_exists_action = SEA_NONE; /* don't want it again */
602
111509d2767a updated for version 7.0171
vimboss
parents: 576
diff changeset
1044 swap_exists_did_quit = TRUE;
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
1045 close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1046 if (old_curbuf == NULL || !bufref_valid(old_curbuf)
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1047 || old_curbuf->br_buf == curbuf)
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1048 buf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1049 else
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1050 buf = old_curbuf->br_buf;
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1051 if (buf != NULL)
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1052 {
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9485
diff changeset
1053 enter_buffer(buf);
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1054 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1055 if (old_tw != curbuf->b_p_tw)
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1056 check_colorcolumn(curwin);
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1057 #endif
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1058 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 /* If "old_curbuf" is NULL we are in big trouble here... */
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1060
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1061 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1062 /* Restore the error/interrupt/exception state if not discarded by a
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1063 * new aborting error, interrupt, or uncaught exception. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1064 leave_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1065 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 else if (swap_exists_action == SEA_RECOVER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1069 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1070 /* Reset the error/interrupt/exception state here so that
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1071 * aborting() returns FALSE when closing a buffer. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1072 enter_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1073 # endif
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1074
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 /* User selected Recover at ATTENTION prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 msg_scroll = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 ml_recover();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 MSG_PUTS("\n"); /* don't overwrite the last message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 cmdline_row = msg_row;
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
1080 do_modelines(0);
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1081
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1082 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1083 /* Restore the error/interrupt/exception state if not discarded by a
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1084 * new aborting error, interrupt, or uncaught exception. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1085 leave_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1086 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 swap_exists_action = SEA_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 #if defined(FEAT_LISTCMDS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 * do_bufdel() - delete or unload buffer(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 * addr_count == 0: ":bdel" - delete current buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 * addr_count == 1: ":N bdel" or ":bdel N [N ..]" - first delete
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 * buffer "end_bnr", then any other arguments.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 * addr_count == 2: ":N,N bdel" - delete buffers in range
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 * command can be DOBUF_UNLOAD (":bunload"), DOBUF_WIPE (":bwipeout") or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 * DOBUF_DEL (":bdel")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 * Returns error message or NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1107 do_bufdel(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1108 int command,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1109 char_u *arg, /* pointer to extra arguments */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1110 int addr_count,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1111 int start_bnr, /* first buffer number in a range */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1112 int end_bnr, /* buffer nr or last buffer nr in a range */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1113 int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 int do_current = 0; /* delete current buffer? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 int deleted = 0; /* number of buffers deleted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 char_u *errormsg = NULL; /* return value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 int bnr; /* buffer number */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 if (addr_count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 (void)do_buffer(command, DOBUF_CURRENT, FORWARD, 0, forceit);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 if (addr_count == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 if (*arg) /* both range and argument is not allowed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 return (char_u *)_(e_trailing);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 bnr = start_bnr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 else /* addr_count == 1 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 bnr = end_bnr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 for ( ;!got_int; ui_breakcheck())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 * delete the current buffer last, otherwise when the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1140 * current buffer is deleted, the next buffer becomes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1141 * the current one and will be loaded, which may then
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1142 * also be deleted, etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 if (bnr == curbuf->b_fnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 do_current = bnr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 else if (do_buffer(command, DOBUF_FIRST, FORWARD, (int)bnr,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 forceit) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 ++deleted;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 * find next buffer number to delete/unload
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 if (addr_count == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 if (++bnr > end_bnr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 else /* addr_count == 1 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 arg = skipwhite(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1161 if (*arg == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1162 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1163 if (!VIM_ISDIGIT(*arg))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 p = skiptowhite_esc(arg);
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
1166 bnr = buflist_findpat(arg, p, command == DOBUF_WIPE,
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
1167 FALSE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 if (bnr < 0) /* failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 arg = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 bnr = getdigits(&arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 if (!got_int && do_current && do_buffer(command, DOBUF_FIRST,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 FORWARD, do_current, forceit) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 ++deleted;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 if (deleted == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 if (command == DOBUF_UNLOAD)
300
86cd0a77d2ae updated for version 7.0079
vimboss
parents: 272
diff changeset
1183 STRCPY(IObuff, _("E515: No buffers were unloaded"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 else if (command == DOBUF_DEL)
300
86cd0a77d2ae updated for version 7.0079
vimboss
parents: 272
diff changeset
1185 STRCPY(IObuff, _("E516: No buffers were deleted"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 else
300
86cd0a77d2ae updated for version 7.0079
vimboss
parents: 272
diff changeset
1187 STRCPY(IObuff, _("E517: No buffers were wiped out"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 errormsg = IObuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 else if (deleted >= p_report)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 if (command == DOBUF_UNLOAD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 if (deleted == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 MSG(_("1 buffer unloaded"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 smsg((char_u *)_("%d buffers unloaded"), deleted);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 else if (command == DOBUF_DEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 if (deleted == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 MSG(_("1 buffer deleted"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 smsg((char_u *)_("%d buffers deleted"), deleted);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 if (deleted == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 MSG(_("1 buffer wiped out"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 smsg((char_u *)_("%d buffers wiped out"), deleted);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 }
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 return errormsg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 }
4936
ae05437a744a updated for version 7.3.1213
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1219 #endif /* FEAT_LISTCMDS */
ae05437a744a updated for version 7.3.1213
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1220
ae05437a744a updated for version 7.3.1213
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1221 #if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
ae05437a744a updated for version 7.3.1213
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1222 || defined(FEAT_PYTHON3) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
1224 static int empty_curbuf(int close_others, int forceit, int action);
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1225
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1226 /*
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1227 * Make the current buffer empty.
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1228 * Used when it is wiped out and it's the last buffer.
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1229 */
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1230 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1231 empty_curbuf(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1232 int close_others,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1233 int forceit,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1234 int action)
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1235 {
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1236 int retval;
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1237 buf_T *buf = curbuf;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1238 bufref_T bufref;
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1239
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1240 if (action == DOBUF_UNLOAD)
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1241 {
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1242 EMSG(_("E90: Cannot unload last buffer"));
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1243 return FAIL;
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1244 }
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1245
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1246 set_bufref(&bufref, buf);
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1247 #ifdef FEAT_WINDOWS
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1248 if (close_others)
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1249 /* Close any other windows on this buffer, then make it empty. */
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1250 close_windows(buf, TRUE);
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1251 #endif
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1252
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1253 setpcmark();
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1254 retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1255 forceit ? ECMD_FORCEIT : 0, curwin);
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1256
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1257 /*
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1258 * do_ecmd() may create a new buffer, then we have to delete
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1259 * the old one. But do_ecmd() may have done that already, check
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1260 * if the buffer still exists.
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1261 */
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1262 if (buf != curbuf && bufref_valid(&bufref) && buf->b_nwindows == 0)
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1263 close_buffer(NULL, buf, action, FALSE);
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1264 if (!close_others)
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1265 need_fileinfo = FALSE;
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1266 return retval;
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1267 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 * Implementation of the commands for the buffer list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 * action == DOBUF_GOTO go to specified buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 * action == DOBUF_SPLIT split window and go to specified buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 * action == DOBUF_UNLOAD unload specified buffer(s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 * action == DOBUF_DEL delete specified buffer(s) from buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 * action == DOBUF_WIPE delete specified buffer(s) really
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 * start == DOBUF_CURRENT go to "count" buffer from current buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 * start == DOBUF_FIRST go to "count" buffer from first buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 * start == DOBUF_LAST go to "count" buffer from last buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 * start == DOBUF_MOD go to "count" modified buffer from current buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 * Return FAIL or OK.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1284 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1285 do_buffer(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1286 int action,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1287 int start,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1288 int dir, /* FORWARD or BACKWARD */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1289 int count, /* buffer number or number of buffers */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1290 int forceit) /* TRUE for :...! */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 buf_T *bp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 || action == DOBUF_WIPE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297 switch (start)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1298 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1299 case DOBUF_FIRST: buf = firstbuf; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 case DOBUF_LAST: buf = lastbuf; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 default: buf = curbuf; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1302 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1303 if (start == DOBUF_MOD) /* find next modified buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1304 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1305 while (count-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1306 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1307 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 buf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 buf = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 while (buf != curbuf && !bufIsChanged(buf));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 if (!bufIsChanged(buf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 EMSG(_("E84: No modified buffer found"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 else if (start == DOBUF_FIRST && count) /* find specified buffer number */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 while (buf != NULL && buf->b_fnum != count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 buf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1326 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 bp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 while (count > 0 || (!unload && !buf->b_p_bl && bp != buf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 /* remember the buffer where we start, we come back there when all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 * buffers are unlisted. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 if (bp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 bp = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 if (dir == FORWARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 buf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 buf = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 buf = buf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 buf = lastbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 /* don't count unlisted buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 if (unload || buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 --count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 bp = NULL; /* use this buffer as new starting point */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 if (bp == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 /* back where we started, didn't find anything. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 EMSG(_("E85: There is no listed buffer"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 if (buf == NULL) /* could not find it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 if (start == DOBUF_FIRST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 /* don't warn when deleting */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 if (!unload)
6557
c1ed973fb58f updated for version 7.4.605
Bram Moolenaar <bram@vim.org>
parents: 6466
diff changeset
1368 EMSGN(_(e_nobufnr), count);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 else if (dir == FORWARD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 EMSG(_("E87: Cannot go beyond last buffer"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 EMSG(_("E88: Cannot go before first buffer"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 #ifdef FEAT_LISTCMDS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 * delete buffer buf from memory and/or the list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 if (unload)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 int forward;
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1388 # if defined(FEAT_AUTOCMD) || defined(FEAT_WINDOWS)
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1389 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1390
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1391 set_bufref(&bufref, buf);
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1392 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 /* When unloading or deleting a buffer that's already unloaded and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 * unlisted: fail silently. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 if (action != DOBUF_WIPE && buf->b_ml.ml_mfp == NULL && !buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 if (!forceit && bufIsChanged(buf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 if ((p_confirm || cmdmod.confirm) && p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 dialog_changed(buf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1405 # ifdef FEAT_AUTOCMD
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1406 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 /* Autocommand deleted buffer, oops! It's not changed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 * now. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 # endif
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1411 /* If it's still changed fail silently, the dialog already
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1412 * mentioned why it fails. */
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1413 if (bufIsChanged(buf))
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1414 return FAIL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 }
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1416 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 EMSGN(_("E89: No write since last change for buffer %ld (add ! to override)"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 buf->b_fnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424
10154
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
1425 /* When closing the current buffer stop Visual mode. */
10184
4669440016f2 commit https://github.com/vim/vim/commit/4930a76a0357f76a829eafe4985d04cf3ce0e9e0
Christian Brabandt <cb@256bit.org>
parents: 10156
diff changeset
1426 if (buf == curbuf && VIsual_active)
10154
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
1427 end_visual_mode();
4647267906cc commit https://github.com/vim/vim/commit/c4a908e83690844b0d3a46124ba6af7d23485d69
Christian Brabandt <cb@256bit.org>
parents: 10118
diff changeset
1428
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 * If deleting the last (listed) buffer, make it empty.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 * The last (listed) buffer cannot be unloaded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
1433 FOR_ALL_BUFFERS(bp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 if (bp->b_p_bl && bp != buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 if (bp == NULL && buf == curbuf)
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1437 return empty_curbuf(TRUE, forceit, action);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 * If the deleted buffer is the current one, close the current window
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
1442 * (unless it's the only window). Repeat this so long as we end up in
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
1443 * a window with this buffer.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 */
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
1445 while (buf == curbuf
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
1446 # ifdef FEAT_AUTOCMD
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1447 && !(curwin->w_closing || curwin->w_buffer->b_locked > 0)
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
1448 # endif
10357
59d01e335858 commit https://github.com/vim/vim/commit/459ca563128f2edb7e3bb190090bbb755a56dd55
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
1449 && (!ONE_WINDOW || first_tabpage->tp_next != NULL))
5302
f6247eaf4e1d updated for version 7.4.004
Bram Moolenaar <bram@vim.org>
parents: 5208
diff changeset
1450 {
f6247eaf4e1d updated for version 7.4.004
Bram Moolenaar <bram@vim.org>
parents: 5208
diff changeset
1451 if (win_close(curwin, FALSE) == FAIL)
f6247eaf4e1d updated for version 7.4.004
Bram Moolenaar <bram@vim.org>
parents: 5208
diff changeset
1452 break;
f6247eaf4e1d updated for version 7.4.004
Bram Moolenaar <bram@vim.org>
parents: 5208
diff changeset
1453 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 * If the buffer to be deleted is not the current one, delete it here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 if (buf != curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 #ifdef FEAT_WINDOWS
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
1462 close_windows(buf, FALSE);
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1463 if (buf != curbuf && bufref_valid(&bufref))
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1464 #endif
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1465 if (buf->b_nwindows <= 0)
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1466 close_buffer(NULL, buf, action, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 * Deleting the current buffer: Need to find another buffer to go to.
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1472 * There should be another, otherwise it would have been handled
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1473 * above. However, autocommands may have deleted all buffers.
9481
7520696c14b0 commit https://github.com/vim/vim/commit/19ff9bf454b7492be64dd87aaf0830fa7961871e
Christian Brabandt <cb@256bit.org>
parents: 9479
diff changeset
1474 * First use au_new_curbuf.br_buf, if it is valid.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1475 * Then prefer the buffer we most recently visited.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1476 * Else try to find one that is loaded, after the current buffer,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1477 * then before the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478 * Finally use any buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 buf = NULL; /* selected buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 bp = NULL; /* used when no loaded buffer found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 #ifdef FEAT_AUTOCMD
9481
7520696c14b0 commit https://github.com/vim/vim/commit/19ff9bf454b7492be64dd87aaf0830fa7961871e
Christian Brabandt <cb@256bit.org>
parents: 9479
diff changeset
1483 if (au_new_curbuf.br_buf != NULL && bufref_valid(&au_new_curbuf))
7520696c14b0 commit https://github.com/vim/vim/commit/19ff9bf454b7492be64dd87aaf0830fa7961871e
Christian Brabandt <cb@256bit.org>
parents: 9479
diff changeset
1484 buf = au_new_curbuf.br_buf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 # ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 #ifdef FEAT_JUMPLIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490 if (curwin->w_jumplistlen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1491 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 int jumpidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 jumpidx = curwin->w_jumplistidx - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 if (jumpidx < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 jumpidx = curwin->w_jumplistlen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 forward = jumpidx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1499 while (jumpidx != curwin->w_jumplistidx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1500 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1501 buf = buflist_findnr(curwin->w_jumplist[jumpidx].fmark.fnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1502 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1503 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1504 if (buf == curbuf || !buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1505 buf = NULL; /* skip current and unlisted bufs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1506 else if (buf->b_ml.ml_mfp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1507 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1508 /* skip unloaded buf, but may keep it for later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1509 if (bp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1510 bp = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1511 buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 if (buf != NULL) /* found a valid buffer: stop searching */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 /* advance to older entry in jump list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 if (!jumpidx && curwin->w_jumplistidx == curwin->w_jumplistlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 if (--jumpidx < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1520 jumpidx = curwin->w_jumplistlen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 if (jumpidx == forward) /* List exhausted for sure */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 if (buf == NULL) /* No previous buffer, Try 2'nd approach */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 forward = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 buf = curbuf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 if (!forward) /* tried both directions */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 buf = curbuf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 forward = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 /* in non-help buffer, try to skip help buffers, and vv */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 if (buf->b_help == curbuf->b_help && buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 if (buf->b_ml.ml_mfp != NULL) /* found loaded buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 if (bp == NULL) /* remember unloaded buf for later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 bp = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 if (forward)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 buf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 buf = buf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1553 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if (buf == NULL) /* No loaded buffer, use unloaded one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 buf = bp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 if (buf == NULL) /* No loaded buffer, find listed one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 {
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
1559 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 if (buf->b_p_bl && buf != curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 if (buf == NULL) /* Still no buffer, just take one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 if (curbuf->b_next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 buf = curbuf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 buf = curbuf->b_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571
5586
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1572 if (buf == NULL)
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1573 {
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1574 /* Autocommands must have wiped out all other buffers. Only option
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1575 * now is to make the current buffer empty. */
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1576 return empty_curbuf(FALSE, forceit, action);
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1577 }
505cf1943dc2 updated for version 7.4.140
Bram Moolenaar <bram@vim.org>
parents: 5446
diff changeset
1578
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 * make buf current buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 if (action == DOBUF_SPLIT) /* split window first */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 # ifdef FEAT_WINDOWS
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
1585 /* If 'switchbuf' contains "useopen": jump to first window containing
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
1586 * "buf" if one exists */
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
1587 if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
825
6675076019ae updated for version 7.0d
vimboss
parents: 820
diff changeset
1588 return OK;
1736
fe52f9888eaa updated for version 7.2-034
vimboss
parents: 1710
diff changeset
1589 /* If 'switchbuf' contains "usetab": jump to first window in any tab
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
1590 * page containing "buf" if one exists */
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
1591 if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 if (win_split(0, 0) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 /* go to current buffer - nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 if (buf == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 * Check if the current buffer may be abandoned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 if (action == DOBUF_GOTO && !can_abandon(curbuf, forceit))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 if ((p_confirm || cmdmod.confirm) && p_write)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1611 # ifdef FEAT_AUTOCMD
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1612 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1613
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1614 set_bufref(&bufref, buf);
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1615 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 dialog_changed(curbuf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 # ifdef FEAT_AUTOCMD
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1618 if (!bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 /* Autocommand deleted buffer, oops! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 if (bufIsChanged(curbuf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 EMSG(_(e_nowrtmsg));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 /* Go to the other buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 set_curbuf(buf, action);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1634 #if defined(FEAT_LISTCMDS) \
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1635 && (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 if (action == DOBUF_SPLIT)
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1637 {
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1638 RESET_BINDING(curwin); /* reset 'scrollbind' and 'cursorbind' */
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
1639 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 if (aborting()) /* autocmds may abort script processing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 }
4936
ae05437a744a updated for version 7.3.1213
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
1649 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 * Set current buffer to "buf". Executes autocommands and closes current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 * buffer. "action" tells how to close the current buffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 * DOBUF_GOTO free or hide it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 * DOBUF_SPLIT nothing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 * DOBUF_UNLOAD unload it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 * DOBUF_DEL delete it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 * DOBUF_WIPE wipe it out
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1661 set_curbuf(buf_T *buf, int action)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 buf_T *prevbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 int unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 || action == DOBUF_WIPE);
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1666 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1667 long old_tw = curbuf->b_p_tw;
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1668 #endif
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1669 bufref_T bufref;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 setpcmark();
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1672 if (!cmdmod.keepalt)
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1673 curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
1674 buflist_altfpos(curwin); /* remember curpos */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 /* Don't restart Select mode after switching to another buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 VIsual_reselect = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 /* close_windows() or apply_autocmds() may change curbuf */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 prevbuf = curbuf;
9479
6149d1374ea0 commit https://github.com/vim/vim/commit/453f37dbfd6f8304a36ea84e40a9965404206186
Christian Brabandt <cb@256bit.org>
parents: 9475
diff changeset
1681 set_bufref(&bufref, prevbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 #ifdef FEAT_AUTOCMD
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1684 if (!apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 # ifdef FEAT_EVAL
10320
6ab770e97152 commit https://github.com/vim/vim/commit/3a117e19e02bf29cfc5e398470dd7851ae3d6803
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
1686 || (bufref_valid(&bufref) && !aborting())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1687 # else
10320
6ab770e97152 commit https://github.com/vim/vim/commit/3a117e19e02bf29cfc5e398470dd7851ae3d6803
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
1688 || bufref_valid(&bufref)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 # endif
10320
6ab770e97152 commit https://github.com/vim/vim/commit/3a117e19e02bf29cfc5e398470dd7851ae3d6803
Christian Brabandt <cb@256bit.org>
parents: 10184
diff changeset
1690 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692 {
3068
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1693 #ifdef FEAT_SYN_HL
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1694 if (prevbuf == curwin->w_buffer)
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1695 reset_synblock(curwin);
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1696 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 if (unload)
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
1699 close_windows(prevbuf, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1702 if (bufref_valid(&bufref) && !aborting())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 #else
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1704 if (bufref_valid(&bufref))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 #endif
815
c68b7b2b9e07 updated for version 7.0c02
vimboss
parents: 809
diff changeset
1706 {
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1707 #ifdef FEAT_WINDOWS
3654
a34fb0a077c9 updated for version 7.3.587
Bram Moolenaar <bram@vim.org>
parents: 3606
diff changeset
1708 win_T *previouswin = curwin;
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1709 #endif
815
c68b7b2b9e07 updated for version 7.0c02
vimboss
parents: 809
diff changeset
1710 if (prevbuf == curbuf)
825
6675076019ae updated for version 7.0d
vimboss
parents: 820
diff changeset
1711 u_sync(FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 unload ? action : (action == DOBUF_GOTO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 && !P_HID(prevbuf)
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
1715 && !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1716 #ifdef FEAT_WINDOWS
3654
a34fb0a077c9 updated for version 7.3.587
Bram Moolenaar <bram@vim.org>
parents: 3606
diff changeset
1717 if (curwin != previouswin && win_valid(previouswin))
3594
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1718 /* autocommands changed curwin, Grr! */
3654
a34fb0a077c9 updated for version 7.3.587
Bram Moolenaar <bram@vim.org>
parents: 3606
diff changeset
1719 curwin = previouswin;
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1720 #endif
815
c68b7b2b9e07 updated for version 7.0c02
vimboss
parents: 809
diff changeset
1721 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 #ifdef FEAT_AUTOCMD
1710
cdf37c8f4616 updated for version 7.2-008
vimboss
parents: 1698
diff changeset
1724 /* An autocommand may have deleted "buf", already entered it (e.g., when
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1725 * it did ":bunload") or aborted the script processing.
3594
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1726 * If curwin->w_buffer is null, enter_buffer() will make it valid again */
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1727 if ((buf_valid(buf) && buf != curbuf
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1728 # ifdef FEAT_EVAL
3594
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1729 && !aborting()
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1730 # endif
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1731 # ifdef FEAT_WINDOWS
3594
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1732 ) || curwin->w_buffer == NULL
3606
02c86cdcf9a2 updated for version 7.3.563
Bram Moolenaar <bram@vim.org>
parents: 3594
diff changeset
1733 # endif
3594
a220dd97b5c7 updated for version 7.3.557
Bram Moolenaar <bram@vim.org>
parents: 3582
diff changeset
1734 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 #endif
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1736 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 enter_buffer(buf);
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1738 #ifdef FEAT_SYN_HL
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1739 if (old_tw != curbuf->b_p_tw)
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1740 check_colorcolumn(curwin);
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1741 #endif
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1742 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 * Enter a new current buffer.
4139
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1747 * Old curbuf must have been abandoned already! This also means "curbuf" may
2f7883063b19 updated for version 7.3.822
Bram Moolenaar <bram@vim.org>
parents: 4101
diff changeset
1748 * be pointing to freed memory.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1751 enter_buffer(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 /* Copy buffer and window local option values. Not for a help buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 buf_copy_options(buf, BCO_ENTER | BCO_NOHELP);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 if (!buf->b_help)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 get_winopts(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 /* Remove all folds in the window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 clearFolding(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 foldUpdateAll(curwin); /* update folds (later). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 /* Get the buffer in the current window. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 curwin->w_buffer = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 curbuf = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 ++curbuf->b_nwindows;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 #ifdef FEAT_DIFF
672
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
1770 if (curwin->w_p_diff)
db58b9066b21 updated for version 7.0200
vimboss
parents: 671
diff changeset
1771 diff_buf_add(curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773
3068
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1774 #ifdef FEAT_SYN_HL
11690
ce434212d682 patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents: 11531
diff changeset
1775 curwin->w_s = &(curbuf->b_s);
3068
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1776 #endif
0787bb5f387b updated for version 7.3.306
Bram Moolenaar <bram@vim.org>
parents: 2834
diff changeset
1777
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 /* Cursor on first line by default. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 curwin->w_cursor.lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 curwin->w_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 curwin->w_cursor.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 curwin->w_set_curswant = TRUE;
1744
feb9b4215853 updated for version 7.2-042
vimboss
parents: 1743
diff changeset
1785 #ifdef FEAT_AUTOCMD
feb9b4215853 updated for version 7.2-042
vimboss
parents: 1743
diff changeset
1786 curwin->w_topline_was_set = FALSE;
feb9b4215853 updated for version 7.2-042
vimboss
parents: 1743
diff changeset
1787 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788
2091
95b659982b7c updated for version 7.2.375
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
1789 /* mark cursor position as being invalid */
95b659982b7c updated for version 7.2.375
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
1790 curwin->w_valid = 0;
95b659982b7c updated for version 7.2.375
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
1791
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 /* Make sure the buffer is loaded. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 if (curbuf->b_ml.ml_mfp == NULL) /* need to load the file */
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1794 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1795 #ifdef FEAT_AUTOCMD
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1796 /* If there is no filetype, allow for detecting one. Esp. useful for
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1797 * ":ball" used in a autocommand. If there already is a filetype we
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1798 * might prefer to keep it. */
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1799 if (*curbuf->b_p_ft == NUL)
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1800 did_filetype = FALSE;
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
1801 #endif
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1802
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
1803 open_buffer(FALSE, NULL, 0);
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
1804 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 {
968
994ea4e6f023 updated for version 7.0-094
vimboss
parents: 961
diff changeset
1807 if (!msg_silent)
994ea4e6f023 updated for version 7.0-094
vimboss
parents: 961
diff changeset
1808 need_fileinfo = TRUE; /* display file info after redraw */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 (void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 curwin->w_topline = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 curwin->w_topfill = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 apply_autocmds(EVENT_BUFWINENTER, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 /* If autocommands did not change the cursor position, restore cursor lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 * and possibly cursor col. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 if (curwin->w_cursor.lnum == 1 && inindent(0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 buflist_getfpos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 check_arg_idx(curwin); /* check for valid arg_idx */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 maketitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 #ifdef FEAT_AUTOCMD
1744
feb9b4215853 updated for version 7.2-042
vimboss
parents: 1743
diff changeset
1830 /* when autocmds didn't change it */
feb9b4215853 updated for version 7.2-042
vimboss
parents: 1743
diff changeset
1831 if (curwin->w_topline == 1 && !curwin->w_topline_was_set)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 scroll_cursor_halfway(FALSE); /* redisplay at correct position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 24
diff changeset
1835 #ifdef FEAT_NETBEANS_INTG
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 24
diff changeset
1836 /* Send fileOpened event because we've changed buffers. */
2210
8c6a66e2b3cc Add :nbstart and :nbclose.
Bram Moolenaar <bram@vim.org>
parents: 2091
diff changeset
1837 netbeans_file_activated(curbuf);
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 24
diff changeset
1838 #endif
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 24
diff changeset
1839
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1840 /* Change directories when the 'acd' option is set. */
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1841 DO_AUTOCHDIR
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 #ifdef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 if (curbuf->b_kmap_state & KEYMAP_INIT)
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
1845 (void)keymap_init();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 #endif
1185
184d2020d8f1 updated for version 7.1a-001
vimboss
parents: 1092
diff changeset
1847 #ifdef FEAT_SPELL
184d2020d8f1 updated for version 7.1a-001
vimboss
parents: 1092
diff changeset
1848 /* May need to set the spell language. Can only do this after the buffer
184d2020d8f1 updated for version 7.1a-001
vimboss
parents: 1092
diff changeset
1849 * has been properly setup. */
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
1850 if (!curbuf->b_help && curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL)
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
1851 (void)did_set_spelllang(curwin);
1185
184d2020d8f1 updated for version 7.1a-001
vimboss
parents: 1092
diff changeset
1852 #endif
9414
1003973c99df commit https://github.com/vim/vim/commit/ab9c89b68dcbdb3fbda8c5a50dd90caca64f1bfd
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
1853 #ifdef FEAT_VIMINFO
1003973c99df commit https://github.com/vim/vim/commit/ab9c89b68dcbdb3fbda8c5a50dd90caca64f1bfd
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
1854 curbuf->b_last_used = vim_time();
1003973c99df commit https://github.com/vim/vim/commit/ab9c89b68dcbdb3fbda8c5a50dd90caca64f1bfd
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
1855 #endif
1185
184d2020d8f1 updated for version 7.1a-001
vimboss
parents: 1092
diff changeset
1856
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 redraw_later(NOT_VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1860 #if defined(FEAT_AUTOCHDIR) || defined(PROTO)
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1861 /*
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1862 * Change to the directory of the current buffer.
8216
03af9acbefb0 commit https://github.com/vim/vim/commit/6bd364e08461159ad3c153ffba4def5b896486a1
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
1863 * Don't do this while still starting up.
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1864 */
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1865 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1866 do_autochdir(void)
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1867 {
9469
38e2fc4ee4ef commit https://github.com/vim/vim/commit/5c71994f4ee5f87d4cce990dbc9684c70b1e108b
Christian Brabandt <cb@256bit.org>
parents: 9450
diff changeset
1868 if ((starting == 0 || test_autochdir)
8216
03af9acbefb0 commit https://github.com/vim/vim/commit/6bd364e08461159ad3c153ffba4def5b896486a1
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
1869 && curbuf->b_ffname != NULL
03af9acbefb0 commit https://github.com/vim/vim/commit/6bd364e08461159ad3c153ffba4def5b896486a1
Christian Brabandt <cb@256bit.org>
parents: 8212
diff changeset
1870 && vim_chdirfile(curbuf->b_ffname) == OK)
961
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1871 shorten_fnames(TRUE);
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1872 }
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1873 #endif
c06c658691e2 updated for version 7.0-087
vimboss
parents: 943
diff changeset
1874
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 * functions for dealing with the buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1879 static int top_file_num = 1; /* highest file number */
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1880
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 * Add a file name to the buffer list. Return a pointer to the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 * If the same file name already exists return a pointer to that buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 * If it does not exist, or if fname == NULL, a new entry is created.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 * If (flags & BLN_CURBUF) is TRUE, may use current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 * If (flags & BLN_LISTED) is TRUE, add new buffer to buffer list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 * If (flags & BLN_DUMMY) is TRUE, don't count it as a real buffer.
9149
18bbf31015c2 commit https://github.com/vim/vim/commit/b127cfd75f59e82580df395b6e2c009774644b16
Christian Brabandt <cb@256bit.org>
parents: 9106
diff changeset
1888 * If (flags & BLN_NEW) is TRUE, don't use an existing buffer.
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1889 * If (flags & BLN_NOOPT) is TRUE, don't copy options from the current buffer
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1890 * if the buffer already exists.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 * This is the ONLY way to create a new buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1894 buflist_new(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1895 char_u *ffname, /* full path of fname or relative */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1896 char_u *sfname, /* short fname or NULL */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1897 linenr_T lnum, /* preferred cursor line */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
1898 int flags) /* BLN_ defines */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 #ifdef UNIX
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
1902 stat_T st;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1904
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1905 if (top_file_num == 1)
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1906 hash_init(&buf_hashtab);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1907
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 fname_expand(curbuf, &ffname, &sfname); /* will allocate ffname */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 * If file name already exists in the list, update the entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 /* On Unix we can use inode numbers when the file exists. Works better
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 * for hard links. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 if (sfname == NULL || mch_stat((char *)sfname, &st) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 st.st_dev = (dev_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 #endif
9149
18bbf31015c2 commit https://github.com/vim/vim/commit/b127cfd75f59e82580df395b6e2c009774644b16
Christian Brabandt <cb@256bit.org>
parents: 9106
diff changeset
1919 if (ffname != NULL && !(flags & (BLN_DUMMY | BLN_NEW)) && (buf =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 buflist_findname_stat(ffname, &st)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 buflist_findname(ffname)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 ) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 vim_free(ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 if (lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 buflist_setfpos(buf, curwin, lnum, (colnr_T)0, FALSE);
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1930
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1931 if ((flags & BLN_NOOPT) == 0)
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1932 /* copy the options now, if 'cpo' doesn't have 's' and not done
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1933 * already */
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1934 buf_copy_options(buf, 0);
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1935
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 if ((flags & BLN_LISTED) && !buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1938 #ifdef FEAT_AUTOCMD
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1939 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1940 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1941 buf->b_p_bl = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1942 #ifdef FEAT_AUTOCMD
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1943 set_bufref(&bufref, buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 if (!(flags & BLN_DUMMY))
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1945 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
1946 if (apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
1947 && !bufref_valid(&bufref))
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1948 return NULL;
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
1949 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1950 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1951 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1952 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1955 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1956 * If the current buffer has no name and no contents, use the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1957 * buffer. Otherwise: Need to allocate a new buffer structure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1958 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959 * This is the ONLY place where a new buffer structure is allocated!
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 602
diff changeset
1960 * (A spell file buffer is allocated in spell.c, but that's not a normal
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 602
diff changeset
1961 * buffer.)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1962 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 buf = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 if ((flags & BLN_CURBUF)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 && curbuf != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 && curbuf->b_ffname == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 && curbuf->b_nwindows <= 1
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11063
diff changeset
1968 && (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY()))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 buf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 /* It's like this buffer is deleted. Watch out for autocommands that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 * change curbuf! If that happens, allocate a new buffer anyway. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 if (curbuf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 if (buf == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 apply_autocmds(EVENT_BUFWIPEOUT, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 # ifdef FEAT_EVAL
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
1979 if (aborting()) /* autocmds may abort script processing */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 #endif
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
1983 #ifdef FEAT_AUTOCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 if (buf == curbuf)
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
1985 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987 /* Make sure 'bufhidden' and 'buftype' are empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 clear_string_option(&buf->b_p_bh);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 clear_string_option(&buf->b_p_bt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 if (buf != curbuf || curbuf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 buf = (buf_T *)alloc_clear((unsigned)sizeof(buf_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 vim_free(ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 }
4287
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2000 #ifdef FEAT_EVAL
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2001 /* init b: variables */
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2002 buf->b_vars = dict_alloc();
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2003 if (buf->b_vars == NULL)
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2004 {
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2005 vim_free(ffname);
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2006 vim_free(buf);
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2007 return NULL;
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2008 }
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2009 init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
dc3efb6d5a08 updated for version 7.3.893
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
2010 #endif
10889
5780bd3a5a7e patch 8.0.0334: can't access b:changedtick from a dict reference
Christian Brabandt <cb@256bit.org>
parents: 10678
diff changeset
2011 init_changedtick(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2013
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 if (ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 buf->b_ffname = ffname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 buf->b_sfname = vim_strsave(sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 clear_wininfo(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 buf->b_wininfo = (wininfo_T *)alloc_clear((unsigned)sizeof(wininfo_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 if ((ffname != NULL && (buf->b_ffname == NULL || buf->b_sfname == NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 || buf->b_wininfo == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 vim_free(buf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 buf->b_ffname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 vim_free(buf->b_sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 buf->b_sfname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 if (buf != curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 free_buffer(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 if (buf == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 /* free all things allocated for this buffer */
2394
a3aca345aafa Add the 'undoreload' option to be able to undo a file reload.
Bram Moolenaar <bram@vim.org>
parents: 2360
diff changeset
2038 buf_freeall(buf, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 if (buf != curbuf) /* autocommands deleted the buffer! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
2042 if (aborting()) /* autocmds may abort script processing */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 free_buffer_stuff(buf, FALSE); /* delete local variables et al. */
3925
18e95db59826 updated for version 7.3.718
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
2046
18e95db59826 updated for version 7.3.718
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
2047 /* Init the options. */
18e95db59826 updated for version 7.3.718
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
2048 buf->b_p_initialized = FALSE;
18e95db59826 updated for version 7.3.718
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
2049 buf_copy_options(buf, BCO_ENTER);
18e95db59826 updated for version 7.3.718
Bram Moolenaar <bram@vim.org>
parents: 3839
diff changeset
2050
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 #ifdef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 /* need to reload lmaps and set b:keymap_name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 curbuf->b_kmap_state |= KEYMAP_INIT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 * put new buffer at the end of the buffer list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 buf->b_next = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 if (firstbuf == NULL) /* buffer list is empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 buf->b_prev = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 firstbuf = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 else /* append new buffer at end of list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 lastbuf->b_next = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 buf->b_prev = lastbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 lastbuf = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 buf->b_fnum = top_file_num++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 if (top_file_num < 0) /* wrap around (may cause duplicates) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 EMSG(_("W14: Warning: List of file names overflow"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 if (emsg_silent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 ui_delay(3000L, TRUE); /* make sure it is noticed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 top_file_num = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 }
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2085 buf_hashtab_add(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 * Always copy the options from the current buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 buf_copy_options(buf, BCO_ALWAYS);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 buf->b_wininfo->wi_fpos.lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 buf->b_wininfo->wi_win = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095
126
c3075f07a273 updated for version 7.0044
vimboss
parents: 53
diff changeset
2096 #ifdef FEAT_SYN_HL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2097 hash_init(&buf->b_s.b_keywtab);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2098 hash_init(&buf->b_s.b_keywtab_ic);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 buf->b_fname = buf->b_sfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 if (st.st_dev == (dev_T)-1)
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
2104 buf->b_dev_valid = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 {
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
2107 buf->b_dev_valid = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 buf->b_dev = st.st_dev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 buf->b_ino = st.st_ino;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 buf->b_u_synced = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 buf->b_flags = BF_CHECK_RO | BF_NEVERLOADED;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2114 if (flags & BLN_DUMMY)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2115 buf->b_flags |= BF_DUMMY;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 buf_clear_file(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 clrallmarks(buf); /* clear marks */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 fmarks_check_names(buf); /* check file marks for this file */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 buf->b_p_bl = (flags & BLN_LISTED) ? TRUE : FALSE; /* init 'buflisted' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 if (!(flags & BLN_DUMMY))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
2123 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
2124
6639
342568f82d82 updated for version 7.4.645
Bram Moolenaar <bram@vim.org>
parents: 6557
diff changeset
2125 /* Tricky: these autocommands may change the buffer list. They could
342568f82d82 updated for version 7.4.645
Bram Moolenaar <bram@vim.org>
parents: 6557
diff changeset
2126 * also split the window with re-using the one empty buffer. This may
342568f82d82 updated for version 7.4.645
Bram Moolenaar <bram@vim.org>
parents: 6557
diff changeset
2127 * result in unexpectedly losing the empty buffer. */
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
2128 set_bufref(&bufref, buf);
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
2129 if (apply_autocmds(EVENT_BUFNEW, NULL, NULL, FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
2130 && !bufref_valid(&bufref))
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2131 return NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 if (flags & BLN_LISTED)
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2133 {
9473
bdac1019552f commit https://github.com/vim/vim/commit/8240433f48f7383c281ba2453cc55f10b8ec47d9
Christian Brabandt <cb@256bit.org>
parents: 9469
diff changeset
2134 if (apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, buf)
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
2135 && !bufref_valid(&bufref))
5816
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2136 return NULL;
29eb4c2a33ac updated for version 7.4.251
Bram Moolenaar <bram@vim.org>
parents: 5735
diff changeset
2137 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 # ifdef FEAT_EVAL
36
125e80798a85 updated for version 7.0021
vimboss
parents: 33
diff changeset
2139 if (aborting()) /* autocmds may abort script processing */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2149 * Free the memory for the options of a buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 * If "free_p_ff" is TRUE also free 'fileformat', 'buftype' and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 * 'fileencoding'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2154 free_buf_options(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2155 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2156 int free_p_ff)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 if (free_p_ff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 clear_string_option(&buf->b_p_fenc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 clear_string_option(&buf->b_p_ff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2164 clear_string_option(&buf->b_p_bh);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 clear_string_option(&buf->b_p_bt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 #ifdef FEAT_FIND_ID
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 clear_string_option(&buf->b_p_def);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 clear_string_option(&buf->b_p_inc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170 # ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 clear_string_option(&buf->b_p_inex);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 clear_string_option(&buf->b_p_inde);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 clear_string_option(&buf->b_p_indk);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 #endif
788
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
2178 #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
2179 clear_string_option(&buf->b_p_bexpr);
b5aed52a4881 updated for version 7.0230
vimboss
parents: 771
diff changeset
2180 #endif
2360
d8e4b27cef80 Change 'cryptmethod' from a number to a string option. Make it global-local.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2181 #if defined(FEAT_CRYPT)
d8e4b27cef80 Change 'cryptmethod' from a number to a string option. Make it global-local.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2182 clear_string_option(&buf->b_p_cm);
d8e4b27cef80 Change 'cryptmethod' from a number to a string option. Make it global-local.
Bram Moolenaar <bram@vim.org>
parents: 2329
diff changeset
2183 #endif
10678
c647f01d6dbd patch 8.0.0229: local 'formatprg' option value leaks
Christian Brabandt <cb@256bit.org>
parents: 10575
diff changeset
2184 clear_string_option(&buf->b_p_fp);
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
2185 #if defined(FEAT_EVAL)
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
2186 clear_string_option(&buf->b_p_fex);
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
2187 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 #ifdef FEAT_CRYPT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 clear_string_option(&buf->b_p_key);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191 clear_string_option(&buf->b_p_kp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2192 clear_string_option(&buf->b_p_mps);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 clear_string_option(&buf->b_p_fo);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
2194 clear_string_option(&buf->b_p_flp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 clear_string_option(&buf->b_p_isk);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 #ifdef FEAT_KEYMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 clear_string_option(&buf->b_p_keymap);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 ga_clear(&buf->b_kmap_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 #ifdef FEAT_COMMENTS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 clear_string_option(&buf->b_p_com);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2203 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 clear_string_option(&buf->b_p_cms);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 clear_string_option(&buf->b_p_nf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 #ifdef FEAT_SYN_HL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 clear_string_option(&buf->b_p_syn);
7687
61354fabf8a2 commit https://github.com/vim/vim/commit/b8060fe862f684b591f9ac679eac5b2594d6c5a0
Christian Brabandt <cb@256bit.org>
parents: 7572
diff changeset
2209 clear_string_option(&buf->b_s.b_syn_isk);
737
59971e227f8c updated for version 7.0222
vimboss
parents: 726
diff changeset
2210 #endif
59971e227f8c updated for version 7.0222
vimboss
parents: 726
diff changeset
2211 #ifdef FEAT_SPELL
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2212 clear_string_option(&buf->b_s.b_p_spc);
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2213 clear_string_option(&buf->b_s.b_p_spf);
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4795
diff changeset
2214 vim_regfree(buf->b_s.b_cap_prog);
2250
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2215 buf->b_s.b_cap_prog = NULL;
1bac28a53fae Add the conceal patch from Vince Negri.
Bram Moolenaar <bram@vim.org>
parents: 2214
diff changeset
2216 clear_string_option(&buf->b_s.b_p_spl);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 #ifdef FEAT_SEARCHPATH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 clear_string_option(&buf->b_p_sua);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 clear_string_option(&buf->b_p_ft);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 #ifdef FEAT_CINDENT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 clear_string_option(&buf->b_p_cink);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 clear_string_option(&buf->b_p_cino);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 #if defined(FEAT_CINDENT) || defined(FEAT_SMARTINDENT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 clear_string_option(&buf->b_p_cinw);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 #ifdef FEAT_INS_EXPAND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 clear_string_option(&buf->b_p_cpt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 #endif
12
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2234 #ifdef FEAT_COMPL_FUNC
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2235 clear_string_option(&buf->b_p_cfu);
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 474
diff changeset
2236 clear_string_option(&buf->b_p_ofu);
12
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2237 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 clear_string_option(&buf->b_p_gp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 clear_string_option(&buf->b_p_mp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 clear_string_option(&buf->b_p_efm);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 clear_string_option(&buf->b_p_ep);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 clear_string_option(&buf->b_p_path);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 clear_string_option(&buf->b_p_tags);
7266
6ba7182fb7bd commit https://github.com/vim/vim/commit/0f6562e9036f889185dff49a75c7fc5ffb28b307
Christian Brabandt <cb@256bit.org>
parents: 7174
diff changeset
2246 clear_string_option(&buf->b_p_tc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 #ifdef FEAT_INS_EXPAND
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 clear_string_option(&buf->b_p_dict);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 clear_string_option(&buf->b_p_tsr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 #endif
12
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2251 #ifdef FEAT_TEXTOBJ
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2252 clear_string_option(&buf->b_p_qe);
bdeee1504ac1 updated for version 7.0004
vimboss
parents: 9
diff changeset
2253 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 buf->b_p_ar = -1;
5446
d0595545e98a updated for version 7.4.073
Bram Moolenaar <bram@vim.org>
parents: 5440
diff changeset
2255 buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
5712
06e5f65c34d8 updated for version 7.4.201
Bram Moolenaar <bram@vim.org>
parents: 5586
diff changeset
2256 #ifdef FEAT_LISP
06e5f65c34d8 updated for version 7.4.201
Bram Moolenaar <bram@vim.org>
parents: 5586
diff changeset
2257 clear_string_option(&buf->b_p_lw);
06e5f65c34d8 updated for version 7.4.201
Bram Moolenaar <bram@vim.org>
parents: 5586
diff changeset
2258 #endif
6243
54194bd6ed60 updated for version 7.4.456
Bram Moolenaar <bram@vim.org>
parents: 6241
diff changeset
2259 clear_string_option(&buf->b_p_bkc);
11063
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10954
diff changeset
2260 #ifdef FEAT_MBYTE
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10954
diff changeset
2261 clear_string_option(&buf->b_p_menc);
e71d3bdf3bc3 patch 8.0.0420: text garbled when the system encoding differs from 'encoding'
Christian Brabandt <cb@256bit.org>
parents: 10954
diff changeset
2262 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 /*
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2266 * Get alternate file "n".
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2267 * Set linenr to "lnum" or altfpos.lnum if "lnum" == 0.
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2268 * Also set cursor column to altfpos.col if 'startofline' is not set.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 * if (options & GETF_SETMARK) call setpcmark()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 * if (options & GETF_ALT) we are jumping to an alternate file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 * if (options & GETF_SWITCH) respect 'switchbuf' settings when jumping
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 *
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2273 * Return FAIL for failure, OK for success.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2276 buflist_getfile(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2277 int n,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2278 linenr_T lnum,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2279 int options,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2280 int forceit)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 win_T *wp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 pos_T *fpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 buf = buflist_findnr(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 if ((options & GETF_ALT) && n == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 EMSG(_(e_noalt));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 EMSGN(_("E92: Buffer %ld not found"), n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 /* if alternate file is the current buffer, nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 if (buf == curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
2303 if (text_locked())
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2304 {
633
7437be625546 updated for version 7.0183
vimboss
parents: 631
diff changeset
2305 text_locked_msg();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 return FAIL;
631
68a196b7504d updated for version 7.0182
vimboss
parents: 625
diff changeset
2307 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2308 #ifdef FEAT_AUTOCMD
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2309 if (curbuf_locked())
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2310 return FAIL;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
2311 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2313 /* altfpos may be changed by getfile(), get it now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 if (lnum == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 fpos = buflist_findfpos(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 lnum = fpos->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 col = fpos->col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 if (options & GETF_SWITCH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 {
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2326 /* If 'switchbuf' contains "useopen": jump to first window containing
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2327 * "buf" if one exists */
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2328 if (swb_flags & SWB_USEOPEN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2329 wp = buf_jump_open_win(buf);
6843
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2330
4352
04736b4030ec updated for version 7.3.925
Bram Moolenaar <bram@vim.org>
parents: 4333
diff changeset
2331 /* If 'switchbuf' contains "usetab": jump to first window in any tab
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2332 * page containing "buf" if one exists */
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2333 if (wp == NULL && (swb_flags & SWB_USETAB))
825
6675076019ae updated for version 7.0d
vimboss
parents: 820
diff changeset
2334 wp = buf_jump_open_tab(buf);
6843
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2335
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2336 /* If 'switchbuf' contains "split", "vsplit" or "newtab" and the
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2337 * current buffer isn't empty: open new tab or window */
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2338 if (wp == NULL && (swb_flags & (SWB_VSPLIT | SWB_SPLIT | SWB_NEWTAB))
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11063
diff changeset
2339 && !BUFEMPTY())
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340 {
6843
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2341 if (swb_flags & SWB_NEWTAB)
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
2342 tabpage_new();
6843
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2343 else if (win_split(0, (swb_flags & SWB_VSPLIT) ? WSP_VERT : 0)
50cdebea094f patch 7.4.742
Bram Moolenaar <bram@vim.org>
parents: 6689
diff changeset
2344 == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 return FAIL;
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2545
diff changeset
2346 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2348 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2351 ++RedrawingDisabled;
11476
c45fb081391c patch 8.0.0621: :stag does not respect 'switchbuf'
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
2352 if (GETFILE_SUCCESS(getfile(buf->b_fnum, NULL, NULL,
c45fb081391c patch 8.0.0621: :stag does not respect 'switchbuf'
Christian Brabandt <cb@256bit.org>
parents: 11447
diff changeset
2353 (options & GETF_SETMARK), lnum, forceit)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2354 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2355 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 /* cursor is at to BOL and w_cursor.lnum is checked due to getfile() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 if (!p_sol && col != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 curwin->w_cursor.col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 check_cursor_col();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 curwin->w_cursor.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 curwin->w_set_curswant = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 --RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2374 * go to the last know line number for the current buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2377 buflist_getfpos(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 pos_T *fpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 fpos = buflist_findfpos(curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 curwin->w_cursor.lnum = fpos->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 check_cursor_lnum();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 if (p_sol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 curwin->w_cursor.col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390 curwin->w_cursor.col = fpos->col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 check_cursor_col();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 #ifdef FEAT_VIRTUALEDIT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2393 curwin->w_cursor.coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395 curwin->w_set_curswant = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2396 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2399 #if defined(FEAT_QUICKFIX) || defined(FEAT_EVAL) || defined(PROTO)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2400 /*
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2401 * Find file in buffer list by name (it has to be for the current window).
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2402 * Returns NULL if not found.
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2403 */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2404 buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2405 buflist_findname_exp(char_u *fname)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2406 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2407 char_u *ffname;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2408 buf_T *buf = NULL;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2409
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2410 /* First make the name into a full path name */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2411 ffname = FullName_save(fname,
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2412 #ifdef UNIX
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2413 TRUE /* force expansion, get rid of symbolic links */
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2414 #else
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2415 FALSE
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2416 #endif
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2417 );
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2418 if (ffname != NULL)
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2419 {
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2420 buf = buflist_findname(ffname);
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2421 vim_free(ffname);
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2422 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2423 return buf;
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2424 }
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2425 #endif
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2426
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 * Find file in buffer list by name (it has to be for the current window).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 * "ffname" must have a full path.
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2430 * Skips dummy buffers.
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2431 * Returns NULL if not found.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2432 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2434 buflist_findname(char_u *ffname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 #ifdef UNIX
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
2437 stat_T st;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2438
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 if (mch_stat((char *)ffname, &st) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 st.st_dev = (dev_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2441 return buflist_findname_stat(ffname, &st);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 * Same as buflist_findname(), but pass the stat structure to avoid getting it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 * twice for the same file.
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2447 * Returns NULL if not found.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2449 static buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2450 buflist_findname_stat(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2451 char_u *ffname,
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
2452 stat_T *stp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2454 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2455 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2456
9485
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9481
diff changeset
2457 /* Start at the last buffer, expect to find a match sooner. */
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9481
diff changeset
2458 for (buf = lastbuf; buf != NULL; buf = buf->b_prev)
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
2459 if ((buf->b_flags & BF_DUMMY) == 0 && !otherfile_buf(buf, ffname
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2460 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 , stp
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2462 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 ))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2464 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2467
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2468 #if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) \
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2469 || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2471 * Find file in buffer list by a regexp pattern.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 * Return fnum of the found buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 * Return < 0 for error.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2474 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2476 buflist_findpat(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2477 char_u *pattern,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2478 char_u *pattern_end, /* pointer to first char after pattern */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2479 int unlisted, /* find unlisted buffers */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2480 int diffmode UNUSED, /* find diff-mode buffers only */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2481 int curtab_only) /* find buffers in current tab only */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2482 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2483 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2484 int match = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 int find_listed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 char_u *pat;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 char_u *patend;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 int attempt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 int toggledollar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 if (pattern_end == pattern + 1 && (*pattern == '%' || *pattern == '#'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 if (*pattern == '%')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 match = curbuf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2496 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 match = curwin->w_alt_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 if (diffmode && !diff_mode_buf(buflist_findnr(match)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2500 match = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 * Try four ways of matching a listed buffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2506 * attempt == 0: without '^' or '$' (at any position)
1187
f89c43568067 updated for version 7.1b
vimboss
parents: 1185
diff changeset
2507 * attempt == 1: with '^' at start (only at position 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 * attempt == 2: with '$' at end (only match at end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 * attempt == 3: with '^' at start and '$' at end (only full match)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 * Repeat this for finding an unlisted buffer if there was no matching
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 * listed buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2513 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2514 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2515 pat = file_pat_to_reg_pat(pattern, pattern_end, NULL, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2516 if (pat == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2518 patend = pat + STRLEN(pat) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2519 toggledollar = (patend > pat && *patend == '$');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2521 /* First try finding a listed buffer. If not found and "unlisted"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 * is TRUE, try finding an unlisted buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2523 find_listed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 for (attempt = 0; attempt <= 3; ++attempt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 {
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2528 regmatch_T regmatch;
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2529
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2530 /* may add '^' and '$' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2531 if (toggledollar)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2532 *patend = (attempt < 2) ? NUL : '$'; /* add/remove '$' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 p = pat;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2534 if (*p == '^' && !(attempt & 1)) /* add/remove '^' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 ++p;
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2536 regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2537 if (regmatch.regprog == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 vim_free(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2542
9485
c16e207dc465 commit https://github.com/vim/vim/commit/ea3f2e7be447a8f0c4436869620f908de5e8ef1e
Christian Brabandt <cb@256bit.org>
parents: 9481
diff changeset
2543 for (buf = lastbuf; buf != NULL; buf = buf->b_prev)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 if (buf->b_p_bl == find_listed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 && (!diffmode || diff_mode_buf(buf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 #endif
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2548 && buflist_match(&regmatch, buf, FALSE) != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 {
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2550 if (curtab_only)
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2551 {
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2552 /* Ignore the match if the buffer is not open in
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2553 * the current tab. */
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2554 #ifdef FEAT_WINDOWS
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2555 win_T *wp;
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2556
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
2557 FOR_ALL_WINDOWS(wp)
4236
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2558 if (wp->w_buffer == buf)
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2559 break;
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2560 if (wp == NULL)
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2561 continue;
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2562 #else
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2563 if (curwin->w_buffer != buf)
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2564 continue;
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2565 #endif
23ce9a61bdc2 updated for version 7.3.869
Bram Moolenaar <bram@vim.org>
parents: 4139
diff changeset
2566 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 if (match >= 0) /* already found a match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 match = -2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 match = buf->b_fnum; /* remember first match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2575 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 if (match >= 0) /* found one match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 /* Only search for unlisted buffers if there was no match with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 * a listed buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 if (!unlisted || !find_listed || match != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 find_listed = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 vim_free(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 if (match == -2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 EMSG2(_("E93: More than one match for %s"), pattern);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 else if (match < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 EMSG2(_("E94: No matching buffer for %s"), pattern);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 return match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 * Find all buffer names that match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 * For command line expansion of ":buf" and ":sbuf".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 * Return OK if matches found, FAIL otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2606 ExpandBufnames(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2607 char_u *pat,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2608 int *num_file,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2609 char_u ***file,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2610 int options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 int count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 int round;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 int attempt;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2617 char_u *patc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 *num_file = 0; /* return values in case of FAIL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 *file = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2622 /* Make a copy of "pat" and change "^" to "\(^\|[\/]\)". */
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2623 if (*pat == '^')
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2624 {
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2625 patc = alloc((unsigned)STRLEN(pat) + 11);
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2626 if (patc == NULL)
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2627 return FAIL;
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2628 STRCPY(patc, "\\(^\\|[\\/]\\)");
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2629 STRCPY(patc + 11, pat + 1);
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2630 }
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2631 else
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2632 patc = pat;
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2633
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 /*
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2635 * attempt == 0: try match with '\<', match at start of word
267
ca33bc409682 updated for version 7.0072
vimboss
parents: 255
diff changeset
2636 * attempt == 1: try match without '\<', match anywhere
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 */
267
ca33bc409682 updated for version 7.0072
vimboss
parents: 255
diff changeset
2638 for (attempt = 0; attempt <= 1; ++attempt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 {
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2640 regmatch_T regmatch;
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2641
267
ca33bc409682 updated for version 7.0072
vimboss
parents: 255
diff changeset
2642 if (attempt > 0 && patc == pat)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2643 break; /* there was no anchor, no need to try again */
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2644 regmatch.regprog = vim_regcomp(patc + attempt * 11, RE_MAGIC);
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2645 if (regmatch.regprog == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 {
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2647 if (patc != pat)
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2648 vim_free(patc);
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2649 return FAIL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 * round == 1: Count the matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 * round == 2: Build the array to keep the matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 for (round = 1; round <= 2; ++round)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 count = 0;
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
2659 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661 if (!buf->b_p_bl) /* skip unlisted buffers */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 continue;
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2663 p = buflist_match(&regmatch, buf, p_wic);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 if (round == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 ++count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 if (options & WILD_HOME_REPLACE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 p = home_replace_save(buf, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 p = vim_strsave(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 (*file)[count++] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 if (count == 0) /* no match found, break here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 if (round == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 *file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 if (*file == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 {
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2685 vim_regfree(regmatch.regprog);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2686 if (patc != pat)
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2687 vim_free(patc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 }
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2692 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 if (count) /* match(es) found, break here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2697 if (patc != pat)
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2698 vim_free(patc);
8c60f65311fa updated for version 7.0052
vimboss
parents: 164
diff changeset
2699
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 *num_file = count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 return (count == 0 ? FAIL : OK);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 #endif /* FEAT_CMDL_COMPL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 #ifdef HAVE_BUFLIST_MATCH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 * Check for a match on the file name for buffer "buf" with regprog "prog".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 static char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2711 buflist_match(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2712 regmatch_T *rmp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2713 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2714 int ignore_case) /* when TRUE ignore case, when FALSE use 'fic' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 char_u *match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 /* First try the short file name, then the long file name. */
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2719 match = fname_match(rmp, buf->b_sfname, ignore_case);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 if (match == NULL)
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2721 match = fname_match(rmp, buf->b_ffname, ignore_case);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723 return match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 * Try matching the regexp in "prog" with file name "name".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 * Return "name" when there is a match, NULL when not.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 static char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2731 fname_match(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2732 regmatch_T *rmp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2733 char_u *name,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2734 int ignore_case) /* when TRUE ignore case, when FALSE use 'fic' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 char_u *match = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 if (name != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 {
6241
ebc72764fa1e updated for version 7.4.455
Bram Moolenaar <bram@vim.org>
parents: 6060
diff changeset
2741 /* Ignore case when 'fileignorecase' or the argument is set. */
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2742 rmp->rm_ic = p_fic || ignore_case;
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2743 if (vim_regexec(rmp, name, (colnr_T)0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 match = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2747 /* Replace $(HOME) with '~' and try matching again. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 p = home_replace_save(NULL, name);
6375
27a36d1013a6 updated for version 7.4.519
Bram Moolenaar <bram@vim.org>
parents: 6243
diff changeset
2749 if (p != NULL && vim_regexec(rmp, p, (colnr_T)0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 match = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2752 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2753 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2754
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 return match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 /*
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2760 * Find a file in the buffer list by buffer number.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2762 buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2763 buflist_findnr(int nr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 {
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2765 char_u key[VIM_SIZEOF_INT * 2 + 1];
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2766 hashitem_T *hi;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2767
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2768 if (nr == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2769 nr = curwin->w_alt_fnum;
9511
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2770 sprintf((char *)key, "%x", nr);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2771 hi = hash_find(&buf_hashtab, key);
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2772
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2773 if (!HASHITEM_EMPTY(hi))
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2774 return (buf_T *)(hi->hi_key
c2e904cc064f commit https://github.com/vim/vim/commit/480778b805bd8bdc5d657560230e9c50feda1d0f
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2775 - ((unsigned)(curbuf->b_key - (char_u *)curbuf)));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2776 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2777 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 * Get name of file 'n' in the buffer list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 * When the file has no name an empty string is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 * home_replace() is used to shorten the file name (used for marks).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783 * Returns a pointer to allocated memory, of NULL when failed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2786 buflist_nr2name(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2787 int n,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2788 int fullname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2789 int helptail) /* for help buffers return tail only */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 buf = buflist_findnr(n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2794 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 return home_replace_save(helptail ? buf : NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 fullname ? buf->b_ffname : buf->b_fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 * Set the "lnum" and "col" for the buffer "buf" and the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 * When "copy_options" is TRUE save the local window option values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 * When "lnum" is 0 only do the options.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 static void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2806 buflist_setfpos(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2807 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2808 win_T *win,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2809 linenr_T lnum,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2810 colnr_T col,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2811 int copy_options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 wininfo_T *wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 if (wip->wi_win == win)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 if (wip == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 /* allocate a new entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 wip = (wininfo_T *)alloc_clear((unsigned)sizeof(wininfo_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 if (wip == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 wip->wi_win = win;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2825 if (lnum == 0) /* set lnum even when it's 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2829 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 /* remove the entry from the list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831 if (wip->wi_prev)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 wip->wi_prev->wi_next = wip->wi_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 buf->b_wininfo = wip->wi_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 if (wip->wi_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 wip->wi_next->wi_prev = wip->wi_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 if (copy_options && wip->wi_optset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839 clear_winopt(&wip->wi_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2840 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 deleteFoldRecurse(&wip->wi_folds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 if (lnum != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 wip->wi_fpos.lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 wip->wi_fpos.col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2849 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 if (copy_options)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 /* Save the window-specific option values. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 copy_winopt(&win->w_onebuf_opt, &wip->wi_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 wip->wi_fold_manual = win->w_fold_manual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 cloneFoldGrowArray(&win->w_folds, &wip->wi_folds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 wip->wi_optset = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 /* insert the entry in front of the list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 wip->wi_next = buf->b_wininfo;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 buf->b_wininfo = wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 wip->wi_prev = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 if (wip->wi_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 wip->wi_next->wi_prev = wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2871 #ifdef FEAT_DIFF
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
2872 static int wininfo_other_tab_diff(wininfo_T *wip);
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2873
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2874 /*
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2875 * Return TRUE when "wip" has 'diff' set and the diff is only for another tab
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2876 * page. That's because a diff is local to a tab page.
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2877 */
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2878 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2879 wininfo_other_tab_diff(wininfo_T *wip)
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2880 {
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2881 win_T *wp;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2882
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2883 if (wip->wi_opt.wo_diff)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2884 {
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
2885 FOR_ALL_WINDOWS(wp)
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2886 /* return FALSE when it's a window in the current tab page, thus
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2887 * the buffer was in diff mode here */
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2888 if (wip->wi_win == wp)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2889 return FALSE;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2890 return TRUE;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2891 }
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2892 return FALSE;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2893 }
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2894 #endif
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2895
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897 * Find info for the current window in buffer "buf".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 * If not found, return the info for the most recently used window.
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2899 * When "skip_diff_buffer" is TRUE avoid windows with 'diff' set that is in
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2900 * another tab page.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 * Returns NULL when there isn't any info.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 static wininfo_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2904 find_wininfo(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2905 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2906 int skip_diff_buffer UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 wininfo_T *wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2911 if (wip->wi_win == curwin
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2912 #ifdef FEAT_DIFF
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2913 && (!skip_diff_buffer || !wininfo_other_tab_diff(wip))
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2914 #endif
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2915 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 break;
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2917
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2918 /* If no wininfo for curwin, use the first in the list (that doesn't have
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2919 * 'diff' set and is in another tab page). */
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2920 if (wip == NULL)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2921 {
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2922 #ifdef FEAT_DIFF
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2923 if (skip_diff_buffer)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2924 {
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2925 for (wip = buf->b_wininfo; wip != NULL; wip = wip->wi_next)
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2926 if (!wininfo_other_tab_diff(wip))
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2927 break;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2928 }
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2929 else
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2930 #endif
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2931 wip = buf->b_wininfo;
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2932 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 return wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 * Reset the local window options to the values last used in this window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 * If the buffer wasn't used in this window before, use the values from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 * the most recently used window. If the values were never set, use the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 * global values for the window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2943 get_winopts(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 wininfo_T *wip;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2947 clear_winopt(&curwin->w_onebuf_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 clearFolding(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2952 wip = find_wininfo(buf, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 if (wip != NULL && wip->wi_optset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 copy_winopt(&wip->wi_opt, &curwin->w_onebuf_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 curwin->w_fold_manual = wip->wi_fold_manual;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 curwin->w_foldinvalid = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 cloneFoldGrowArray(&wip->wi_folds, &curwin->w_folds);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 copy_winopt(&curwin->w_allbuf_opt, &curwin->w_onebuf_opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 #ifdef FEAT_FOLDING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 /* Set 'foldlevel' to 'foldlevelstart' if it's not negative. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 if (p_fdls >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 curwin->w_p_fdl = p_fdls;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 #endif
2799
537e0102c0f9 updated for version 7.3.175
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
2970 #ifdef FEAT_SYN_HL
537e0102c0f9 updated for version 7.3.175
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
2971 check_colorcolumn(curwin);
537e0102c0f9 updated for version 7.3.175
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
2972 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 * Find the position (lnum and col) for the buffer 'buf' for the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 * window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 * Returns a pointer to no_position if no position is found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 pos_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2981 buflist_findfpos(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 wininfo_T *wip;
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
2984 static pos_T no_position = INIT_POS_T(1, 0, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
2986 wip = find_wininfo(buf, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 if (wip != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 return &(wip->wi_fpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 return &no_position;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 * Find the lnum for the buffer 'buf' for the current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 linenr_T
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
2997 buflist_findlnum(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 return buflist_findfpos(buf)->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 #if defined(FEAT_LISTCMDS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 /*
11447
698ee9d4fe9f patch 8.0.0607: after :bwipe + :new bufref might still be valid
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
3004 * List all known file names (for :files and :buffers command).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3007 buflist_list(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 for (buf = firstbuf; buf != NULL && !got_int; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 /* skip unlisted buffers, unless ! was used */
6945
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3016 if ((!buf->b_p_bl && !eap->forceit && !vim_strchr(eap->arg, 'u'))
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3017 || (vim_strchr(eap->arg, 'u') && buf->b_p_bl)
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3018 || (vim_strchr(eap->arg, '+')
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3019 && ((buf->b_flags & BF_READERR) || !bufIsChanged(buf)))
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3020 || (vim_strchr(eap->arg, 'a')
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3021 && (buf->b_ml.ml_mfp == NULL || buf->b_nwindows == 0))
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3022 || (vim_strchr(eap->arg, 'h')
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3023 && (buf->b_ml.ml_mfp == NULL || buf->b_nwindows != 0))
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3024 || (vim_strchr(eap->arg, '-') && buf->b_p_ma)
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3025 || (vim_strchr(eap->arg, '=') && !buf->b_p_ro)
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3026 || (vim_strchr(eap->arg, 'x') && !(buf->b_flags & BF_READERR))
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3027 || (vim_strchr(eap->arg, '%') && buf != curbuf)
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3028 || (vim_strchr(eap->arg, '#')
957a3bb312fa patch 7.4.791
Bram Moolenaar <bram@vim.org>
parents: 6933
diff changeset
3029 && (buf == curbuf || curwin->w_alt_fnum != buf->b_fnum)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 if (buf_spname(buf) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
3032 vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
9943
af161c1f530a commit https://github.com/vim/vim/commit/77401add71853d7a3da7ccc489f2a1bca58551ec
Christian Brabandt <cb@256bit.org>
parents: 9911
diff changeset
3035 if (message_filtered(NameBuff))
af161c1f530a commit https://github.com/vim/vim/commit/77401add71853d7a3da7ccc489f2a1bca58551ec
Christian Brabandt <cb@256bit.org>
parents: 9911
diff changeset
3036 continue;
af161c1f530a commit https://github.com/vim/vim/commit/77401add71853d7a3da7ccc489f2a1bca58551ec
Christian Brabandt <cb@256bit.org>
parents: 9911
diff changeset
3037
af161c1f530a commit https://github.com/vim/vim/commit/77401add71853d7a3da7ccc489f2a1bca58551ec
Christian Brabandt <cb@256bit.org>
parents: 9911
diff changeset
3038 msg_putchar('\n');
302
250611b3068d updated for version 7.0080
vimboss
parents: 300
diff changeset
3039 len = vim_snprintf((char *)IObuff, IOSIZE - 20, "%3d%c%c%c%c%c \"%s\"",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 buf->b_fnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 buf->b_p_bl ? ' ' : 'u',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 buf == curbuf ? '%' :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 (curwin->w_alt_fnum == buf->b_fnum ? '#' : ' '),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 buf->b_ml.ml_mfp == NULL ? ' ' :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 (buf->b_nwindows == 0 ? 'h' : 'a'),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 !buf->b_p_ma ? '-' : (buf->b_p_ro ? '=' : ' '),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 (buf->b_flags & BF_READERR) ? 'x'
300
86cd0a77d2ae updated for version 7.0079
vimboss
parents: 272
diff changeset
3048 : (bufIsChanged(buf) ? '+' : ' '),
86cd0a77d2ae updated for version 7.0079
vimboss
parents: 272
diff changeset
3049 NameBuff);
7572
992fe73d4ee6 commit https://github.com/vim/vim/commit/507edf63df75fe228e0f76b845b58d60266e65d8
Christian Brabandt <cb@256bit.org>
parents: 7266
diff changeset
3050 if (len > IOSIZE - 20)
992fe73d4ee6 commit https://github.com/vim/vim/commit/507edf63df75fe228e0f76b845b58d60266e65d8
Christian Brabandt <cb@256bit.org>
parents: 7266
diff changeset
3051 len = IOSIZE - 20;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 /* put "line 999" in column 40 or after the file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 i = 40 - vim_strsize(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 IObuff[len++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 } while (--i > 0 && len < IOSIZE - 18);
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3059 vim_snprintf((char *)IObuff + len, (size_t)(IOSIZE - len),
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3060 _("line %ld"), buf == curbuf ? curwin->w_cursor.lnum
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
3061 : (long)buflist_findlnum(buf));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 out_flush(); /* output one line at a time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 * Get file name and line number for file 'fnum'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3071 * Used by DoOneCmd() for translating '%' and '#'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 * Used by insert_reg() and cmdline_paste() for '#' register.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 * Return FAIL if not found, OK for success.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3076 buflist_name_nr(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3077 int fnum,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3078 char_u **fname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3079 linenr_T *lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 buf = buflist_findnr(fnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 if (buf == NULL || buf->b_fname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3087 *fname = buf->b_fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 *lnum = buflist_findlnum(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 * Set the file name for "buf"' to 'ffname', short file name to 'sfname'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 * The file name with the full path is also remembered, for when :cd is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 * Returns FAIL for failure (file name already in use by other buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 * OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3100 setfname(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3101 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3102 char_u *ffname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3103 char_u *sfname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3104 int message) /* give message when buffer already exists */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 {
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3106 buf_T *obuf = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 #ifdef UNIX
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3108 stat_T st;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3110
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 if (ffname == NULL || *ffname == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 /* Removing the name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 vim_free(buf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 vim_free(buf->b_sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 buf->b_ffname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 buf->b_sfname = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 st.st_dev = (dev_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 fname_expand(buf, &ffname, &sfname); /* will allocate ffname */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125 if (ffname == NULL) /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3126 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3128 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3129 * if the file name is already used in another buffer:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3130 * - if the buffer is loaded, fail
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3131 * - if the buffer is not loaded, delete it from the list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3132 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3133 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3134 if (mch_stat((char *)ffname, &st) < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3135 st.st_dev = (dev_T)-1;
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3136 #endif
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3137 if (!(buf->b_flags & BF_DUMMY))
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3138 #ifdef UNIX
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3139 obuf = buflist_findname_stat(ffname, &st);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3140 #else
42
c75153d791d0 updated for version 7.0026
vimboss
parents: 41
diff changeset
3141 obuf = buflist_findname(ffname);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3142 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3143 if (obuf != NULL && obuf != buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3145 if (obuf->b_ml.ml_mfp != NULL) /* it's loaded, fail */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3146 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3147 if (message)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3148 EMSG(_("E95: Buffer with this name already exists"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3149 vim_free(ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3150 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3151 }
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
3152 /* delete from the list */
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
3153 close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3154 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3155 sfname = vim_strsave(sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3156 if (ffname == NULL || sfname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3158 vim_free(sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3159 vim_free(ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3160 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3161 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3162 #ifdef USE_FNAME_CASE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3163 # ifdef USE_LONG_FNAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3164 if (USE_LONG_FNAME)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3165 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3166 fname_case(sfname, 0); /* set correct case for short file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3167 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3168 vim_free(buf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3169 vim_free(buf->b_sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3170 buf->b_ffname = ffname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3171 buf->b_sfname = sfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3172 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3173 buf->b_fname = buf->b_sfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3174 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3175 if (st.st_dev == (dev_T)-1)
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3176 buf->b_dev_valid = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3177 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3178 {
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3179 buf->b_dev_valid = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3180 buf->b_dev = st.st_dev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3181 buf->b_ino = st.st_ino;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3182 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3183 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3184
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3185 buf->b_shortname = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3187 buf_name_changed(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3188 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3191 /*
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3192 * Crude way of changing the name of a buffer. Use with care!
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3193 * The name should be relative to the current directory.
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3194 */
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3195 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3196 buf_set_name(int fnum, char_u *name)
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3197 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3198 buf_T *buf;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3199
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3200 buf = buflist_findnr(fnum);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3201 if (buf != NULL)
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3202 {
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3203 vim_free(buf->b_sfname);
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3204 vim_free(buf->b_ffname);
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
3205 buf->b_ffname = vim_strsave(name);
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
3206 buf->b_sfname = NULL;
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
3207 /* Allocate ffname and expand into full path. Also resolves .lnk
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
3208 * files on Win32. */
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
3209 fname_expand(buf, &buf->b_ffname, &buf->b_sfname);
41
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3210 buf->b_fname = buf->b_sfname;
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3211 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3212 }
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3213
f529edb9bab3 updated for version 7.0025
vimboss
parents: 40
diff changeset
3214 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3215 * Take care of what needs to be done when the name of buffer "buf" has
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3216 * changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3217 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3218 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3219 buf_name_changed(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3221 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3222 * If the file name changed, also change the name of the swapfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3223 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3224 if (buf->b_ml.ml_mfp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3225 ml_setname(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3226
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3227 if (curwin->w_buffer == buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3228 check_arg_idx(curwin); /* check file name for arg list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3229 #ifdef FEAT_TITLE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3230 maketitle(); /* set window title */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3231 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3232 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3233 status_redraw_all(); /* status lines need to be redrawn */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3234 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3235 fmarks_check_names(buf); /* check named file marks */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3236 ml_timestamp(buf); /* reset timestamp */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3237 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3239 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3240 * set alternate file name for current window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3241 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3242 * Used by do_one_cmd(), do_write() and do_ecmd().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3243 * Return the buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3244 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3245 buf_T *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3246 setaltfname(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3247 char_u *ffname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3248 char_u *sfname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3249 linenr_T lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3251 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3253 /* Create a buffer. 'buflisted' is not set if it's a new buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3254 buf = buflist_new(ffname, sfname, lnum, 0);
22
cc049b00ee70 updated for version 7.0014
vimboss
parents: 20
diff changeset
3255 if (buf != NULL && !cmdmod.keepalt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3256 curwin->w_alt_fnum = buf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3257 return buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3258 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3260 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3261 * Get alternate file name for current window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3262 * Return NULL if there isn't any, and give error message if requested.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3263 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3264 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3265 getaltfname(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3266 int errmsg) /* give error message */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3267 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3268 char_u *fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3269 linenr_T dummy;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3271 if (buflist_name_nr(0, &fname, &dummy) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3272 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3273 if (errmsg)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3274 EMSG(_(e_noalt));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3275 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3277 return fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3278 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3279
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3280 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3281 * Add a file name to the buflist and return its number.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3282 * Uses same flags as buflist_new(), except BLN_DUMMY.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3283 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3284 * used by qf_init(), main() and doarglist()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3285 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3286 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3287 buflist_add(char_u *fname, int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3288 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3289 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3291 buf = buflist_new(fname, NULL, (linenr_T)0, flags);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3292 if (buf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3293 return buf->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3294 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3295 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3297 #if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3298 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 * Adjust slashes in file names. Called after 'shellslash' was set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3302 buflist_slash_adjust(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 buf_T *bp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3305
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
3306 FOR_ALL_BUFFERS(bp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308 if (bp->b_ffname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 slash_adjust(bp->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310 if (bp->b_sfname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 slash_adjust(bp->b_sfname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3312 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3316 /*
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
3317 * Set alternate cursor position for the current buffer and window "win".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 * Also save the local window option values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3321 buflist_altfpos(win_T *win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 {
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
3323 buflist_setfpos(curbuf, win, win->w_cursor.lnum, win->w_cursor.col, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 * Return TRUE if 'ffname' is not the same file as current file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 * Fname must have a full path (expanded by mch_FullName()).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3331 otherfile(char_u *ffname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 return otherfile_buf(curbuf, ffname
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 , NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 );
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3341 otherfile_buf(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3342 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3343 char_u *ffname
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3344 #ifdef UNIX
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3345 , stat_T *stp
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3346 #endif
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3347 )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 /* no name is different */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 if (ffname == NULL || *ffname == NUL || buf->b_ffname == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 if (fnamecmp(ffname, buf->b_ffname) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 {
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3356 stat_T st;
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3357
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3358 /* If no stat_T given, get it now */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 if (stp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 {
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3361 if (!buf->b_dev_valid || mch_stat((char *)ffname, &st) < 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3362 st.st_dev = (dev_T)-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 stp = &st;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 /* Use dev/ino to check if the files are the same, even when the names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 * are different (possible with links). Still need to compare the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 * name above, for when the file doesn't exist yet.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 * Problem: The dev/ino changes when a file is deleted (and created
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 * again) and remains the same when renamed/moved. We don't want to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 * mch_stat() each buffer each time, that would be too slow. Get the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 * dev/ino again when they appear to match, but not when they appear
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 * to be different: Could skip a buffer when it's actually the same
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 * file. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 if (buf_same_ino(buf, stp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 buf_setino(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377 if (buf_same_ino(buf, stp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3381 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385 #if defined(UNIX) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387 * Set inode and device number for a buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388 * Must always be called when b_fname is changed!.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3391 buf_setino(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3392 {
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3393 stat_T st;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 if (buf->b_fname != NULL && mch_stat((char *)buf->b_fname, &st) >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 {
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3397 buf->b_dev_valid = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 buf->b_dev = st.st_dev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 buf->b_ino = st.st_ino;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 else
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3402 buf->b_dev_valid = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406 * Return TRUE if dev/ino in buffer "buf" matches with "stp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3409 buf_same_ino(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3410 buf_T *buf,
9387
f094d4085014 commit https://github.com/vim/vim/commit/8767f52fbfd4f053ce00a978227c95f1d7d323fe
Christian Brabandt <cb@256bit.org>
parents: 9228
diff changeset
3411 stat_T *stp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 {
1873
6c7719f94811 updated for version 7.2-170
vimboss
parents: 1869
diff changeset
3413 return (buf->b_dev_valid
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 && stp->st_dev == buf->b_dev
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 && stp->st_ino == buf->b_ino);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
3419 /*
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
3420 * Print info about the current buffer.
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
3421 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3423 fileinfo(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3424 int fullname, /* when non-zero print full path */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3425 int shorthelp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3426 int dont_truncate)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3427 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 char_u *name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 int n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 char_u *buffer;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
3432 size_t len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 buffer = alloc(IOSIZE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 if (buffer == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 if (fullname > 1) /* 2 CTRL-G: include buffer number */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 {
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3440 vim_snprintf((char *)buffer, IOSIZE, "buf %d: ", curbuf->b_fnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 p = buffer + STRLEN(buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 p = buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 *p++ = '"';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447 if (buf_spname(curbuf) != NULL)
3835
9963f7a9b41b updated for version 7.3.675
Bram Moolenaar <bram@vim.org>
parents: 3780
diff changeset
3448 vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 if (!fullname && curbuf->b_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 name = curbuf->b_fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 name = curbuf->b_ffname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 home_replace(shorthelp ? curbuf : NULL, name, p,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 (int)(IOSIZE - (p - buffer)), TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
3459 vim_snprintf_add((char *)buffer, IOSIZE, "\"%s%s%s%s%s%s",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 curbufIsChanged() ? (shortmess(SHM_MOD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 ? " [+]" : _(" [Modified]")) : " ",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 (curbuf->b_flags & BF_NOTEDITED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 && !bt_dontwrite(curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 ? _("[Not edited]") : "",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 (curbuf->b_flags & BF_NEW)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 && !bt_dontwrite(curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 ? _("[New file]") : "",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472 (curbuf->b_flags & BF_READERR) ? _("[Read errors]") : "",
4795
8360a59aa04b updated for version 7.3.1144
Bram Moolenaar <bram@vim.org>
parents: 4354
diff changeset
3473 curbuf->b_p_ro ? (shortmess(SHM_RO) ? _("[RO]")
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 : _("[readonly]")) : "",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 (curbufIsChanged() || (curbuf->b_flags & BF_WRITE_MASK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 || curbuf->b_p_ro) ?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 " " : "");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 /* With 32 bit longs and more than 21,474,836 lines multiplying by 100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 * causes an overflow, thus for large numbers divide instead. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 if (curwin->w_cursor.lnum > 1000000L)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 n = (int)(((long)curwin->w_cursor.lnum) /
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 ((long)curbuf->b_ml.ml_line_count / 100L));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 n = (int)(((long)curwin->w_cursor.lnum * 100L) /
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 (long)curbuf->b_ml.ml_line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 if (curbuf->b_ml.ml_flags & ML_EMPTY)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487 {
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
3488 vim_snprintf_add((char *)buffer, IOSIZE, "%s", _(no_lines_msg));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3489 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3490 #ifdef FEAT_CMDL_INFO
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 else if (p_ru)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3492 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3493 /* Current line and column are already on the screen -- webb */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 if (curbuf->b_ml.ml_line_count == 1)
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
3495 vim_snprintf_add((char *)buffer, IOSIZE, _("1 line --%d%%--"), n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 else
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
3497 vim_snprintf_add((char *)buffer, IOSIZE, _("%ld lines --%d%%--"),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 (long)curbuf->b_ml.ml_line_count, n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 {
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
3503 vim_snprintf_add((char *)buffer, IOSIZE,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 _("line %ld of %ld --%d%%-- col "),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 (long)curwin->w_cursor.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 (long)curbuf->b_ml.ml_line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 n);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 validate_virtcol();
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3509 len = STRLEN(buffer);
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3510 col_print(buffer + len, IOSIZE - len,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 (int)curwin->w_cursor.col + 1, (int)curwin->w_virtcol + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3514 (void)append_arg_number(curwin, buffer, IOSIZE, !shortmess(SHM_FILE));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 if (dont_truncate)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 /* Temporarily set msg_scroll to avoid the message being truncated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 * First call msg_start() to get the message in the right place. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 n = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 msg_scroll = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 msg(buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 msg_scroll = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 p = msg_trunc_attr(buffer, FALSE, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 if (restart_edit != 0 || (msg_scrolled && !need_wait_return))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 /* Need to repeat the message after redrawing when:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 * - When restart_edit is set (otherwise there will be a delay
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 * before redrawing).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 * - When the screen was scrolled but there is no wait-return
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 * prompt. */
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3535 set_keep_msg(p, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 vim_free(buffer);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3542 col_print(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3543 char_u *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3544 size_t buflen,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3545 int col,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3546 int vcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 if (col == vcol)
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3549 vim_snprintf((char *)buf, buflen, "%d", col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 else
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
3551 vim_snprintf((char *)buf, buflen, "%d-%d", col, vcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 #if defined(FEAT_TITLE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 * put file name in title bar of window and in icon title
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 static char_u *lasttitle = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 static char_u *lasticon = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3563 maketitle(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 char_u *t_str = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3567 char_u *i_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3568 char_u *i_str = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569 int maxlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3570 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 int mustset;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 char_u buf[IOSIZE];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 int off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 if (!redrawing())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3577 /* Postpone updating the title when 'lazyredraw' is set. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 need_maketitle = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 need_maketitle = FALSE;
2403
ce5a380d5144 Fix: when resetting both 'title' and 'icon' the title would be set after a
Bram Moolenaar <bram@vim.org>
parents: 2394
diff changeset
3583 if (!p_title && !p_icon && lasttitle == NULL && lasticon == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 if (p_title)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 if (p_titlelen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 maxlen = p_titlelen * Columns / 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 if (maxlen < 10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 maxlen = 10;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 t_str = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 if (*p_titlestring != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 #ifdef FEAT_STL_OPT
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3599 if (stl_syntax & STL_IN_TITLE)
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3600 {
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3601 int use_sandbox = FALSE;
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3602 int save_called_emsg = called_emsg;
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3603
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3604 # ifdef FEAT_EVAL
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3605 use_sandbox = was_set_insecurely((char_u *)"titlestring", 0);
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3606 # endif
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3607 called_emsg = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 build_stl_str_hl(curwin, t_str, sizeof(buf),
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3609 p_titlestring, use_sandbox,
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
3610 0, maxlen, NULL, NULL);
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3611 if (called_emsg)
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3612 set_string_option_direct((char_u *)"titlestring", -1,
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3613 (char_u *)"", OPT_FREE, SID_ERROR);
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3614 called_emsg |= save_called_emsg;
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3615 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 t_str = p_titlestring;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 /* format: "fname + (path) (1 of 2) - VIM" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3624 #define SPACE_FOR_FNAME (IOSIZE - 100)
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3625 #define SPACE_FOR_DIR (IOSIZE - 20)
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3626 #define SPACE_FOR_ARGNR (IOSIZE - 10) /* at least room for " - VIM" */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 if (curbuf->b_fname == NULL)
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3628 vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 p = transstr(gettail(curbuf->b_fname));
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3632 vim_strncpy(buf, p, SPACE_FOR_FNAME);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 vim_free(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 switch (bufIsChanged(curbuf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 + (curbuf->b_p_ro * 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 + (!curbuf->b_p_ma * 4))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3639 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3640 case 1: STRCAT(buf, " +"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 case 2: STRCAT(buf, " ="); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 case 3: STRCAT(buf, " =+"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 case 4:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 case 6: STRCAT(buf, " -"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 case 5:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 case 7: STRCAT(buf, " -+"); break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3649 if (curbuf->b_fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 /* Get path of file, replace home dir with ~ */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 off = (int)STRLEN(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 buf[off++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 buf[off++] = '(';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 home_replace(curbuf, curbuf->b_ffname,
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3656 buf + off, SPACE_FOR_DIR - off, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 /* avoid "c:/name" to be reduced to "c" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 if (isalpha(buf[off]) && buf[off + 1] == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 off += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 /* remove the file name */
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
3663 p = gettail_sep(buf + off);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 if (p == buf + off)
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3665 {
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3666 char *txt;
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3667
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3668 #ifdef FEAT_TERMINAL
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3669 if (curbuf->b_term != NULL)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3670 txt = term_job_running(curbuf)
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3671 ? _("running") : _("finished");
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3672 else
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3673 #endif
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3674 txt = _("help");
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3675
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3676 /* must be a help or terminal buffer */
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3677 vim_strncpy(buf + off, (char_u *)txt,
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3678 (size_t)(SPACE_FOR_DIR - off - 1));
11757
74abb6c84984 patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents: 11690
diff changeset
3679 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 *p = NUL;
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 36
diff changeset
3682
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3683 /* Translate unprintable chars and concatenate. Keep some
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3684 * room for the server name. When there is no room (very long
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3685 * file name) use (...). */
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3686 if (off < SPACE_FOR_DIR)
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3687 {
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3688 p = transstr(buf + off);
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3689 vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3690 vim_free(p);
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3691 }
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3692 else
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3693 {
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3694 vim_strncpy(buf + off, (char_u *)"...",
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3695 (size_t)(SPACE_FOR_ARGNR - off));
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3696 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 STRCAT(buf, ")");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699
3780
76c099d45772 updated for version 7.3.648
Bram Moolenaar <bram@vim.org>
parents: 3687
diff changeset
3700 append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 #if defined(FEAT_CLIENTSERVER)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3703 if (serverName != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705 STRCAT(buf, " - ");
2768
c5e47b752f07 updated for version 7.3.160
Bram Moolenaar <bram@vim.org>
parents: 2704
diff changeset
3706 vim_strcat(buf, serverName, IOSIZE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 STRCAT(buf, " - VIM");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 if (maxlen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 /* make it shorter by removing a bit in the middle */
3277
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3238
diff changeset
3715 if (vim_strsize(buf) > maxlen)
55cebc7e5de0 updated for version 7.3.407
Bram Moolenaar <bram@vim.org>
parents: 3238
diff changeset
3716 trunc_string(buf, buf, maxlen, IOSIZE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 mustset = ti_change(t_str, &lasttitle);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 if (p_icon)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 i_str = buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 if (*p_iconstring != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 #ifdef FEAT_STL_OPT
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3728 if (stl_syntax & STL_IN_ICON)
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3729 {
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3730 int use_sandbox = FALSE;
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3731 int save_called_emsg = called_emsg;
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3732
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3733 # ifdef FEAT_EVAL
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3734 use_sandbox = was_set_insecurely((char_u *)"iconstring", 0);
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3735 # endif
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3736 called_emsg = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 build_stl_str_hl(curwin, i_str, sizeof(buf),
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3738 p_iconstring, use_sandbox,
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
3739 0, 0, NULL, NULL);
771
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3740 if (called_emsg)
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3741 set_string_option_direct((char_u *)"iconstring", -1,
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3742 (char_u *)"", OPT_FREE, SID_ERROR);
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3743 called_emsg |= save_called_emsg;
c0f1b710ce07 updated for version 7.0226
vimboss
parents: 737
diff changeset
3744 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 i_str = p_iconstring;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 if (buf_spname(curbuf) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
3752 i_name = buf_spname(curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 else /* use file name only in icon */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 i_name = gettail(curbuf->b_ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 *i_str = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 /* Truncate name at 100 bytes. */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 825
diff changeset
3757 len = (int)STRLEN(i_name);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 if (len > 100)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 len -= 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 len += (*mb_tail_off)(i_name, i_name + len) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 i_name += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 STRCPY(i_str, i_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 trans_characters(i_str, IOSIZE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 mustset |= ti_change(i_str, &lasticon);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 if (mustset)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 resettitle();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 * Used for title and icon: Check if "str" differs from "*last". Set "*last"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 * from "str" if it does.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 * Return TRUE when "*last" changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3784 ti_change(char_u *str, char_u **last)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 if ((str == NULL) != (*last == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 || (str != NULL && *last != NULL && STRCMP(str, *last) != 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 vim_free(*last);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 if (str == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 *last = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 *last = vim_strsave(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 * Put current window title back (used after calling a shell)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3803 resettitle(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 mch_settitle(lasttitle, lasticon);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 }
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3807
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3808 # if defined(EXITFREE) || defined(PROTO)
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3809 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3810 free_titles(void)
358
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3811 {
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3812 vim_free(lasttitle);
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3813 vim_free(lasticon);
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3814 }
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3815 # endif
e111db373ca4 updated for version 7.0093
vimboss
parents: 309
diff changeset
3816
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3817 #endif /* FEAT_TITLE */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818
686
473847b050f8 updated for version 7.0207
vimboss
parents: 681
diff changeset
3819 #if defined(FEAT_STL_OPT) || defined(FEAT_GUI_TABLINE) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3820 /*
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3821 * Build a string from the status line items in "fmt".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 * Return length of string in screen cells.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 *
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3824 * Normally works for window "wp", except when working for 'tabline' then it
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3825 * is "curwin".
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
3826 *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 * Items are drawn interspersed with the text that surrounds it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 * Specials: %-<wid>(xxx%) => group, %= => middle marker, %< => truncation
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 * Item: %-<minwid>.<maxwid><itemch> All but <itemch> are optional
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3830 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 * If maxwidth is not zero, the string will be filled at any middle marker
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 * or truncated if too long, fillchar is used for all whitespace.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3833 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3835 build_stl_str_hl(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3836 win_T *wp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3837 char_u *out, /* buffer to write into != NameBuff */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3838 size_t outlen, /* length of out[] */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3839 char_u *fmt,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3840 int use_sandbox UNUSED, /* "fmt" was set insecurely, use sandbox */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3841 int fillchar,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3842 int maxwidth,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3843 struct stl_hlrec *hltab, /* return: HL attributes (can be NULL) */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
3844 struct stl_hlrec *tabtab) /* return: tab page nrs (can be NULL) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 char_u *t;
4333
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3849 int byteval;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 win_T *o_curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 buf_T *o_curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 int empty_line;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855 colnr_T virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 long l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 long n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858 int prevchar_isflag;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 int prevchar_isitem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 int itemisflag;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861 int fillable;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 long num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 int width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865 int itemcnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 int curitem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 int groupitem[STL_MAX_ITEM];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 int groupdepth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 struct stl_item
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 char_u *start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 int minwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873 int maxwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 enum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 Normal,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 Empty,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 Group,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 Middle,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880 Highlight,
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
3881 TabPage,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 Trunc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883 } type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 } item[STL_MAX_ITEM];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885 int minwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 int maxwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 int zeropad;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 char_u base;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 char_u opt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890 #define TMPLEN 70
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 char_u tmp[TMPLEN];
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3892 char_u *usefmt = fmt;
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
3893 struct stl_hlrec *sp;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3894
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3895 #ifdef FEAT_EVAL
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3896 /*
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3897 * When the format starts with "%!" then evaluate it as an expression and
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3898 * use the result as the actual format string.
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3899 */
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3900 if (fmt[0] == '%' && fmt[1] == '!')
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3901 {
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3902 usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3903 if (usefmt == NULL)
943
e70aad5761b5 updated for version 7.0-069
vimboss
parents: 934
diff changeset
3904 usefmt = fmt;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3905 }
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3906 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 if (fillchar == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909 fillchar = ' ';
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3910 #ifdef FEAT_MBYTE
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3911 /* Can't handle a multi-byte fill character yet. */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3912 else if (mb_char2len(fillchar) > 1)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3913 fillchar = '-';
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3914 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
3915
4333
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3916 /* Get line & check if empty (cursorpos will show "0-1"). Note that
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3917 * p will become invalid when getting another buffer line. */
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3918 p = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3919 empty_line = (*p == NUL);
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3920
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3921 /* Get the byte value now, in case we need it below. This is more
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3922 * efficient than making a copy of the line. */
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3923 if (wp->w_cursor.col > (colnr_T)STRLEN(p))
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3924 byteval = 0;
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3925 else
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3926 #ifdef FEAT_MBYTE
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3927 byteval = (*mb_ptr2char)(p + wp->w_cursor.col);
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3928 #else
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3929 byteval = p[wp->w_cursor.col];
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
3930 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 groupdepth = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 p = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 curitem = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 prevchar_isflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 prevchar_isitem = FALSE;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
3937 for (s = usefmt; *s; )
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 {
2704
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3939 if (curitem == STL_MAX_ITEM)
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3940 {
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3941 /* There are too many items. Add the error code to the statusline
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3942 * to give the user a hint about what went wrong. */
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3943 if (p + 6 < out + outlen)
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3944 {
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3945 mch_memmove(p, " E541", (size_t)5);
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3946 p += 5;
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3947 }
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3948 break;
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3949 }
a14db0b78c59 updated for version 7.3.121
Bram Moolenaar <bram@vim.org>
parents: 2694
diff changeset
3950
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 if (*s != NUL && *s != '%')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 prevchar_isflag = prevchar_isitem = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 * Handle up to the next '%' or the end.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 while (*s != NUL && *s != '%' && p + 1 < out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958 *p++ = *s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 if (*s == NUL || p + 1 >= out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3963 * Handle one '%' item.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 s++;
2694
fcea35e2a41f updated for version 7.3.112
Bram Moolenaar <bram@vim.org>
parents: 2620
diff changeset
3966 if (*s == NUL) /* ignore trailing % */
fcea35e2a41f updated for version 7.3.112
Bram Moolenaar <bram@vim.org>
parents: 2620
diff changeset
3967 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 if (*s == '%')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 if (p + 1 >= out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 *p++ = *s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 prevchar_isflag = prevchar_isitem = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 if (*s == STL_MIDDLEMARK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 if (groupdepth > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 item[curitem].type = Middle;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 item[curitem++].start = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 if (*s == STL_TRUNCMARK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 item[curitem].type = Trunc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 item[curitem++].start = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3992 if (*s == ')')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3994 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 if (groupdepth < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 groupdepth--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999 t = item[groupitem[groupdepth]].start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001 l = vim_strsize(t);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 if (curitem > groupitem[groupdepth] + 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 && item[groupitem[groupdepth]].minwid == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 /* remove group if all items are empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 for (n = groupitem[groupdepth] + 1; n < curitem; n++)
8441
768065c86a35 commit https://github.com/vim/vim/commit/af6e36ff16736106a1bc63bb4d01f51fdfeb29a2
Christian Brabandt <cb@256bit.org>
parents: 8216
diff changeset
4007 if (item[n].type == Normal || item[n].type == Highlight)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009 if (n == curitem)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 p = t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 l = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 if (l > item[groupitem[groupdepth]].maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4016 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4017 /* truncate, remove n bytes of text at the start */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4018 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4019 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4021 /* Find the first character that should be included. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4022 n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4023 while (l >= item[groupitem[groupdepth]].maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4024 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4025 l -= ptr2cells(t + n);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
4026 n += (*mb_ptr2len)(t + n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4027 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4028 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4029 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4030 #endif
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 825
diff changeset
4031 n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4032
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4033 *t = '<';
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4034 mch_memmove(t + 1, t + n, (size_t)(p - (t + n)));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4035 p = p - n + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4036 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4037 /* Fill up space left over by half a double-wide char. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4038 while (++l < item[groupitem[groupdepth]].minwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4039 *p++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4040 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4041
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4042 /* correct the start of the items for the truncation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4043 for (l = groupitem[groupdepth] + 1; l < curitem; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4045 item[l].start -= n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4046 if (item[l].start < t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4047 item[l].start = t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4048 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4049 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 else if (abs(item[groupitem[groupdepth]].minwid) > l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 /* fill */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 n = item[groupitem[groupdepth]].minwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4054 if (n < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4055 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4056 /* fill by appending characters */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4057 n = 0 - n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 while (l++ < n && p + 1 < out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 *p++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 /* fill by inserting characters */
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4064 mch_memmove(t + n - l, t, (size_t)(p - t));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 l = n - l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 if (p + l >= out + outlen)
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 825
diff changeset
4067 l = (long)((out + outlen) - p - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 p += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 for (n = groupitem[groupdepth] + 1; n < curitem; n++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 item[n].start += l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 for ( ; l > 0; l--)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 *t++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4073 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 minwid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 maxwid = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 zeropad = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080 l = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 if (*s == '0')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4082 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 zeropad = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086 if (*s == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089 l = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 if (VIM_ISDIGIT(*s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093 minwid = (int)getdigits(&s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 if (minwid < 0) /* overflow */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095 minwid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 }
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4097 if (*s == STL_USER_HL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 item[curitem].type = Highlight;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100 item[curitem].start = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 item[curitem].minwid = minwid > 9 ? 1 : minwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 curitem++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 }
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4106 if (*s == STL_TABPAGENR || *s == STL_TABCLOSENR)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4107 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4108 if (*s == STL_TABCLOSENR)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4109 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4110 if (minwid == 0)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4111 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4112 /* %X ends the close label, go back to the previously
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4113 * define tab label nr. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4114 for (n = curitem - 1; n >= 0; --n)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4115 if (item[n].type == TabPage && item[n].minwid >= 0)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4116 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4117 minwid = item[n].minwid;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4118 break;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4119 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4120 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4121 else
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4122 /* close nrs are stored as negative values */
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4123 minwid = - minwid;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4124 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4125 item[curitem].type = TabPage;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4126 item[curitem].start = p;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4127 item[curitem].minwid = minwid;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4128 s++;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4129 curitem++;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4130 continue;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4131 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 if (*s == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 if (VIM_ISDIGIT(*s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137 maxwid = (int)getdigits(&s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138 if (maxwid <= 0) /* overflow */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 maxwid = 50;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 minwid = (minwid > 50 ? 50 : minwid) * l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 if (*s == '(')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4145 groupitem[groupdepth++] = curitem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4146 item[curitem].type = Group;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4147 item[curitem].start = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4148 item[curitem].minwid = minwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4149 item[curitem].maxwid = maxwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4150 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4151 curitem++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4152 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154 if (vim_strchr(STL_ALL, *s) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 opt = *s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 /* OK - now for the real work */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 base = 'D';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 itemisflag = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 fillable = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 num = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166 str = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 switch (opt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 case STL_FILEPATH:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 case STL_FULLPATH:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 case STL_FILENAME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 fillable = FALSE; /* don't change ' ' to fillchar */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 if (buf_spname(wp->w_buffer) != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
4174 vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177 t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
667
9090f866cd57 updated for version 7.0197
vimboss
parents: 643
diff changeset
4178 : wp->w_buffer->b_fname;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 home_replace(wp->w_buffer, t, NameBuff, MAXPATHL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 trans_characters(NameBuff, MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 if (opt != STL_FILENAME)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 str = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 str = gettail(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 case STL_VIM_EXPR: /* '{' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 t = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 while (*s != '}' && *s != NUL && p + 1 < out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 *p++ = *s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 if (*s != '}') /* missing '}' or out of space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4194 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 *p = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4197 p = t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199 #ifdef FEAT_EVAL
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4200 vim_snprintf((char *)tmp, sizeof(tmp), "%d", curbuf->b_fnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 set_internal_string_var((char_u *)"actual_curbuf", tmp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203 o_curbuf = curbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 o_curwin = curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 curwin = wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 curbuf = wp->w_buffer;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207
675
51794dc170f7 updated for version 7.0202
vimboss
parents: 672
diff changeset
4208 str = eval_to_string_safe(p, &t, use_sandbox);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 curwin = o_curwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4211 curbuf = o_curbuf;
145
f310d2061525 updated for version 7.0046
vimboss
parents: 126
diff changeset
4212 do_unlet((char_u *)"g:actual_curbuf", TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4214 if (str != NULL && *str != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 if (*skipdigits(str) == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 num = atoi((char *)str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 vim_free(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 str = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 itemisflag = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 case STL_LINE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 num = (wp->w_buffer->b_ml.ml_flags & ML_EMPTY)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 ? 0L : (long)(wp->w_cursor.lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 case STL_NUMLINES:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 num = wp->w_buffer->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236 case STL_COLUMN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 num = !(State & INSERT) && empty_line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 ? 0 : (int)wp->w_cursor.col + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 case STL_VIRTCOL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 case STL_VIRTCOL_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 /* In list mode virtcol needs to be recomputed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 virtcol = wp->w_virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 if (wp->w_p_list && lcs_tab1 == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247 wp->w_p_list = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 getvcol(wp, &wp->w_cursor, NULL, &virtcol, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 wp->w_p_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 ++virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252 /* Don't display %V if it's the same as %c. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 if (opt == STL_VIRTCOL_ALT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 && (virtcol == (colnr_T)(!(State & INSERT) && empty_line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255 ? 0 : (int)wp->w_cursor.col + 1)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 num = (long)virtcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 case STL_PERCENTAGE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 num = (int)(((long)wp->w_cursor.lnum * 100L) /
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262 (long)wp->w_buffer->b_ml.ml_line_count);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4264
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 case STL_ALTPERCENT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 str = tmp;
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4267 get_rel_pos(wp, str, TMPLEN);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 case STL_ARGLISTSTAT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 fillable = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 tmp[0] = 0;
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4273 if (append_arg_number(wp, tmp, (int)sizeof(tmp), FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 str = tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277 case STL_KEYMAP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 fillable = FALSE;
9645
123d3c102035 commit https://github.com/vim/vim/commit/73ac0c4281a3606651604a3cbcc334bfb3859a87
Christian Brabandt <cb@256bit.org>
parents: 9515
diff changeset
4279 if (get_keymap_str(wp, (char_u *)"<%s>", tmp, TMPLEN))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 str = tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282 case STL_PAGENUM:
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 701
diff changeset
4283 #if defined(FEAT_PRINTER) || defined(FEAT_GUI_TABLINE)
686
473847b050f8 updated for version 7.0207
vimboss
parents: 681
diff changeset
4284 num = printer_page_num;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4285 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4286 num = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4288 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4289
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4290 case STL_BUFNO:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4291 num = wp->w_buffer->b_fnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294 case STL_OFFSET_X:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 base = 'X';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296 case STL_OFFSET:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 #ifdef FEAT_BYTEOFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298 l = ml_find_line_or_offset(wp->w_buffer, wp->w_cursor.lnum, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 num = (wp->w_buffer->b_ml.ml_flags & ML_EMPTY) || l < 0 ?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 0L : l + 1 + (!(State & INSERT) && empty_line ?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301 0 : (int)wp->w_cursor.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305 case STL_BYTEVAL_X:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 base = 'X';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 case STL_BYTEVAL:
4333
f39af3419570 updated for version 7.3.916
Bram Moolenaar <bram@vim.org>
parents: 4287
diff changeset
4308 num = byteval;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 if (num == NL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 num = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 else if (num == CAR && get_fileformat(wp->w_buffer) == EOL_MAC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312 num = NL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 case STL_ROFLAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4316 case STL_ROFLAG_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 if (wp->w_buffer->b_p_ro)
4795
8360a59aa04b updated for version 7.3.1144
Bram Moolenaar <bram@vim.org>
parents: 4354
diff changeset
4319 str = (char_u *)((opt == STL_ROFLAG_ALT) ? ",RO" : _("[RO]"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 case STL_HELPFLAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323 case STL_HELPFLAG_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325 if (wp->w_buffer->b_help)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 str = (char_u *)((opt == STL_HELPFLAG_ALT) ? ",HLP"
809
4f1b94b51e99 updated for version 7.0b02
vimboss
parents: 788
diff changeset
4327 : _("[Help]"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331 case STL_FILETYPE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 if (*wp->w_buffer->b_p_ft != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 {
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4335 vim_snprintf((char *)tmp, sizeof(tmp), "[%s]",
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4336 wp->w_buffer->b_p_ft);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 str = tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 case STL_FILETYPE_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 if (*wp->w_buffer->b_p_ft != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 && STRLEN(wp->w_buffer->b_p_ft) < TMPLEN - 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 {
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4346 vim_snprintf((char *)tmp, sizeof(tmp), ",%s",
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4347 wp->w_buffer->b_p_ft);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 for (t = tmp; *t != 0; t++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 *t = TOUPPER_LOC(*t);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 str = tmp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4352 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4356 case STL_PREVIEWFLAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4357 case STL_PREVIEWFLAG_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 if (wp->w_p_pvw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 str = (char_u *)((opt == STL_PREVIEWFLAG_ALT) ? ",PRV"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 : _("[Preview]"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 break;
2411
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4363
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4364 case STL_QUICKFIX:
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4365 if (bt_quickfix(wp->w_buffer))
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4366 str = (char_u *)(wp->w_llist_ref
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4367 ? _(msg_loclist)
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4368 : _(msg_qflist));
68e394361ca3 Add "q" item for 'statusline'. Add w:quickfix_title. (Lech Lorens)
Bram Moolenaar <bram@vim.org>
parents: 2403
diff changeset
4369 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 case STL_MODIFIED:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 case STL_MODIFIED_ALT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 itemisflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375 switch ((opt == STL_MODIFIED_ALT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4376 + bufIsChanged(wp->w_buffer) * 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 + (!wp->w_buffer->b_p_ma) * 4)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 case 2: str = (char_u *)"[+]"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 case 3: str = (char_u *)",+"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 case 4: str = (char_u *)"[-]"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 case 5: str = (char_u *)",-"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 case 6: str = (char_u *)"[+-]"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 case 7: str = (char_u *)",+-"; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386 break;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4387
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4388 case STL_HIGHLIGHT:
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4389 t = s;
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4390 while (*s != '#' && *s != NUL)
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4391 ++s;
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4392 if (*s == '#')
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4393 {
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4394 item[curitem].type = Highlight;
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4395 item[curitem].start = p;
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 825
diff changeset
4396 item[curitem].minwid = -syn_namen2id(t, (int)(s - t));
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4397 curitem++;
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4398 }
5407
7b760cda2bbf updated for version 7.4.054
Bram Moolenaar <bram@vim.org>
parents: 5302
diff changeset
4399 if (*s != NUL)
7b760cda2bbf updated for version 7.4.054
Bram Moolenaar <bram@vim.org>
parents: 5302
diff changeset
4400 ++s;
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4401 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 item[curitem].start = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 item[curitem].type = Normal;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 if (str != NULL && *str)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 t = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 if (itemisflag)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 if ((t[0] && t[1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 && ((!prevchar_isitem && *t == ',')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 || (prevchar_isflag && *t == ' ')))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 t++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 prevchar_isflag = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417 l = vim_strsize(t);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418 if (l > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 prevchar_isitem = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 if (l > maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422 while (l >= maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4426 l -= ptr2cells(t);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
4427 t += (*mb_ptr2len)(t);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 l -= byte2cells(*t++);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 if (p + 1 >= out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4433 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4434 *p++ = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4435 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4436 if (minwid > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4437 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4438 for (; l < minwid && p + 1 < out + outlen; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4440 /* Don't put a "-" in front of a digit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4441 if (l + 1 == minwid && fillchar == '-' && VIM_ISDIGIT(*t))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4442 *p++ = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4443 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 *p++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4445 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 minwid = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4448 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4449 minwid *= -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4450 while (*t && p + 1 < out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4452 *p++ = *t++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4453 /* Change a space by fillchar, unless fillchar is '-' and a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4454 * digit follows. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4455 if (fillable && p[-1] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4456 && (!VIM_ISDIGIT(*t) || fillchar != '-'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4457 p[-1] = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4459 for (; l < minwid && p + 1 < out + outlen; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4460 *p++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4461 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4462 else if (num >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4463 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4464 int nbase = (base == 'D' ? 10 : (base == 'O' ? 8 : 16));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4465 char_u nstr[20];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4466
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4467 if (p + 20 >= out + outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4468 break; /* not sufficient space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 prevchar_isitem = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4470 t = nstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4471 if (opt == STL_VIRTCOL_ALT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 *t++ = '-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474 minwid--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 *t++ = '%';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477 if (zeropad)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 *t++ = '0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4479 *t++ = '*';
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4480 *t++ = nbase == 16 ? base : (char_u)(nbase == 8 ? 'o' : 'd');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4481 *t = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4482
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4483 for (n = num, l = 1; n >= nbase; n /= nbase)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4484 l++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 if (opt == STL_VIRTCOL_ALT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4486 l++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4487 if (l > maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4488 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4489 l += 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 n = l - maxwid;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 while (l-- > maxwid)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492 num /= nbase;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 *t++ = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494 *t++ = '%';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 *t = t[-3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4496 *++t = 0;
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4497 vim_snprintf((char *)p, outlen - (p - out), (char *)nstr,
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4498 0, num, n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4499 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 else
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4501 vim_snprintf((char *)p, outlen - (p - out), (char *)nstr,
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
4502 minwid, num);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 p += STRLEN(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4504 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4505 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 item[curitem].type = Empty;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508 if (opt == STL_VIM_EXPR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 vim_free(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511 if (num >= 0 || (!itemisflag && str && *str))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 prevchar_isflag = FALSE; /* Item not NULL, but not a flag */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 curitem++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 *p = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4516 itemcnt = curitem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517
678
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4518 #ifdef FEAT_EVAL
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4519 if (usefmt != fmt)
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4520 vim_free(usefmt);
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4521 #endif
93a1bf1cb633 updated for version 7.0203
vimboss
parents: 675
diff changeset
4522
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4523 width = vim_strsize(out);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524 if (maxwidth > 0 && width > maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 {
1736
fe52f9888eaa updated for version 7.2-034
vimboss
parents: 1710
diff changeset
4526 /* Result is too long, must truncate somewhere. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 l = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4528 if (itemcnt == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 s = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4531 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4532 for ( ; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4533 if (item[l].type == Trunc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4535 /* Truncate at %< item. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4536 s = item[l].start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4537 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4539 if (l == itemcnt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4540 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4541 /* No %< item, truncate first item. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4542 s = item[0].start;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4543 l = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4544 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4545 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4546
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4547 if (width - vim_strsize(s) >= maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4548 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4549 /* Truncation mark is beyond max length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4550 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4551 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4552 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4553 s = out;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4554 width = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4555 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4556 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4557 width += ptr2cells(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4558 if (width >= maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4559 break;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
4560 s += (*mb_ptr2len)(s);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562 /* Fill up for half a double-wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563 while (++width < maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4564 *s++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4567 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4568 s = out + maxwidth - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 for (l = 0; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570 if (item[l].start > s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4571 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 itemcnt = l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 *s++ = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 *s = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4576 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4577 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4578 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4579 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4580 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581 n = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 while (width >= maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4583 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584 width -= ptr2cells(s + n);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 446
diff changeset
4585 n += (*mb_ptr2len)(s + n);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590 n = width - maxwidth + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4591 p = s + n;
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
4592 STRMOVE(s + 1, p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4593 *s = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595 /* Fill up for half a double-wide character. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 while (++width < maxwidth)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4598 s = s + STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4599 *s++ = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 *s = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4603 --n; /* count the '<' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4604 for (; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4605 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4606 if (item[l].start - n >= s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4607 item[l].start -= n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4608 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 item[l].start = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4610 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612 width = maxwidth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4614 else if (width < maxwidth && STRLEN(out) + maxwidth - width + 1 < outlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4615 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4616 /* Apply STL_MIDDLE if any */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617 for (l = 0; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4618 if (item[l].type == Middle)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4620 if (l < itemcnt)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4622 p = item[l].start + maxwidth - width;
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
4623 STRMOVE(p, item[l].start);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4624 for (s = item[l].start; s < p; s++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4625 *s = fillchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4626 for (l++; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4627 item[l].start += maxwidth - width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4628 width = maxwidth;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4629 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4631
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4632 /* Store the info about highlighting. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4633 if (hltab != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4634 {
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4635 sp = hltab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4636 for (l = 0; l < itemcnt; l++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 if (item[l].type == Highlight)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 {
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4640 sp->start = item[l].start;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4641 sp->userhl = item[l].minwid;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4642 sp++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4643 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4644 }
681
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4645 sp->start = NULL;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4646 sp->userhl = 0;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4647 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4648
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4649 /* Store the info about tab pages labels. */
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4650 if (tabtab != NULL)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4651 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4652 sp = tabtab;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4653 for (l = 0; l < itemcnt; l++)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4654 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4655 if (item[l].type == TabPage)
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4656 {
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4657 sp->start = item[l].start;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4658 sp->userhl = item[l].minwid;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4659 sp++;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4660 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4661 }
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4662 sp->start = NULL;
9364d114ed8d updated for version 7.0204
vimboss
parents: 678
diff changeset
4663 sp->userhl = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4664 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4665
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4666 return width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4668 #endif /* FEAT_STL_OPT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4669
686
473847b050f8 updated for version 7.0207
vimboss
parents: 681
diff changeset
4670 #if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \
473847b050f8 updated for version 7.0207
vimboss
parents: 681
diff changeset
4671 || defined(FEAT_GUI_TABLINE) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4672 /*
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4673 * Get relative cursor position in window into "buf[buflen]", in the form 99%,
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4674 * using "Top", "Bot" or "All" when appropriate.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4677 get_rel_pos(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4678 win_T *wp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4679 char_u *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4680 int buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4682 long above; /* number of lines above window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4683 long below; /* number of lines below window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684
6466
b5df99582638 updated for version 7.4.562
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
4685 if (buflen < 3) /* need at least 3 chars for writing */
b5df99582638 updated for version 7.4.562
Bram Moolenaar <bram@vim.org>
parents: 6375
diff changeset
4686 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 above = wp->w_topline - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4688 #ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4689 above += diff_check_fill(wp, wp->w_topline) - wp->w_topfill;
6975
7b5f9313f40b patch 7.4.805
Bram Moolenaar <bram@vim.org>
parents: 6945
diff changeset
4690 if (wp->w_topline == 1 && wp->w_topfill >= 1)
7b5f9313f40b patch 7.4.805
Bram Moolenaar <bram@vim.org>
parents: 6945
diff changeset
4691 above = 0; /* All buffer lines are displayed and there is an
7b5f9313f40b patch 7.4.805
Bram Moolenaar <bram@vim.org>
parents: 6945
diff changeset
4692 * indication of filler lines, that can be considered
7b5f9313f40b patch 7.4.805
Bram Moolenaar <bram@vim.org>
parents: 6945
diff changeset
4693 * seeing all lines. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 below = wp->w_buffer->b_ml.ml_line_count - wp->w_botline + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696 if (below <= 0)
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4697 vim_strncpy(buf, (char_u *)(above == 0 ? _("All") : _("Bot")),
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4698 (size_t)(buflen - 1));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699 else if (above <= 0)
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4700 vim_strncpy(buf, (char_u *)_("Top"), (size_t)(buflen - 1));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701 else
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4702 vim_snprintf((char *)buf, (size_t)buflen, "%2d%%", above > 1000000L
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4703 ? (int)(above / ((above + below) / 100L))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4704 : (int)(above * 100L / (above + below)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4706 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 /*
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4709 * Append (file 2 of 8) to "buf[buflen]", if editing more than one file.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 * Return TRUE if it was appended.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 */
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4712 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4713 append_arg_number(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4714 win_T *wp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4715 char_u *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4716 int buflen,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4717 int add_file) /* Add "file" before the arg number */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4718 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 if (ARGCOUNT <= 1) /* nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4724 p = buf + STRLEN(buf); /* go to the end of the buffer */
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4725 if (p - buf + 35 >= buflen) /* getting too long */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4726 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4727 *p++ = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4728 *p++ = '(';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4729 if (add_file)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4731 STRCPY(p, "file ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4732 p += 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4733 }
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4734 vim_snprintf((char *)p, (size_t)(buflen - (p - buf)),
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
4735 wp->w_arg_idx_invalid ? "(%d) of %d)"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4736 : "%d of %d)", wp->w_arg_idx + 1, ARGCOUNT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4737 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4739
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4740 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4741 * If fname is not a full path, make it a full path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4742 * Returns pointer to allocated memory (NULL for failure).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4743 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4745 fix_fname(char_u *fname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 * Force expanding the path always for Unix, because symbolic links may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 * mess up the full path name, even though it starts with a '/'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 * Also expand when there is ".." in the file name, try to remove it,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 * because "c:/src/../README" is equal to "c:/README".
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4752 * Similarly "c:/src//file" is equal to "c:/src/file".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753 * For MS-Windows also expand names like "longna~1" to "longname".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4754 */
1082
342d2b3a072a updated for version 7.0-208
vimboss
parents: 1045
diff changeset
4755 #ifdef UNIX
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4756 return FullName_save(fname, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4757 #else
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4758 if (!vim_isAbsName(fname)
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4759 || strstr((char *)fname, "..") != NULL
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4760 || strstr((char *)fname, "//") != NULL
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4761 # ifdef BACKSLASH_IN_FILENAME
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4762 || strstr((char *)fname, "\\\\") != NULL
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4763 # endif
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 7817
diff changeset
4764 # if defined(MSWIN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4765 || vim_strchr(fname, '~') != NULL
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4766 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4767 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4768 return FullName_save(fname, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4769
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4770 fname = vim_strsave(fname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4771
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4772 # ifdef USE_FNAME_CASE
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4773 # ifdef USE_LONG_FNAME
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4774 if (USE_LONG_FNAME)
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4775 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4777 if (fname != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 fname_case(fname, 0); /* set correct case for file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4779 }
1420
b63fe7400eb3 updated for version 7.1-135
vimboss
parents: 1411
diff changeset
4780 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4781
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4782 return fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4783 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4784 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4785
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4786 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4787 * Make "ffname" a full file name, set "sfname" to "ffname" if not NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4788 * "ffname" becomes a pointer to allocated memory (or NULL).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4789 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4790 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4791 fname_expand(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4792 buf_T *buf UNUSED,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4793 char_u **ffname,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4794 char_u **sfname)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4796 if (*ffname == NULL) /* if no file name given, nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4797 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4798 if (*sfname == NULL) /* if no short file name given, use ffname */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4799 *sfname = *ffname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4800 *ffname = fix_fname(*ffname); /* expand to full path */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 #ifdef FEAT_SHORTCUT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 if (!buf->b_p_bin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804 {
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
4805 char_u *rfname;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 /* If the file name is a shortcut file, use the file it links to. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4808 rfname = mch_resolve_shortcut(*ffname);
844
d3bbb5dd3913 updated for version 7.0f02
vimboss
parents: 835
diff changeset
4809 if (rfname != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4810 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4811 vim_free(*ffname);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812 *ffname = rfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 *sfname = rfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4819 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4820 * Get the file name for an argument list entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4821 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4822 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4823 alist_name(aentry_T *aep)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 buf_T *bp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4827 /* Use the name from the associated buffer if it exists. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 bp = buflist_findnr(aep->ae_fnum);
1036
20308f30826d updated for version 7.0-162
vimboss
parents: 1020
diff changeset
4829 if (bp == NULL || bp->b_fname == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 return aep->ae_fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831 return bp->b_fname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4832 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 #if defined(FEAT_WINDOWS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 * do_arg_all(): Open up to 'count' windows, one for each argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4838 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4839 do_arg_all(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4840 int count,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4841 int forceit, /* hide buffers in current windows */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
4842 int keep_tabs) /* keep current tabs, for ":tab drop file" */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 win_T *wp, *wpnext;
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4846 char_u *opened; /* Array of weight for which args are open:
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4847 * 0: not opened
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4848 * 1: opened in other tab
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4849 * 2: opened in curtab
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4850 * 3: opened in curtab and curwin
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4851 */
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1410
diff changeset
4852 int opened_len; /* length of opened[] */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 int use_firstwin = FALSE; /* use first window for arglist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854 int split_ret = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4855 int p_ea_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 alist_T *alist; /* argument list to be used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4857 buf_T *buf;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4858 tabpage_T *tpnext;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4859 int had_tab = cmdmod.tab;
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4860 win_T *old_curwin, *last_curwin;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4861 tabpage_T *old_curtab, *last_curtab;
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4862 win_T *new_curwin = NULL;
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4863 tabpage_T *new_curtab = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4865 if (ARGCOUNT <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4866 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4867 /* Don't give an error message. We don't want it when the ":all"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4868 * command is in the .vimrc. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4869 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4870 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4871 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4872
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4873 opened_len = ARGCOUNT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4874 opened = alloc_clear((unsigned)opened_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4875 if (opened == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4876 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4877
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4878 /* Autocommands may do anything to the argument list. Make sure it's not
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4879 * freed while we are working here by "locking" it. We still have to
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4880 * watch out for its size to be changed. */
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4881 alist = curwin->w_alist;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4882 ++alist->al_refcount;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4883
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4884 old_curwin = curwin;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4885 old_curtab = curtab;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4886
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8560
diff changeset
4887 # ifdef FEAT_GUI
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4888 need_mouse_correct = TRUE;
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8560
diff changeset
4889 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 * Try closing all windows that are not in the argument list.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893 * Also close windows that are not full width;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4894 * When 'hidden' or "forceit" set the buffer becomes hidden.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4895 * Windows that have a changed buffer and can't be hidden won't be closed.
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4896 * When the ":tab" modifier was used do this for all tab pages.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4897 */
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4898 if (had_tab > 0)
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
4899 goto_tabpage_tp(first_tabpage, TRUE, TRUE);
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4900 for (;;)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901 {
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4902 tpnext = curtab->tp_next;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4903 for (wp = firstwin; wp != NULL; wp = wpnext)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 {
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4905 wpnext = wp->w_next;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4906 buf = wp->w_buffer;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4907 if (buf->b_ffname == NULL
10432
262f5bc3d38e commit https://github.com/vim/vim/commit/5a030a540f4157d5c9905e3564282c92b4dcec9a
Christian Brabandt <cb@256bit.org>
parents: 10357
diff changeset
4908 || (!keep_tabs && (buf->b_nwindows > 1
262f5bc3d38e commit https://github.com/vim/vim/commit/5a030a540f4157d5c9905e3564282c92b4dcec9a
Christian Brabandt <cb@256bit.org>
parents: 10357
diff changeset
4909 || wp->w_width != Columns)))
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4910 i = opened_len;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4911 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 {
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4913 /* check if the buffer in this window is in the arglist */
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4914 for (i = 0; i < opened_len; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 {
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4916 if (i < alist->al_ga.ga_len
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4917 && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4918 || fullpathcmp(alist_name(&AARGLIST(alist)[i]),
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4919 buf->b_ffname, TRUE) & FPC_SAME))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4920 {
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4921 int weight = 1;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4922
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4923 if (old_curtab == curtab)
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4924 {
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4925 ++weight;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4926 if (old_curwin == wp)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4927 ++weight;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4928 }
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4929
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4930 if (weight > (int)opened[i])
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4931 {
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4932 opened[i] = (char_u)weight;
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4933 if (i == 0)
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4934 {
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4935 if (new_curwin != NULL)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4936 new_curwin->w_arg_idx = opened_len;
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4937 new_curwin = wp;
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4938 new_curtab = curtab;
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4939 }
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4940 }
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4941 else if (keep_tabs)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4942 i = opened_len;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4943
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4944 if (wp->w_alist != alist)
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4945 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4946 /* Use the current argument list for all windows
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4947 * containing a file from it. */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4948 alist_unlink(wp->w_alist);
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4949 wp->w_alist = alist;
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4950 ++wp->w_alist->al_refcount;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4951 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4952 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4954 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4955 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4956 wp->w_arg_idx = i;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4957
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4958 if (i == opened_len && !keep_tabs)/* close this window */
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4959 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4960 if (P_HID(buf) || forceit || buf->b_nwindows > 1
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4961 || !bufIsChanged(buf))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4962 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4963 /* If the buffer was changed, and we would like to hide it,
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4964 * try autowriting. */
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4965 if (!P_HID(buf) && buf->b_nwindows <= 1
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4966 && bufIsChanged(buf))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4967 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4968 #ifdef FEAT_AUTOCMD
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4969 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4970
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4971 set_bufref(&bufref, buf);
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4972 #endif
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4973 (void)autowrite(buf, FALSE);
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4974 #ifdef FEAT_AUTOCMD
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4975 /* check if autocommands removed the window */
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
4976 if (!win_valid(wp) || !bufref_valid(&bufref))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4977 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4978 wpnext = firstwin; /* start all over... */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4979 continue;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4980 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4981 #endif
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4982 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4983 #ifdef FEAT_WINDOWS
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
4984 /* don't close last window */
10349
cf988222b150 commit https://github.com/vim/vim/commit/a1f4cb93ba50ea9e40cd4b1f5592b8a6d1398660
Christian Brabandt <cb@256bit.org>
parents: 10320
diff changeset
4985 if (ONE_WINDOW
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
4986 && (first_tabpage->tp_next == NULL || !had_tab))
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4987 #endif
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4988 use_firstwin = TRUE;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4989 #ifdef FEAT_WINDOWS
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4990 else
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4991 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4992 win_close(wp, !P_HID(buf) && !bufIsChanged(buf));
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4993 # ifdef FEAT_AUTOCMD
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4994 /* check if autocommands removed the next window */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4995 if (!win_valid(wpnext))
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4996 wpnext = firstwin; /* start all over... */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4997 # endif
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4998 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
4999 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5003
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5004 /* Without the ":tab" modifier only do the current tab page. */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5005 if (had_tab == 0 || tpnext == NULL)
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5006 break;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5007
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 # ifdef FEAT_AUTOCMD
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5009 /* check if autocommands removed the next tab page */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5010 if (!valid_tabpage(tpnext))
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5011 tpnext = first_tabpage; /* start all over...*/
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5012 # endif
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
5013 goto_tabpage_tp(tpnext, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5014 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5016 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5017 * Open a window for files in the argument list that don't have one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5018 * ARGCOUNT may change while doing this, because of autocommands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5019 */
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5020 if (count > opened_len || count <= 0)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5021 count = opened_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5022
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5023 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5024 /* Don't execute Win/Buf Enter/Leave autocommands here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5025 ++autocmd_no_enter;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5026 ++autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5027 #endif
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5028 last_curwin = curwin;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5029 last_curtab = curtab;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5030 win_enter(lastwin, FALSE);
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5031 #ifdef FEAT_WINDOWS
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5032 /* ":drop all" should re-use an empty window to avoid "--remote-tab"
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5033 * leaving an empty tab page when executed locally. */
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11063
diff changeset
5034 if (keep_tabs && BUFEMPTY() && curbuf->b_nwindows == 1
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5035 && curbuf->b_ffname == NULL && !curbuf->b_changed)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5036 use_firstwin = TRUE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5037 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 815
diff changeset
5038
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5039 for (i = 0; i < count && i < opened_len && !got_int; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5040 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5041 if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5042 arg_had_last = TRUE;
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5043 if (opened[i] > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5045 /* Move the already present window to below the current window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5046 if (curwin->w_arg_idx != i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5047 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5048 for (wpnext = firstwin; wpnext != NULL; wpnext = wpnext->w_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5049 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5050 if (wpnext->w_arg_idx == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5051 {
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5052 if (keep_tabs)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5053 {
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5054 new_curwin = wpnext;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5055 new_curtab = curtab;
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5056 }
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5057 else
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5058 win_move_after(wpnext, curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5059 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5061 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5063 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5064 else if (split_ret == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5065 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5066 if (!use_firstwin) /* split current window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5068 p_ea_save = p_ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5069 p_ea = TRUE; /* use space from all windows */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5070 split_ret = win_split(0, WSP_ROOM | WSP_BELOW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5071 p_ea = p_ea_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5072 if (split_ret == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5073 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5075 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5076 else /* first window: do autocmd for leaving this buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5077 --autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5078 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5079
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5080 /*
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5081 * edit file "i"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5082 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5083 curwin->w_arg_idx = i;
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5084 if (i == 0)
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5085 {
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5086 new_curwin = curwin;
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5087 new_curtab = curtab;
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5088 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5089 (void)do_ecmd(0, alist_name(&AARGLIST(alist)[i]), NULL, NULL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5090 ECMD_ONE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5091 ((P_HID(curwin->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5092 || bufIsChanged(curwin->w_buffer)) ? ECMD_HIDE : 0)
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1736
diff changeset
5093 + ECMD_OLDBUF, curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5094 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5095 if (use_firstwin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5096 ++autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5097 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5098 use_firstwin = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5099 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5100 ui_breakcheck();
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5101
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5102 /* When ":tab" was used open a new tab for a new window repeatedly. */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5103 if (had_tab > 0 && tabpage_index(NULL) <= p_tpm)
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5104 cmdmod.tab = 9999;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5105 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5106
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5107 /* Remove the "lock" on the argument list. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5108 alist_unlink(alist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5110 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5111 --autocmd_no_enter;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5112 #endif
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5113 /* restore last referenced tabpage's curwin */
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5114 if (last_curtab != new_curtab)
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5115 {
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5116 if (valid_tabpage(last_curtab))
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
5117 goto_tabpage_tp(last_curtab, TRUE, TRUE);
3380
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5118 if (win_valid(last_curwin))
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5119 win_enter(last_curwin, FALSE);
07fd030f89be updated for version 7.3.456
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
5120 }
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5121 /* to window with first arg */
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5122 if (valid_tabpage(new_curtab))
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
5123 goto_tabpage_tp(new_curtab, TRUE, TRUE);
726
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5124 if (win_valid(new_curwin))
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5125 win_enter(new_curwin, FALSE);
d0d7131a797e updated for version 7.0221
vimboss
parents: 717
diff changeset
5126
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5127 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5128 --autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5129 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5130 vim_free(opened);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5131 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5133 # if defined(FEAT_LISTCMDS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5134 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5135 * Open a window for a number of buffers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5136 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5137 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5138 ex_buffer_all(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5140 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5141 win_T *wp, *wpnext;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 int split_ret = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 int p_ea_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5144 int open_wins = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5145 int r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146 int count; /* Maximum number of windows to open. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5147 int all; /* When TRUE also load inactive buffers. */
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5148 #ifdef FEAT_WINDOWS
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5149 int had_tab = cmdmod.tab;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5150 tabpage_T *tpnext;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5151 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5153 if (eap->addr_count == 0) /* make as many windows as possible */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5154 count = 9999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5155 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5156 count = eap->line2; /* make as many windows as specified */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5157 if (eap->cmdidx == CMD_unhide || eap->cmdidx == CMD_sunhide)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5158 all = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5159 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5160 all = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5161
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5162 setpcmark();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5163
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5164 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5165 need_mouse_correct = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5166 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5168 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5169 * Close superfluous windows (two windows for the same buffer).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5170 * Also close windows that are not full-width.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171 */
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5172 #ifdef FEAT_WINDOWS
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5173 if (had_tab > 0)
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
5174 goto_tabpage_tp(first_tabpage, TRUE, TRUE);
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5175 for (;;)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5176 {
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5177 #endif
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5178 tpnext = curtab->tp_next;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5179 for (wp = firstwin; wp != NULL; wp = wpnext)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180 {
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5181 wpnext = wp->w_next;
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 701
diff changeset
5182 if ((wp->w_buffer->b_nwindows > 1
8643
24b43dd167eb commit https://github.com/vim/vim/commit/44a2f923c00f1384c9ecde12fb5b4711bc20702e
Christian Brabandt <cb@256bit.org>
parents: 8560
diff changeset
5183 #ifdef FEAT_WINDOWS
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5184 || ((cmdmod.split & WSP_VERT)
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5185 ? wp->w_height + wp->w_status_height < Rows - p_ch
706
ef3b59af4207 updated for version 7.0213
vimboss
parents: 701
diff changeset
5186 - tabline_height()
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5187 : wp->w_width != Columns)
701
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5188 || (had_tab > 0 && wp != firstwin)
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5189 #endif
10357
59d01e335858 commit https://github.com/vim/vim/commit/459ca563128f2edb7e3bb190090bbb755a56dd55
Christian Brabandt <cb@256bit.org>
parents: 10349
diff changeset
5190 ) && !ONE_WINDOW
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
5191 #ifdef FEAT_AUTOCMD
10106
58e6dd1d8be3 commit https://github.com/vim/vim/commit/e0ab94e7123ca7855f45919114d948ef2bc1e8c3
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
5192 && !(wp->w_closing || wp->w_buffer->b_locked > 0)
3570
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
5193 #endif
e7ff3251dfa1 updated for version 7.3.545
Bram Moolenaar <bram@vim.org>
parents: 3411
diff changeset
5194 )
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5195 {
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5196 win_close(wp, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5197 #ifdef FEAT_AUTOCMD
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5198 wpnext = firstwin; /* just in case an autocommand does
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5199 something strange with windows */
701
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5200 tpnext = first_tabpage; /* start all over...*/
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5201 open_wins = 0;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5202 #endif
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5203 }
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5204 else
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5205 ++open_wins;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5206 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5207
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5208 #ifdef FEAT_WINDOWS
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5209 /* Without the ":tab" modifier only do the current tab page. */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5210 if (had_tab == 0 || tpnext == NULL)
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5211 break;
4354
c80838526eeb updated for version 7.3.926
Bram Moolenaar <bram@vim.org>
parents: 4352
diff changeset
5212 goto_tabpage_tp(tpnext, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5213 }
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5214 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5215
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5216 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5217 * Go through the buffer list. When a buffer doesn't have a window yet,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5218 * open one. Otherwise move the window to the right position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5219 * Watch out for autocommands that delete buffers or windows!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5221 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5222 /* Don't execute Win/Buf Enter/Leave autocommands here. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5223 ++autocmd_no_enter;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5224 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5225 win_enter(lastwin, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227 ++autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5228 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5229 for (buf = firstbuf; buf != NULL && open_wins < count; buf = buf->b_next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5231 /* Check if this buffer needs a window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5232 if ((!all && buf->b_ml.ml_mfp == NULL) || !buf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234
701
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5235 #ifdef FEAT_WINDOWS
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5236 if (had_tab != 0)
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5237 {
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5238 /* With the ":tab" modifier don't move the window. */
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5239 if (buf->b_nwindows > 0)
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5240 wp = lastwin; /* buffer has a window, skip it */
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5241 else
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5242 wp = NULL;
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5243 }
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5244 else
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5245 #endif
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5246 {
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5247 /* Check if this buffer already has a window */
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
5248 FOR_ALL_WINDOWS(wp)
701
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5249 if (wp->w_buffer == buf)
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5250 break;
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5251 /* If the buffer already has a window, move it */
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5252 if (wp != NULL)
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5253 win_move_after(wp, curwin);
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5254 }
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5255
4cf1c5977c35 updated for version 7.0212
vimboss
parents: 698
diff changeset
5256 if (wp == NULL && split_ret == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5257 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5258 #ifdef FEAT_AUTOCMD
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5259 bufref_T bufref;
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5260
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5261 set_bufref(&bufref, buf);
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5262 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5263 /* Split the window and put the buffer in it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5264 p_ea_save = p_ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5265 p_ea = TRUE; /* use space from all windows */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5266 split_ret = win_split(0, WSP_ROOM | WSP_BELOW);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5267 ++open_wins;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5268 p_ea = p_ea_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5269 if (split_ret == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5270 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5272 /* Open the buffer in this window. */
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
5273 #if defined(HAS_SWAP_EXISTS_ACTION)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5274 swap_exists_action = SEA_DIALOG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5275 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5276 set_curbuf(buf, DOBUF_GOTO);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5277 #ifdef FEAT_AUTOCMD
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5278 if (!bufref_valid(&bufref))
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5279 {
9475
4d8f7f8da90c commit https://github.com/vim/vim/commit/b25f9a97e9aad3cbb4bc3fe87cdbd5700f8aa0c6
Christian Brabandt <cb@256bit.org>
parents: 9473
diff changeset
5280 /* autocommands deleted the buffer!!! */
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
5281 #if defined(HAS_SWAP_EXISTS_ACTION)
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5282 swap_exists_action = SEA_NONE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5283 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5284 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5285 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5286 #endif
576
8ad159a49ef7 updated for version 7.0164
vimboss
parents: 502
diff changeset
5287 #if defined(HAS_SWAP_EXISTS_ACTION)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5288 if (swap_exists_action == SEA_QUIT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5289 {
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5290 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5291 cleanup_T cs;
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5292
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5293 /* Reset the error/interrupt/exception state here so that
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5294 * aborting() returns FALSE when closing a window. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5295 enter_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5296 # endif
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5297
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5298 /* User selected Quit at ATTENTION prompt; close this window. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5299 win_close(curwin, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5300 --open_wins;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 swap_exists_action = SEA_NONE;
602
111509d2767a updated for version 7.0171
vimboss
parents: 576
diff changeset
5302 swap_exists_did_quit = TRUE;
24
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5303
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5304 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5305 /* Restore the error/interrupt/exception state if not
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5306 * discarded by a new aborting error, interrupt, or uncaught
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5307 * exception. */
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5308 leave_cleanup(&cs);
8ff7fd162d3c updated for version 7.0016
vimboss
parents: 23
diff changeset
5309 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5311 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5312 handle_swap_exists(NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5313 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5314 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5316 ui_breakcheck();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5317 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 (void)vgetc(); /* only break the file loading, not the rest */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5320 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5321 }
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5322 #ifdef FEAT_EVAL
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5323 /* Autocommands deleted the buffer or aborted script processing!!! */
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5324 if (aborting())
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5325 break;
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 14
diff changeset
5326 #endif
698
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5327 #ifdef FEAT_WINDOWS
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5328 /* When ":tab" was used open a new tab for a new window repeatedly. */
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5329 if (had_tab > 0 && tabpage_index(NULL) <= p_tpm)
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5330 cmdmod.tab = 9999;
e402b0af6083 updated for version 7.0211
vimboss
parents: 686
diff changeset
5331 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5332 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5333 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5334 --autocmd_no_enter;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5335 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5336 win_enter(firstwin, FALSE); /* back to first window */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5337 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5338 --autocmd_no_leave;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5339 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5341 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5342 * Close superfluous windows.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5343 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5344 for (wp = lastwin; open_wins > count; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5345 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5346 r = (P_HID(wp->w_buffer) || !bufIsChanged(wp->w_buffer)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5347 || autowrite(wp->w_buffer, FALSE) == OK);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5348 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5349 if (!win_valid(wp))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5350 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5351 /* BufWrite Autocommands made the window invalid, start over */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5352 wp = lastwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5353 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5354 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5355 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5356 if (r)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5358 win_close(wp, !P_HID(wp->w_buffer));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5359 --open_wins;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5360 wp = lastwin;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5361 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5362 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5363 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5364 wp = wp->w_prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5365 if (wp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5366 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5367 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5368 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370 # endif /* FEAT_LISTCMDS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5372 #endif /* FEAT_WINDOWS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5373
7799
af3c41a3c53f commit https://github.com/vim/vim/commit/f28dbcea371b3a35727d91afc90fb90e0527d78a
Christian Brabandt <cb@256bit.org>
parents: 7687
diff changeset
5374 static int chk_modeline(linenr_T, int);
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5375
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5376 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5377 * do_modelines() - process mode lines for the current file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5378 *
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5379 * "flags" can be:
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5380 * OPT_WINONLY only set options local to window
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5381 * OPT_NOWIN don't set options local to window
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5382 *
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5383 * Returns immediately if the "ml" option isn't set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5384 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5385 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5386 do_modelines(int flags)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5387 {
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5388 linenr_T lnum;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5389 int nmlines;
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5390 static int entered = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5391
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5392 if (!curbuf->b_p_ml || (nmlines = (int)p_mls) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5393 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5395 /* Disallow recursive entry here. Can happen when executing a modeline
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5396 * triggers an autocommand, which reloads modelines with a ":do". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5397 if (entered)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5398 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400 ++entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count && lnum <= nmlines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402 ++lnum)
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5403 if (chk_modeline(lnum, flags) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5404 nmlines = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5405
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5406 for (lnum = curbuf->b_ml.ml_line_count; lnum > 0 && lnum > nmlines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5407 && lnum > curbuf->b_ml.ml_line_count - nmlines; --lnum)
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5408 if (chk_modeline(lnum, flags) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5409 nmlines = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5410 --entered;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5411 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5412
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5413 #include "version.h" /* for version number */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5415 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5416 * chk_modeline() - check a single line for a mode string
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5417 * Return FAIL if an error encountered.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5418 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5419 static int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5420 chk_modeline(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5421 linenr_T lnum,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5422 int flags) /* Same as for do_modelines(). */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5423 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5424 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5425 char_u *e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 char_u *linecopy; /* local copy of any modeline found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427 int prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 int vers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5429 int end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5430 int retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5431 char_u *save_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 linenr_T save_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5433 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5434 scid_T save_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5435 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5436
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5437 prev = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5438 for (s = ml_get(lnum); *s != NUL; ++s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 if (prev == -1 || vim_isspace(prev))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 if ((prev != -1 && STRNCMP(s, "ex:", (size_t)3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 || STRNCMP(s, "vi:", (size_t)3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 break;
5010
b614332f7df2 updated for version 7.3.1249
Bram Moolenaar <bram@vim.org>
parents: 4936
diff changeset
5445 /* Accept both "vim" and "Vim". */
b614332f7df2 updated for version 7.3.1249
Bram Moolenaar <bram@vim.org>
parents: 4936
diff changeset
5446 if ((s[0] == 'v' || s[0] == 'V') && s[1] == 'i' && s[2] == 'm')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5448 if (s[3] == '<' || s[3] == '=' || s[3] == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449 e = s + 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5450 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451 e = s + 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5452 vers = getdigits(&e);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 if (*e == ':'
5043
53c1b30632df updated for version 7.3.1265
Bram Moolenaar <bram@vim.org>
parents: 5010
diff changeset
5454 && (s[0] != 'V'
53c1b30632df updated for version 7.3.1265
Bram Moolenaar <bram@vim.org>
parents: 5010
diff changeset
5455 || STRNCMP(skipwhite(e + 1), "set", 3) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456 && (s[3] == ':'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 || (VIM_VERSION_100 >= vers && isdigit(s[3]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 || (VIM_VERSION_100 < vers && s[3] == '<')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 || (VIM_VERSION_100 > vers && s[3] == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5460 || (VIM_VERSION_100 == vers && s[3] == '=')))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5461 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5462 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5463 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5464 prev = *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5465 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5466
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5467 if (*s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5469 do /* skip over "ex:", "vi:" or "vim:" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5470 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 while (s[-1] != ':');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5473 s = linecopy = vim_strsave(s); /* copy the line, it will change */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5474 if (linecopy == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5477 save_sourcing_lnum = sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478 save_sourcing_name = sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5479 sourcing_lnum = lnum; /* prepare for emsg() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480 sourcing_name = (char_u *)"modelines";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5481
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482 end = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5483 while (end == FALSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 s = skipwhite(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 if (*s == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5487 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5489 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5490 * Find end of set command: ':' or end of line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5491 * Skip over "\:", replacing it with ":".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493 for (e = s; *e != ':' && *e != NUL; ++e)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5494 if (e[0] == '\\' && e[1] == ':')
1618
46bbe11644e0 updated for version 7.2a
vimboss
parents: 1561
diff changeset
5495 STRMOVE(e, e + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5496 if (*e == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5497 end = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5498
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5499 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5500 * If there is a "set" command, require a terminating ':' and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5501 * ignore the stuff after the ':'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5502 * "vi:set opt opt opt: foo" -- foo not interpreted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 * "vi:opt opt opt: foo" -- foo interpreted
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5504 * Accept "se" for compatibility with Elvis.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 if (STRNCMP(s, "set ", (size_t)4) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5507 || STRNCMP(s, "se ", (size_t)3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5509 if (*e != ':') /* no terminating ':'? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511 end = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5512 s = vim_strchr(s, ' ') + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 *e = NUL; /* truncate the set command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516 if (*s != NUL) /* skip over an empty "::" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 save_SID = current_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520 current_SID = SID_MODELINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 #endif
717
2fa8cb05b861 updated for version 7.0218
vimboss
parents: 706
diff changeset
5522 retval = do_set(s, OPT_MODELINE | OPT_LOCAL | flags);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524 current_SID = save_SID;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 if (retval == FAIL) /* stop if error found */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 s = e + 1; /* advance to next part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532 sourcing_lnum = save_sourcing_lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5533 sourcing_name = save_sourcing_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5534
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 vim_free(linecopy);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5539
1559
bdbaeab157e6 updated for version 7.1-272
vimboss
parents: 1420
diff changeset
5540 #if defined(FEAT_VIMINFO) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5541 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5542 read_viminfo_bufferlist(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5543 vir_T *virp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5544 int writing)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5546 char_u *tab;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5547 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5548 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5549 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5550 char_u *sfname;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5551 char_u *xline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5552
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5553 /* Handle long line and escaped characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5554 xline = viminfo_readstring(virp, 1, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556 /* don't read in if there are files on the command-line or if writing: */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 if (xline != NULL && !writing && ARGCOUNT == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 && find_viminfo_parameter('%') != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 /* Format is: <fname> Tab <lnum> Tab <col>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561 * Watch out for a Tab in the file name, work from the end. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5563 col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5564 tab = vim_strrchr(xline, '\t');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5565 if (tab != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5566 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5567 *tab++ = '\0';
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5568 col = (colnr_T)atoi((char *)tab);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5569 tab = vim_strrchr(xline, '\t');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5570 if (tab != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 *tab++ = '\0';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5573 lnum = atol((char *)tab);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5574 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5577 /* Expand "~/" in the file name at "line + 1" to a full path.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5578 * Then try shortening it by comparing with the current directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5579 expand_env(xline, NameBuff, MAXPATHL);
1411
0e6b369b9760 updated for version 7.1-126
vimboss
parents: 1410
diff changeset
5580 sfname = shorten_fname1(NameBuff);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5581
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5582 buf = buflist_new(NameBuff, sfname, (linenr_T)0, BLN_LISTED);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5583 if (buf != NULL) /* just in case... */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5584 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5585 buf->b_last_cursor.lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5586 buf->b_last_cursor.col = col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5587 buflist_setfpos(buf, curwin, lnum, col, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5589 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5590 vim_free(xline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5592 return viminfo_readline(virp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5595 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5596 write_viminfo_bufferlist(FILE *fp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 #ifdef FEAT_WINDOWS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600 win_T *win;
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5601 tabpage_T *tp;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 char_u *line;
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5604 int max_buffers;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5605
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5606 if (find_viminfo_parameter('%') == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5609 /* Without a number -1 is returned: do all buffers. */
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5610 max_buffers = get_viminfo_parameter('%');
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5611
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5612 /* Allocate room for the file name, lnum and col. */
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5613 #define LINE_BUF_LEN (MAXPATHL + 40)
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5614 line = alloc(LINE_BUF_LEN);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5615 if (line == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5616 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5617
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5618 #ifdef FEAT_WINDOWS
671
83a006f81bac updated for version 7.0199
vimboss
parents: 667
diff changeset
5619 FOR_ALL_TAB_WINDOWS(tp, win)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5620 set_last_cursor(win);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5621 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5622 set_last_cursor(curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5623 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5624
2545
298d8d6e69be Avoid warnings from the clang compiler. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2520
diff changeset
5625 fputs(_("\n# Buffer list:\n"), fp);
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
5626 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5627 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5628 if (buf->b_fname == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5629 || !buf->b_p_bl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5630 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5631 || bt_quickfix(buf)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5632 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5633 || removable(buf->b_ffname))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5634 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5635
23
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5636 if (max_buffers-- == 0)
3f44e9abe4ec updated for version 7.0015
vimboss
parents: 22
diff changeset
5637 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5638 putc('%', fp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5639 home_replace(NULL, buf->b_ffname, line, MAXPATHL, TRUE);
2280
941ff1cd317a Add file save counter to undo information. Add undotree() function.
Bram Moolenaar <bram@vim.org>
parents: 2253
diff changeset
5640 vim_snprintf_add((char *)line, LINE_BUF_LEN, "\t%ld\t%d",
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5641 (long)buf->b_last_cursor.lnum,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5642 buf->b_last_cursor.col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5643 viminfo_writestring(fp, line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5645 vim_free(line);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5647 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5648
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5649
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 * Return special buffer name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5652 * Returns NULL when the buffer has a normal file name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653 */
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5654 char_u *
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5655 buf_spname(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5656 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5657 #if defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5658 if (bt_quickfix(buf))
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5659 {
5208
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5660 win_T *win;
1559
bdbaeab157e6 updated for version 7.1-272
vimboss
parents: 1420
diff changeset
5661 tabpage_T *tp;
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5662
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5663 /*
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5664 * For location list window, w_llist_ref points to the location list.
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5665 * For quickfix window, w_llist_ref is NULL.
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5666 */
5208
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5667 if (find_win_for_buf(buf, &win, &tp) == OK && win->w_llist_ref != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5668 return (char_u *)_(msg_loclist);
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5669 else
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5670 return (char_u *)_(msg_qflist);
643
d3c978b4c7ce updated for version 7.0187
vimboss
parents: 633
diff changeset
5671 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5672 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5673 #ifdef FEAT_QUICKFIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5674 /* There is no _file_ when 'buftype' is "nofile", b_sfname
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5675 * contains the name as specified by the user */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5676 if (bt_nofile(buf))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5678 if (buf->b_sfname != NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5679 return buf->b_sfname;
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5680 return (char_u *)_("[Scratch]");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683 if (buf->b_fname == NULL)
3839
8115f449a574 updated for version 7.3.677
Bram Moolenaar <bram@vim.org>
parents: 3835
diff changeset
5684 return (char_u *)_("[No Name]");
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5685 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5686 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5687
5208
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5688 #if (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5689 || defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) \
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5690 || defined(PROTO)
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5691 /*
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5692 * Find a window for buffer "buf".
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5693 * If found OK is returned and "wp" and "tp" are set to the window and tabpage.
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5694 * If not found FAIL is returned.
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5695 */
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5696 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5697 find_win_for_buf(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5698 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5699 win_T **wp,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5700 tabpage_T **tp)
5208
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5701 {
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5702 FOR_ALL_TAB_WINDOWS(*tp, *wp)
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5703 if ((*wp)->w_buffer == buf)
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5704 goto win_found;
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5705 return FAIL;
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5706 win_found:
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5707 return OK;
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5708 }
bc4fb0317465 updated for version 7.4a.030
Bram Moolenaar <bram@vim.org>
parents: 5043
diff changeset
5709 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 #if defined(FEAT_SIGNS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 * Insert the sign into the signlist.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5715 static void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5716 insert_sign(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5717 buf_T *buf, /* buffer to store sign in */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5718 signlist_T *prev, /* previous sign entry */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5719 signlist_T *next, /* next sign entry */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5720 int id, /* sign ID */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5721 linenr_T lnum, /* line number which gets the mark */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5722 int typenr) /* typenr of sign we are adding */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5724 signlist_T *newsign;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5725
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5726 newsign = (signlist_T *)lalloc((long_u)sizeof(signlist_T), FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727 if (newsign != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5729 newsign->id = id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5730 newsign->lnum = lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5731 newsign->typenr = typenr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5732 newsign->next = next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734 newsign->prev = prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735 if (next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 next->prev = newsign;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 if (prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741 /* When adding first sign need to redraw the windows to create the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5742 * column for signs. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5743 if (buf->b_signlist == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5744 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5745 redraw_buf_later(buf, NOT_VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5746 changed_cline_bef_curs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5747 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5749 /* first sign in signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 buf->b_signlist = newsign;
6689
97cc4ee3e095 updated for version 7.4.669
Bram Moolenaar <bram@vim.org>
parents: 6639
diff changeset
5751 #ifdef FEAT_NETBEANS_INTG
97cc4ee3e095 updated for version 7.4.669
Bram Moolenaar <bram@vim.org>
parents: 6639
diff changeset
5752 if (netbeans_active())
97cc4ee3e095 updated for version 7.4.669
Bram Moolenaar <bram@vim.org>
parents: 6639
diff changeset
5753 buf->b_has_sign_column = TRUE;
97cc4ee3e095 updated for version 7.4.669
Bram Moolenaar <bram@vim.org>
parents: 6639
diff changeset
5754 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5756 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 prev->next = newsign;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762 * Add the sign into the signlist. Find the right spot to do it though.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5765 buf_addsign(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5766 buf_T *buf, /* buffer to store sign in */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5767 int id, /* sign ID */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5768 linenr_T lnum, /* line number which gets the mark */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5769 int typenr) /* typenr of sign we are adding */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5772 signlist_T *prev; /* the previous sign */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5774 prev = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777 if (lnum == sign->lnum && id == sign->id)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779 sign->typenr = typenr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5781 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782 else if (
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5783 #ifndef FEAT_NETBEANS_INTG /* keep signs sorted by lnum */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5784 id < 0 &&
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5785 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 lnum < sign->lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5788 #ifdef FEAT_NETBEANS_INTG /* insert new sign at head of list for this lnum */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5789 /* XXX - GRP: Is this because of sign slide problem? Or is it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5790 * really needed? Or is it because we allow multiple signs per
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5791 * line? If so, should I add that feature to FEAT_SIGNS?
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5792 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5793 while (prev != NULL && prev->lnum == lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5794 prev = prev->prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5795 if (prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5796 sign = buf->b_signlist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5797 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5798 sign = prev->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5800 insert_sign(buf, prev, sign, id, lnum, typenr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 prev = sign;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5804 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5805 #ifdef FEAT_NETBEANS_INTG /* insert new sign at head of list for this lnum */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806 /* XXX - GRP: See previous comment */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5807 while (prev != NULL && prev->lnum == lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808 prev = prev->prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5809 if (prev == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5810 sign = buf->b_signlist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5812 sign = prev->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5813 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 insert_sign(buf, prev, sign, id, lnum, typenr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818
5869
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5819 /*
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5820 * For an existing, placed sign "markId" change the type to "typenr".
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5821 * Returns the line number of the sign, or zero if the sign is not found.
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5822 */
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5823 linenr_T
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5824 buf_change_sign_type(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5825 buf_T *buf, /* buffer to store sign in */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5826 int markId, /* sign ID */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5827 int typenr) /* typenr of sign we are adding */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5831 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5833 if (sign->id == markId)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5835 sign->typenr = typenr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5836 return sign->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5837 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5838 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5839
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5840 return (linenr_T)0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5841 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5842
1869
720a59d79bcd updated for version 7.2-168
vimboss
parents: 1819
diff changeset
5843 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5844 buf_getsigntype(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5845 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5846 linenr_T lnum,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5847 int type) /* SIGN_ICON, SIGN_TEXT, SIGN_ANY, SIGN_LINEHL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5848 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5849 signlist_T *sign; /* a sign in a b_signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5851 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852 if (sign->lnum == lnum
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5853 && (type == SIGN_ANY
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5854 # ifdef FEAT_SIGN_ICONS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5855 || (type == SIGN_ICON
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5856 && sign_get_image(sign->typenr) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5857 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5858 || (type == SIGN_TEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5859 && sign_get_text(sign->typenr) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5860 || (type == SIGN_LINEHL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5861 && sign_get_attr(sign->typenr, TRUE) != 0)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5862 return sign->typenr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5863 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5866
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5867 linenr_T
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5868 buf_delsign(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5869 buf_T *buf, /* buffer sign is stored in */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5870 int id) /* sign id */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5871 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5872 signlist_T **lastp; /* pointer to pointer to current sign */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5873 signlist_T *sign; /* a sign in a b_signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5874 signlist_T *next; /* the next sign in a b_signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5875 linenr_T lnum; /* line number whose sign was deleted */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5876
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5877 lastp = &buf->b_signlist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5878 lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5879 for (sign = buf->b_signlist; sign != NULL; sign = next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881 next = sign->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 if (sign->id == id)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5883 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884 *lastp = next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5885 #ifdef FEAT_NETBEANS_INTG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5886 if (next != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 next->prev = sign->prev;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5889 lnum = sign->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890 vim_free(sign);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 lastp = &sign->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5896
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 /* When deleted the last sign need to redraw the windows to remove the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 * sign column. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 if (buf->b_signlist == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5900 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 redraw_buf_later(buf, NOT_VALID);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5902 changed_cline_bef_curs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5903 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5904
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5905 return lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5907
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5909 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 * Find the line number of the sign with the requested id. If the sign does
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911 * not exist, return 0 as the line number. This will still let the correct file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 * get loaded.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5914 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5915 buf_findsign(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5916 buf_T *buf, /* buffer to store sign in */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5917 int id) /* sign ID */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5919 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5921 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5922 if (sign->id == id)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5923 return sign->lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5924
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5925 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5927
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5928 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5929 buf_findsign_id(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5930 buf_T *buf, /* buffer whose sign we are searching for */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5931 linenr_T lnum) /* line number of sign */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5932 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5933 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5935 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5936 if (sign->lnum == lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5937 return sign->id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5939 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5940 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5941
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 # if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944 /* see if a given type of sign exists on a specific line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5945 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5946 buf_findsigntype_id(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5947 buf_T *buf, /* buffer whose sign we are searching for */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5948 linenr_T lnum, /* line number of sign */
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5949 int typenr) /* sign type number */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5950 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5951 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5953 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5954 if (sign->lnum == lnum && sign->typenr == typenr)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5955 return sign->id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5956
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5957 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5958 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5961 # if defined(FEAT_SIGN_ICONS) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5962 /* return the number of icons on the given line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5963 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5964 buf_signcount(buf_T *buf, linenr_T lnum)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5966 signlist_T *sign; /* a sign in the signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5967 int count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5968
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5969 for (sign = buf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5970 if (sign->lnum == lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5971 if (sign_get_image(sign->typenr) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5972 count++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5974 return count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5975 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5976 # endif /* FEAT_SIGN_ICONS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5977 # endif /* FEAT_NETBEANS_INTG */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5978
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5979
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5980 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5981 * Delete signs in buffer "buf".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5982 */
3672
5aad2c444a00 updated for version 7.3.596
Bram Moolenaar <bram@vim.org>
parents: 3654
diff changeset
5983 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
5984 buf_delete_signs(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5985 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5986 signlist_T *next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5987
5869
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5988 /* When deleting the last sign need to redraw the windows to remove the
6060
72ee0db83788 updated for version 7.4.369
Bram Moolenaar <bram@vim.org>
parents: 5958
diff changeset
5989 * sign column. Not when curwin is NULL (this means we're exiting). */
72ee0db83788 updated for version 7.4.369
Bram Moolenaar <bram@vim.org>
parents: 5958
diff changeset
5990 if (buf->b_signlist != NULL && curwin != NULL)
5869
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5991 {
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5992 redraw_buf_later(buf, NOT_VALID);
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5993 changed_cline_bef_curs();
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5994 }
373204662d82 updated for version 7.4.277
Bram Moolenaar <bram@vim.org>
parents: 5816
diff changeset
5995
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996 while (buf->b_signlist != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5998 next = buf->b_signlist->next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 vim_free(buf->b_signlist);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6000 buf->b_signlist = next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6003
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6004 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6005 * Delete all signs in all buffers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6006 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6007 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6008 buf_delete_all_signs(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6010 buf_T *buf; /* buffer we are checking for signs */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011
9649
fd9727ae3c49 commit https://github.com/vim/vim/commit/2932359000b2f918d5fade79ea4d124d5943cd07
Christian Brabandt <cb@256bit.org>
parents: 9645
diff changeset
6012 FOR_ALL_BUFFERS(buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6013 if (buf->b_signlist != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014 buf_delete_signs(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6015 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6016
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6017 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018 * List placed signs for "rbuf". If "rbuf" is NULL do it for all buffers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6021 sign_list_placed(buf_T *rbuf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6022 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6023 buf_T *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6024 signlist_T *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6025 char lbuf[BUFSIZ];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6026
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6027 MSG_PUTS_TITLE(_("\n--- Signs ---"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6028 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6029 if (rbuf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6030 buf = firstbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6031 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6032 buf = rbuf;
3411
3465a9e77588 updated for version 7.3.471
Bram Moolenaar <bram@vim.org>
parents: 3406
diff changeset
6033 while (buf != NULL && !got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6035 if (buf->b_signlist != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6036 {
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
6037 vim_snprintf(lbuf, BUFSIZ, _("Signs for %s:"), buf->b_fname);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
6038 MSG_PUTS_ATTR(lbuf, HL_ATTR(HLF_D));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6039 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6040 }
3411
3465a9e77588 updated for version 7.3.471
Bram Moolenaar <bram@vim.org>
parents: 3406
diff changeset
6041 for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6042 {
272
ddada568db54 updated for version 7.0073
vimboss
parents: 267
diff changeset
6043 vim_snprintf(lbuf, BUFSIZ, _(" line=%ld id=%d name=%s"),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6044 (long)p->lnum, p->id, sign_typenr2name(p->typenr));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6045 MSG_PUTS(lbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6046 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6048 if (rbuf != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6049 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6050 buf = buf->b_next;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6051 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6052 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6053
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6054 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6055 * Adjust a placed sign for inserted/deleted lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6056 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6057 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6058 sign_mark_adjust(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6059 linenr_T line1,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6060 linenr_T line2,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6061 long amount,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6062 long amount_after)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6063 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6064 signlist_T *sign; /* a sign in a b_signlist */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6065
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6066 for (sign = curbuf->b_signlist; sign != NULL; sign = sign->next)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6068 if (sign->lnum >= line1 && sign->lnum <= line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6069 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6070 if (amount == MAXLNUM)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6071 sign->lnum = line1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6072 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6073 sign->lnum += amount;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6074 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6075 else if (sign->lnum > line2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6076 sign->lnum += amount_after;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6078 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6079 #endif /* FEAT_SIGNS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6081 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6082 * Set 'buflisted' for curbuf to "on" and trigger autocommands if it changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6083 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6084 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6085 set_buflisted(int on)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6086 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6087 if (on != curbuf->b_p_bl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6089 curbuf->b_p_bl = on;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6090 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6091 if (on)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6092 apply_autocmds(EVENT_BUFADD, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6093 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6094 apply_autocmds(EVENT_BUFDELETE, NULL, NULL, FALSE, curbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6095 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6097 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6098
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6099 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6100 * Read the file for "buf" again and check if the contents changed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6101 * Return TRUE if it changed or this could not be checked.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6102 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6103 int
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6104 buf_contents_changed(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6105 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6106 buf_T *newbuf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6107 int differ = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6108 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6109 aco_save_T aco;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6110 exarg_T ea;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6112 /* Allocate a buffer without putting it in the buffer list. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6113 newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6114 if (newbuf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6115 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6116
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6117 /* Force the 'fileencoding' and 'fileformat' to be equal. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6118 if (prep_exarg(&ea, buf) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6119 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6120 wipe_buffer(newbuf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6121 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6122 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6123
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6124 /* set curwin/curbuf to buf and save a few things */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6125 aucmd_prepbuf(&aco, newbuf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6126
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 602
diff changeset
6127 if (ml_open(curbuf) == OK
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6128 && readfile(buf->b_ffname, buf->b_fname,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6129 (linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6130 &ea, READ_NEW | READ_DUMMY) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6131 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6132 /* compare the two files line by line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6133 if (buf->b_ml.ml_line_count == curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6134 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6135 differ = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6136 for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6137 if (STRCMP(ml_get_buf(buf, lnum, FALSE), ml_get(lnum)) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6138 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6139 differ = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6140 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6141 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6142 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6143 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6144 vim_free(ea.cmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6146 /* restore curwin/curbuf and a few other things */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6147 aucmd_restbuf(&aco);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149 if (curbuf != newbuf) /* safety check */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 wipe_buffer(newbuf, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6151
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 return differ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6155 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156 * Wipe out a buffer and decrement the last buffer number if it was used for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 * this buffer. Call this to wipe out a temp buffer that does not contain any
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6158 * marks.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6159 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6160 void
7817
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6161 wipe_buffer(
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6162 buf_T *buf,
83861277e6a3 commit https://github.com/vim/vim/commit/7454a06e2642d2b37afad1c5e71cec68081ca4ff
Christian Brabandt <cb@256bit.org>
parents: 7799
diff changeset
6163 int aucmd UNUSED) /* When TRUE trigger autocommands. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6164 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 if (buf->b_fnum == top_file_num - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6166 --top_file_num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 if (!aucmd) /* Don't trigger BufDelete autocommands here. */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1352
diff changeset
6170 block_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 #endif
3365
9ccdc4a69d8f updated for version 7.3.449
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
6172 close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 #ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 if (!aucmd)
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1352
diff changeset
6175 unblock_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 }