annotate src/ex_getln.c @ 10098:72e4b7f90465 v7.4.2320

commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 3 21:04:58 2016 +0200 patch 7.4.2320 Problem: Redraw problem when using 'incsearch'. Solution: Save the current view when deleting characters. (Christian Brabandt) Fix that the '" mark is set in the wrong position. Don't change the search start when using BS.
author Christian Brabandt <cb@256bit.org>
date Sat, 03 Sep 2016 21:15:06 +0200
parents 61dc69646af6
children fb040c9d8ce9
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: 9990
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 * ex_getln.c: Functions for entering and editing an Ex command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 * Variables shared between getcmdline(), redrawcmdline() and others.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 * These need to be saved when using CTRL-R |, that's why they are in a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 * structure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 struct cmdline_info
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 char_u *cmdbuff; /* pointer to command line buffer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 int cmdbufflen; /* length of cmdbuff */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 int cmdlen; /* number of chars in command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 int cmdpos; /* current cursor position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 int cmdspos; /* cursor column on screen */
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
28 int cmdfirstc; /* ':', '/', '?', '=', '>' or NUL */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29 int cmdindent; /* number of spaces before cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 char_u *cmdprompt; /* message in front of cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 int cmdattr; /* attributes for prompt */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 int overstrike; /* Typing mode on the command line. Shared by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 getcmdline() and put_on_cmdline(). */
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
34 expand_T *xpc; /* struct being used for expansion, xp_pattern
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
35 may point into cmdbuff */
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
36 int xp_context; /* type of expansion */
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
37 # ifdef FEAT_EVAL
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
38 char_u *xp_arg; /* user-defined expansion arg */
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
39 int input_fn; /* when TRUE Invoked for input() function */
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
40 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
43 /* The current cmdline_info. It is initialized in getcmdline() and after that
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
44 * used by other functions. When invoking getcmdline() recursively it needs
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
45 * to be saved with save_cmdline() and restored with restore_cmdline().
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
46 * TODO: make it local to getcmdline() and pass it around. */
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
47 static struct cmdline_info ccline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 static int cmd_showtail; /* Only show path tail in lists ? */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 static int new_cmdpos; /* position set by set_cmdline_pos() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 typedef struct hist_entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 int hisnum; /* identifying number */
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
59 int viminfo; /* when TRUE hisstr comes from viminfo */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 char_u *hisstr; /* actual entry, separator char after the NUL */
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
61 time_t time_set; /* when it was typed, zero if unknown */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 } histentry_T;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 static histentry_T *(history[HIST_COUNT]) = {NULL, NULL, NULL, NULL, NULL};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 static int hisidx[HIST_COUNT] = {-1, -1, -1, -1, -1}; /* lastused entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 static int hisnum[HIST_COUNT] = {0, 0, 0, 0, 0};
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 /* identifying (unique) number of newest history entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 static int hislen = 0; /* actual length of history tables */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
70 static int hist_char2type(int c);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
71
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
72 static int in_history(int, char_u *, int, int, int);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 # ifdef FEAT_EVAL
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
74 static int calc_hist_idx(int histype, int num);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 static int cmd_hkmap = 0; /* Hebrew mapping during command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83 static int cmd_fkmap = 0; /* Farsi mapping during command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
86 static int cmdline_charsize(int idx);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
87 static void set_cmdspos(void);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
88 static void set_cmdspos_cursor(void);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 #ifdef FEAT_MBYTE
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
90 static void correct_cmdspos(int idx, int cells);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
91 #endif
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
92 static void alloc_cmdbuff(int len);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
93 static int realloc_cmdbuff(int len);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
94 static void draw_cmdline(int start, int len);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
95 static void save_cmdline(struct cmdline_info *ccp);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
96 static void restore_cmdline(struct cmdline_info *ccp);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
97 static int cmdline_paste(int regname, int literally, int remcr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
99 static void redrawcmd_preedit(void);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101 #ifdef FEAT_WILDMENU
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
102 static void cmdline_del(int from);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
103 #endif
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
104 static void redrawcmdprompt(void);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
105 static void cursorcmd(void);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
106 static int ccheck_abbr(int);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
107 static int nextwild(expand_T *xp, int type, int options, int escape);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
108 static void escape_fname(char_u **pp);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
109 static int showmatches(expand_T *xp, int wildmenu);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
110 static void set_expand_context(expand_T *xp);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
111 static int ExpandFromContext(expand_T *xp, char_u *, int *, char_u ***, int);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
112 static int expand_showtail(expand_T *xp);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 #ifdef FEAT_CMDL_COMPL
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
114 static int expand_shellcmd(char_u *filepat, int *num_file, char_u ***file, int flagsarg);
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
115 static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char *dirname[]);
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
116 static int ExpandPackAddDir(char_u *pat, int *num_file, char_u ***file);
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
117 # ifdef FEAT_CMDHIST
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
118 static char_u *get_history_arg(expand_T *xp, int idx);
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
119 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
121 static int ExpandUserDefined(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file);
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
122 static int ExpandUserList(expand_T *xp, int *num_file, char_u ***file);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 #endif
4265
76aa34cef80f updated for version 7.3.883
Bram Moolenaar <bram@vim.org>
parents: 4258
diff changeset
125 #ifdef FEAT_CMDHIST
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
126 static void clear_hist_entry(histentry_T *hisptr);
4265
76aa34cef80f updated for version 7.3.883
Bram Moolenaar <bram@vim.org>
parents: 4258
diff changeset
127 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 #ifdef FEAT_CMDWIN
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
130 static int ex_window(void);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
133 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
134 static int
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
135 #ifdef __BORLANDC__
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
136 _RTLENTRYF
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
137 #endif
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
138 sort_func_compare(const void *s1, const void *s2);
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
139 #endif
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
140 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
141 static void set_search_match(pos_T *t);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
142 #endif
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
143
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145 * getcmdline() - accept a command line starting with firstc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 * firstc == ':' get ":" command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 * firstc == '/' or '?' get search pattern
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 * firstc == '=' get expression
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 * firstc == '@' get text for input() function
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 * firstc == '>' get text for debug mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 * firstc == NUL get text for :insert command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 * firstc == -1 like NUL, and break on CTRL-C
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 * The line is collected in ccline.cmdbuff, which is reallocated to fit the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 * command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 * Careful: getcmdline() can be called recursively!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 * Return pointer to allocated string if there is a commandline, NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 * otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
164 getcmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
165 int firstc,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
166 long count UNUSED, /* only used for incremental search */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
167 int indent) /* indent for inside conditionals */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 int gotesc = FALSE; /* TRUE when <ESC> just typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 int do_abbr; /* when TRUE check for abbr. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 char_u *lookfor = NULL; /* string to match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 int hiscnt; /* current history line in use */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 int histype; /* history type to be used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 #ifdef FEAT_SEARCH_EXTRA
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
180 pos_T search_start; /* where 'incsearch' starts searching */
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
181 pos_T save_cursor;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 colnr_T old_curswant;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
183 colnr_T init_curswant = curwin->w_curswant;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 colnr_T old_leftcol;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
185 colnr_T init_leftcol = curwin->w_leftcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186 linenr_T old_topline;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
187 linenr_T init_topline = curwin->w_topline;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
188 pos_T match_start = curwin->w_cursor;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
189 pos_T match_end;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 int old_topfill;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
192 int init_topfill = curwin->w_topfill;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 linenr_T old_botline;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
195 linenr_T init_botline = curwin->w_botline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 int did_incsearch = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 int incsearch_postponed = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 int did_wild_list = FALSE; /* did wild_list() recently */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 int wim_index = 0; /* index in wim_flags[] */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 int res;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 int save_msg_scroll = msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 int save_State = State; /* remember State when called */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 int some_key_typed = FALSE; /* one of the keys was typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 /* mouse drag and release events are ignored, unless they are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 * preceded with a mouse down event */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 int ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 int break_ctrl_c = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 expand_T xpc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 long *b_im_ptr = NULL;
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
215 #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL) || defined(FEAT_SEARCH_EXTRA)
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
216 /* Everything that may work recursively should save and restore the
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
217 * current command line in save_ccline. That includes update_screen(), a
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
218 * custom status line may invoke ":normal". */
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
219 struct cmdline_info save_ccline;
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
220 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 if (firstc == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 firstc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 break_ctrl_c = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 /* start without Hebrew mapping for a command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 if (firstc == ':' || firstc == '=' || firstc == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 cmd_hkmap = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 ccline.overstrike = FALSE; /* always start in insert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 #ifdef FEAT_SEARCH_EXTRA
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
237 clearpos(&match_end);
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
238 save_cursor = curwin->w_cursor; /* may be restored later */
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
239 search_start = curwin->w_cursor;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 old_curswant = curwin->w_curswant;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 old_leftcol = curwin->w_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 old_topline = curwin->w_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 old_topfill = curwin->w_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 old_botline = curwin->w_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 * set some variables for redrawcmd()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 ccline.cmdfirstc = (firstc == '@' ? 0 : firstc);
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
253 ccline.cmdindent = (firstc > 0 ? indent : 0);
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
254
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
255 /* alloc initial ccline.cmdbuff */
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
256 alloc_cmdbuff(exmode_active ? 250 : indent + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 return NULL; /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259 ccline.cmdlen = ccline.cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 ccline.cmdbuff[0] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
262 /* autoindent for :insert and :append */
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
263 if (firstc <= 0)
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
264 {
6929
e55929fca0cf patch 7.4.783
Bram Moolenaar <bram@vim.org>
parents: 6927
diff changeset
265 vim_memset(ccline.cmdbuff, ' ', indent);
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
266 ccline.cmdbuff[indent] = NUL;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
267 ccline.cmdpos = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
268 ccline.cmdspos = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
269 ccline.cmdlen = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
270 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
271
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 ExpandInit(&xpc);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
273 ccline.xpc = &xpc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 if (curwin->w_p_rl && *curwin->w_p_rlc == 's'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 && (firstc == '/' || firstc == '?'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 cmdmsg_rl = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 cmdmsg_rl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 redir_off = TRUE; /* don't redirect the typed command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 if (!cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 i = msg_scrolled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 msg_scrolled = 0; /* avoid wait_return message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 gotocmdline(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 msg_scrolled += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 redrawcmdprompt(); /* draw prompt or indent */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 xpc.xp_backslash = XP_BS_NONE;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
295 #ifndef BACKSLASH_IN_FILENAME
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
296 xpc.xp_shell = FALSE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
297 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
299 #if defined(FEAT_EVAL)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
300 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
301 {
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
302 xpc.xp_context = ccline.xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
303 xpc.xp_pattern = ccline.cmdbuff;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
304 # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
305 xpc.xp_arg = ccline.xp_arg;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
306 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
307 }
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
308 #endif
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
309
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 * Avoid scrolling when called by a recursive do_cmdline(), e.g. when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 * doing ":@0" when register 0 doesn't contain a CR.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 State = CMDLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 if (firstc == '/' || firstc == '?' || firstc == '@')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 /* Use ":lmap" mappings for search pattern and input(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 if (curbuf->b_p_imsearch == B_IMODE_USE_INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 b_im_ptr = &curbuf->b_p_iminsert;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 b_im_ptr = &curbuf->b_p_imsearch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 if (*b_im_ptr == B_IMODE_LMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 State |= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 im_set_active(*b_im_ptr == B_IMODE_IM);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 else if (p_imcmdline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 im_set_active(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342
571
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
343 /* When inside an autocommand for writing "exiting" may be set and
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
344 * terminal mode set to cooked. Need to set raw mode here then. */
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
345 settmode(TMODE_RAW);
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
346
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 hiscnt = hislen; /* set hiscnt to impossible history value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 histype = hist_char2type(firstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 #ifdef FEAT_DIGRAPHS
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
354 do_digraph(-1); /* init digraph typeahead */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356
5993
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
357 /* If something above caused an error, reset the flags, we do want to type
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
358 * and execute commands. Display may be messed up a bit. */
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
359 if (did_emsg)
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
360 redrawcmd();
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
361 did_emsg = FALSE;
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
362 got_int = FALSE;
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
363
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 * Collect the command string, handling editing keys.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 {
972
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
369 redir_off = TRUE; /* Don't redirect the typed command.
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
370 Repeated, because a ":redir" inside
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
371 completion may switch it on. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 dont_scroll = FALSE; /* allow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 quit_more = FALSE; /* reset after CTRL-D which had a more-prompt */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 cursorcmd(); /* set the cursor on the right spot */
1472
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
378
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
379 /* Get a character. Ignore K_IGNORE, it should not do anything, such
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
380 * as stop completion. */
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
381 do
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
382 {
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
383 c = safe_vgetc();
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
384 } while (c == K_IGNORE);
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
385
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 if (KeyTyped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 some_key_typed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 if (cmd_hkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 c = hkmap(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 # ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 if (cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 c = cmdl_fkmap(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 if (cmdmsg_rl && !KeyStuffed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 /* Invert horizontal movements and operations. Only when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 * typed by the user directly, not when the result of a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 * mapping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 case K_RIGHT: c = K_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 case K_S_RIGHT: c = K_S_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 case K_C_RIGHT: c = K_C_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 case K_LEFT: c = K_RIGHT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 case K_S_LEFT: c = K_S_RIGHT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 case K_C_LEFT: c = K_C_RIGHT; break;
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 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
414 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
415 * Ignore got_int when CTRL-C was typed here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 * Don't ignore it in :global, we really need to break then, e.g., for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 * ":g/pat/normal /pat" (without the <CR>).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
418 * Don't ignore it for the input() function.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 if ((c == Ctrl_C
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 || c == intr_char
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 #if defined(FEAT_EVAL) || defined(FEAT_CRYPT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 && firstc != '@'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 && !break_ctrl_c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 && !global_busy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 /* free old command line when finished moving around in the history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 * list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 if (lookfor != NULL
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
438 && c != K_S_DOWN && c != K_S_UP
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
439 && c != K_DOWN && c != K_UP
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 && c != K_PAGEDOWN && c != K_PAGEUP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 && c != K_KPAGEDOWN && c != K_KPAGEUP
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
442 && c != K_LEFT && c != K_RIGHT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 vim_free(lookfor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 lookfor = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 /*
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
451 * When there are matching completions to select <S-Tab> works like
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
452 * CTRL-P (unless 'wc' is <S-Tab>).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
453 */
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
454 if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 c = Ctrl_P;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 /* Special translations for 'wildmenu' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 if (did_wild_list && p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
461 if (c == K_LEFT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 c = Ctrl_P;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
463 else if (c == K_RIGHT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
464 c = Ctrl_N;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 /* Hitting CR after "emenu Name.": complete submenu */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 && ccline.cmdpos > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 && ccline.cmdbuff[ccline.cmdpos - 1] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 && ccline.cmdbuff[ccline.cmdpos - 2] != '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 && (c == '\n' || c == '\r' || c == K_KENTER))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 c = K_DOWN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475 /* free expanded names when finished walking through matches */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 if (xpc.xp_numfiles != -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 && !(c == p_wc && KeyTyped) && c != p_wcm
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 && c != Ctrl_N && c != Ctrl_P && c != Ctrl_A
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 && c != Ctrl_L)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 did_wild_list = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 #ifdef FEAT_WILDMENU
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
484 if (!p_wmnu || (c != K_UP && c != K_DOWN))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
485 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 wim_index = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 if (p_wmnu && wild_menu_showing != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 int skt = KeyTyped;
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
492 int old_RedrawingDisabled = RedrawingDisabled;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
493
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
494 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
495 RedrawingDisabled = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
496
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497 if (wild_menu_showing == WM_SCROLLED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 /* Entered command line, move it up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 cmdline_row--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 else if (save_p_ls != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 /* restore 'laststatus' and 'winminheight' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 p_ls = save_p_ls;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 p_wmh = save_p_wmh;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 last_status(FALSE);
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
509 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
510 update_screen(VALID); /* redraw the screen NOW */
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
511 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
512 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 save_p_ls = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 win_redraw_last_status(topframe);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 redraw_statuslines();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 }
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
520 KeyTyped = skt;
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
521 wild_menu_showing = 0;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
522 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
523 RedrawingDisabled = old_RedrawingDisabled;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
524 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 /* Special translations for 'wildmenu' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 /* Hitting <Down> after "emenu Name.": complete submenu */
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
533 if (c == K_DOWN && ccline.cmdpos > 0
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
534 && ccline.cmdbuff[ccline.cmdpos - 1] == '.')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 c = p_wc;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
536 else if (c == K_UP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 /* Hitting <Up>: Remove one submenu name in front of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 * cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542 j = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 while (--j > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 /* check for start of menu name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 if (ccline.cmdbuff[j] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 && ccline.cmdbuff[j - 1] != '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 /* check for start of submenu name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 if (ccline.cmdbuff[j] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 && ccline.cmdbuff[j - 1] != '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 if (found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 cmdline_del(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 }
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
572 if ((xpc.xp_context == EXPAND_FILES
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
573 || xpc.xp_context == EXPAND_DIRECTORIES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
574 || xpc.xp_context == EXPAND_SHELLCMD) && p_wmnu)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
575 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 char_u upseg[5];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578 upseg[0] = PATHSEP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 upseg[1] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 upseg[2] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 upseg[3] = PATHSEP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 upseg[4] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
584 if (c == K_DOWN
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
585 && ccline.cmdpos > 0
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
586 && ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
587 && (ccline.cmdpos < 3
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
588 || ccline.cmdbuff[ccline.cmdpos - 2] != '.'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
589 || ccline.cmdbuff[ccline.cmdpos - 3] != '.'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 /* go down a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
594 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 && c == K_DOWN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
595 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 /* If in a direct ancestor, strip off one ../ to go down */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 i = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 while (--j > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 {
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
603 #ifdef FEAT_MBYTE
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
604 if (has_mbyte)
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
605 j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
606 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
607 if (vim_ispathsep(ccline.cmdbuff[j]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 if (found
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 && ccline.cmdbuff[j - 1] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 && ccline.cmdbuff[j - 2] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 && (vim_ispathsep(ccline.cmdbuff[j - 3]) || j == i + 2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 cmdline_del(j - 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
622 else if (c == K_UP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
623 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 /* go up a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 j = ccline.cmdpos - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 i = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 while (--j > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 if (vim_ispathsep(ccline.cmdbuff[j])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 #ifdef BACKSLASH_IN_FILENAME
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7856
diff changeset
637 && vim_strchr((char_u *)" *?[{`$%#",
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7856
diff changeset
638 ccline.cmdbuff[j + 1]) == NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
639 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 if (found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
650 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
652 if (!found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 j = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 else if (STRNCMP(ccline.cmdbuff + j, upseg, 4) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 j += 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 else if (STRNCMP(ccline.cmdbuff + j, upseg + 1, 3) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 && j == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 j += 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 j = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 if (j > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 /* TODO this is only for DOS/UNIX systems - need to put in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 * machine-specific stuff here and in upseg init */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 cmdline_del(j);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 put_on_cmdline(upseg + 1, 3, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 else if (ccline.cmdpos > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 cmdline_del(i);
3204
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
670
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
671 /* Now complete in the new directory. Set KeyTyped in case the
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
672 * Up key came from a mapping. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673 c = p_wc;
3204
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
674 KeyTyped = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
675 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 #endif /* FEAT_WILDMENU */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680 /* CTRL-\ CTRL-N goes to Normal mode, CTRL-\ CTRL-G goes to Insert
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 * mode when 'insertmode' is set, CTRL-\ e prompts for an expression. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 if (c == Ctrl_BSL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 ++no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 ++allow_keys;
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
686 c = plain_vgetc();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
687 --no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 --allow_keys;
3859
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
689 /* CTRL-\ e doesn't work when obtaining an expression, unless it
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
690 * is in a mapping. */
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
691 if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
692 || (ccline.cmdfirstc == '=' && KeyTyped)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 vungetc(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 c = Ctrl_BSL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 else if (c == 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 {
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
700 char_u *p = NULL;
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
701 int len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 * Replace the command line with the result of an expression.
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
705 * Need to save and restore the current command line, to be
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
706 * able to enter a new one...
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
707 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 if (ccline.cmdpos == ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 new_cmdpos = 99999; /* keep it at the end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 new_cmdpos = ccline.cmdpos;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
712
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
713 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 c = get_expr_register();
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
715 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 {
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
718 /* Need to save and restore ccline. And set "textlock"
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
719 * to avoid nasty things like going to another buffer when
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
720 * evaluating an expression. */
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
721 save_cmdline(&save_ccline);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
722 ++textlock;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 p = get_expr_line();
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
724 --textlock;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
725 restore_cmdline(&save_ccline);
2617
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
726
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
727 if (p != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 {
2617
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
729 len = (int)STRLEN(p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
730 if (realloc_cmdbuff(len + 1) == OK)
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
731 {
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
732 ccline.cmdlen = len;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
733 STRCPY(ccline.cmdbuff, p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
734 vim_free(p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
735
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
736 /* Restore the cursor or use the position set with
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
737 * set_cmdline_pos(). */
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
738 if (new_cmdpos > ccline.cmdlen)
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
739 ccline.cmdpos = ccline.cmdlen;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
740 else
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
741 ccline.cmdpos = new_cmdpos;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
742
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
743 KeyTyped = FALSE; /* Don't do p_wc completion. */
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
744 redrawcmd();
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
745 goto cmdline_changed;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
746 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 beep_flush();
2636
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
750 got_int = FALSE; /* don't abandon the command line */
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
751 did_emsg = FALSE;
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
752 emsg_on_display = FALSE;
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
753 redrawcmd();
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
754 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 if (c == Ctrl_G && p_im && restart_edit == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 restart_edit = 'a';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 gotesc = TRUE; /* will free ccline.cmdbuff after putting it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 goto returncmd; /* back to Normal mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 if (c == cedit_key || c == K_CMDWIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 {
6211
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
770 if (ex_normal_busy == 0 && got_int == FALSE)
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
771 {
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
772 /*
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
773 * Open a window to edit the command line (and history).
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
774 */
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
775 c = ex_window();
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
776 some_key_typed = TRUE;
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
777 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 # ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 c = do_digraph(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 if (c == '\n' || c == '\r' || c == K_KENTER || (c == ESC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 && (!KeyTyped || vim_strchr(p_cpo, CPO_ESC) != NULL)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
790 /* In Ex mode a backslash escapes a newline. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
791 if (exmode_active
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
792 && c != ESC
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
793 && ccline.cmdpos == ccline.cmdlen
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
794 && ccline.cmdpos > 0
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
795 && ccline.cmdbuff[ccline.cmdpos - 1] == '\\')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
796 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
797 if (c == K_KENTER)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
798 c = '\n';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
799 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
800 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
802 gotesc = FALSE; /* Might have typed ESC previously, don't
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
803 truncate the cmdline now. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
804 if (ccheck_abbr(c + ABBR_OFF))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
805 goto cmdline_changed;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
806 if (!cmd_silent)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
807 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
808 windgoto(msg_row, 0);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
809 out_flush();
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
810 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
811 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
813 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 * Completion for 'wildchar' or 'wildcharm' key.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 * - hitting <ESC> twice means: abandon command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 * - wildcard expansion is only done when the 'wildchar' key is really
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 * typed, not when it comes from a macro
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 if (xpc.xp_numfiles > 0) /* typed p_wc at least twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 /* if 'wildmode' contains "list" may still need to list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 if (xpc.xp_numfiles > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 && !did_wild_list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 && (wim_flags[wim_index] & WIM_LIST))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 (void)showmatches(&xpc, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 did_wild_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 if (wim_flags[wim_index] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
835 res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
836 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
837 else if (wim_flags[wim_index] & WIM_FULL)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
838 res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
839 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
840 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 res = OK; /* don't insert 'wildchar' now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 else /* typed p_wc first time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 wim_index = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 /* if 'wildmode' first contains "longest", get longest
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 * common part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 if (wim_flags[0] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
850 res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
851 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
852 else
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
853 res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
854 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856 /* if interrupted while completing, behave like it failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 (void)vpeekc(); /* remove <C-C> from input stream */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 got_int = FALSE; /* don't abandon the command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868 /* when more than one match, and 'wildmode' first contains
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 * "list", or no change and 'wildmode' contains "longest,list",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 * list all matches */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 if (res == OK && xpc.xp_numfiles > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 /* a "longest" that didn't do anything is skipped (but not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 * "list:longest") */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 if (wim_flags[0] == WIM_LONGEST && ccline.cmdpos == j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 wim_index = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 if ((wim_flags[wim_index] & WIM_LIST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 || (p_wmnu && (wim_flags[wim_index] & WIM_FULL) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 if (!(wim_flags[0] & WIM_LONGEST))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 int p_wmnu_save = p_wmnu;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 p_wmnu = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 #endif
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
889 /* remove match */
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
890 nextwild(&xpc, WILD_PREV, 0, firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 p_wmnu = p_wmnu_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 (void)showmatches(&xpc, p_wmnu
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 && ((wim_flags[wim_index] & WIM_LIST) == 0));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 (void)showmatches(&xpc, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 did_wild_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 if (wim_flags[wim_index] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
904 nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
905 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 else if (wim_flags[wim_index] & WIM_FULL)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
907 nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
908 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 else
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
911 vim_beep(BO_WILD);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 else if (xpc.xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 if (wim_index < 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 ++wim_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 if (c == ESC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 gotesc = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 if (res == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926 gotesc = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 /* <S-Tab> goes to last match, in a clumsy way */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 if (c == K_S_TAB && KeyTyped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 {
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
931 if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
932 && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
933 && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
934 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 if (c == NUL || c == K_ZERO) /* NUL is stored as NL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 c = NL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 do_abbr = TRUE; /* default: check for abbreviation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 * Big switch for a typed command line character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 case K_BS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 case Ctrl_H:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 case K_DEL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 case K_KDEL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 case Ctrl_W:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 if (cmd_fkmap && c == K_BS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 c = K_DEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 if (c == K_KDEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 c = K_DEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 * delete current character is the same as backspace on next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 * character, except at end of line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 if (c == K_DEL && ccline.cmdpos != ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 if (has_mbyte && c == K_DEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 ccline.cmdpos += mb_off_next(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 if (ccline.cmdpos > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 p = ccline.cmdbuff + j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 if (c == Ctrl_W)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 while (p > ccline.cmdbuff && vim_isspace(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 i = mb_get_class(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 while (p > ccline.cmdbuff && mb_get_class(p) == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 if (mb_get_class(p) != i)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
988 p += (*mb_ptr2len)(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 if (c == Ctrl_W)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 while (p > ccline.cmdbuff && vim_isspace(p[-1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 i = vim_iswordc(p[-1]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 while (p > ccline.cmdbuff && !vim_isspace(p[-1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 && vim_iswordc(p[-1]) == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 ccline.cmdpos = (int)(p - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 ccline.cmdlen -= j - ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 i = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 while (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 ccline.cmdbuff[i++] = ccline.cmdbuff[j++];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010 /* Truncate at the end, required for multi-byte chars. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 ccline.cmdbuff[ccline.cmdlen] = NUL;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1012 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1013 if (ccline.cmdlen == 0)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1014 {
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1015 search_start = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1016 /* save view settings, so that the screen
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1017 * won't be restored at the wrong position */
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1018 old_curswant = init_curswant;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1019 old_leftcol = init_leftcol;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1020 old_topline = init_topline;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1021 # ifdef FEAT_DIFF
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1022 old_topfill = init_topfill;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1023 # endif
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1024 old_botline = init_botline;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1025 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1026 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 else if (ccline.cmdlen == 0 && c != Ctrl_W
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 && ccline.cmdprompt == NULL && indent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 /* In ex and debug mode it doesn't make sense to return. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 if (exmode_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 || ccline.cmdfirstc == '>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 vim_free(ccline.cmdbuff); /* no commandline to return */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 ccline.cmdbuff = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 if (!cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 msg_putchar(' '); /* delete ':' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 }
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1052 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1053 if (ccline.cmdlen == 0)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1054 search_start = save_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1055 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 goto returncmd; /* back to cmd mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061 case K_INS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 case K_KINS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 /* if Farsi mode set, we are in reverse insert mode -
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 Do not change the mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 if (cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 ccline.overstrike = !ccline.overstrike;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076 case Ctrl_HAT:
782
d20041a02ee5 updated for version 7.0228
vimboss
parents: 772
diff changeset
1077 if (map_to_exists_mode((char_u *)"", LANGMAP, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1078 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 /* ":lmap" mappings exists, toggle use of mappings. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 State ^= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 im_set_active(FALSE); /* Disable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 if (State & LANGMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 *b_im_ptr = B_IMODE_LMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 *b_im_ptr = B_IMODE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 /* There are no ":lmap" mappings, toggle IM. When
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 * 'imdisable' is set don't try getting the status, it's
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 * always off. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 if ((p_imdisable && b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 ? *b_im_ptr == B_IMODE_IM : im_get_status())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 im_set_active(FALSE); /* Disable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 *b_im_ptr = B_IMODE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 im_set_active(TRUE); /* Enable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 *b_im_ptr = B_IMODE_IM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 if (b_im_ptr == &curbuf->b_p_iminsert)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 set_iminsert_global();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 set_imsearch_global();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 #if defined(FEAT_WINDOWS) && defined(FEAT_KEYMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 /* Show/unshow value of 'keymap' in status lines later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 status_redraw_curbuf();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 /* case '@': only in very old vi */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 case Ctrl_U:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 /* delete all characters left of the cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 ccline.cmdlen -= j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 i = ccline.cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 while (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 ccline.cmdbuff[i++] = ccline.cmdbuff[j++];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 /* Truncate at the end, required for multi-byte chars. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 ccline.cmdbuff[ccline.cmdlen] = NUL;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1139 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1140 if (ccline.cmdlen == 0)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1141 search_start = save_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1142 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1143 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 case Ctrl_Y:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 /* Copy the modeless selection, if there is one. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 if (clip_star.state != SELECT_CLEARED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 if (clip_star.state == SELECT_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 clip_copy_modeless_selection(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158 case ESC: /* get here if p_wc != ESC or when ESC typed twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 case Ctrl_C:
571
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
1160 /* In exmode it doesn't make sense to return. Except when
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 95
diff changeset
1161 * ":normal" runs out of characters. */
6df0106fc595 updated for version 7.0049
vimboss
parents: 95
diff changeset
1162 if (exmode_active
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7819
diff changeset
1163 && (ex_normal_busy == 0 || typebuf.tb_len > 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1164 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166 gotesc = TRUE; /* will free ccline.cmdbuff after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 putting it in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 goto returncmd; /* back to cmd mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170 case Ctrl_R: /* insert register */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 putcmdline('"', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 ++no_mapping;
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
1176 i = c = plain_vgetc(); /* CTRL-R <char> */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1177 if (i == Ctrl_O)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 i = Ctrl_R; /* CTRL-R CTRL-O == CTRL-R CTRL-R */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 if (i == Ctrl_R)
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
1180 c = plain_vgetc(); /* CTRL-R CTRL-R <char> */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1181 --no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 * Insert the result of an expression.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 * Need to save the current command line, to be able to enter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 * a new one...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 new_cmdpos = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 if (ccline.cmdfirstc == '=')/* can't do this recursively */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 c = ESC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 {
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
1198 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 c = get_expr_register();
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
1200 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1201 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 if (c != ESC) /* use ESC to cancel inserting register */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 {
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1206 cmdline_paste(c, i == Ctrl_R, FALSE);
606
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1207
613
53114ef7778f updated for version 7.0174
vimboss
parents: 606
diff changeset
1208 #ifdef FEAT_EVAL
606
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1209 /* When there was a serious error abort getting the
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1210 * command line. */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1211 if (aborting())
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1212 {
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1213 gotesc = TRUE; /* will free ccline.cmdbuff after
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1214 putting it in history */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1215 goto returncmd; /* back to cmd mode */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1216 }
613
53114ef7778f updated for version 7.0174
vimboss
parents: 606
diff changeset
1217 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 KeyTyped = FALSE; /* Don't do p_wc completion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 if (new_cmdpos >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 /* set_cmdline_pos() was used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 if (new_cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 ccline.cmdpos = new_cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 case Ctrl_D:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 if (showmatches(&xpc, FALSE) == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 break; /* Use ^D as normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 continue; /* don't do incremental search now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 case K_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 case K_S_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 case K_C_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 if (ccline.cmdpos >= ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 i = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 if (KeyTyped && ccline.cmdspos + i >= Columns * Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 ccline.cmdspos += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
1253 ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 }
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1259 while ((c == K_S_RIGHT || c == K_C_RIGHT
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1260 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 && ccline.cmdbuff[ccline.cmdpos] != ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 case K_LEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 case K_S_LEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 case K_C_LEFT:
1456
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1271 if (ccline.cmdpos == 0)
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1272 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 --ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 if (has_mbyte) /* move to first byte of char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 ccline.cmdpos -= (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 ccline.cmdspos -= cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 }
1456
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1283 while (ccline.cmdpos > 0
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1284 && (c == K_S_LEFT || c == K_C_LEFT
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1285 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1286 && ccline.cmdbuff[ccline.cmdpos - 1] != ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 case K_IGNORE:
1472
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
1294 /* Ignore mouse event or ex_window() result. */
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
1295 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1296
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1297 #ifdef FEAT_GUI_W32
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1298 /* On Win32 ignore <M-F4>, we get it when closing the window was
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1299 * cancelled. */
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1300 case K_F4:
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1301 if (mod_mask == MOD_MASK_ALT)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1302 {
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1303 redrawcmd(); /* somehow the cmdline is cleared */
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1304 goto cmdline_not_changed;
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1305 }
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1306 break;
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1307 #endif
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1308
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 case K_MIDDLEDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 case K_MIDDLERELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 goto cmdline_not_changed; /* Ignore mouse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 case K_MIDDLEMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 /* When GUI is active, also paste when 'mouse' is empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 if (!mouse_has(MOUSE_COMMAND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 goto cmdline_not_changed; /* Ignore mouse */
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1321 # ifdef FEAT_CLIPBOARD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1322 if (clip_star.available)
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1323 cmdline_paste('*', TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1324 else
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1325 # endif
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1326 cmdline_paste(0, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1327 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1330 # ifdef FEAT_DND
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1331 case K_DROP:
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1332 cmdline_paste('~', TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 goto cmdline_changed;
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1335 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 case K_LEFTDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 case K_LEFTRELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 case K_RIGHTDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 case K_RIGHTRELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 /* Ignore drag and release events when the button-down wasn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 * seen before. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 if (ignore_drag_release)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 /* FALLTHROUGH */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 case K_LEFTMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 case K_RIGHTMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 if (c == K_LEFTRELEASE || c == K_RIGHTRELEASE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 ignore_drag_release = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 /* When GUI is active, also move when 'mouse' is empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 if (!mouse_has(MOUSE_COMMAND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 goto cmdline_not_changed; /* Ignore mouse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 # ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 if (mouse_row < cmdline_row && clip_star.available)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 int button, is_click, is_drag;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 * Handle modeless selection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 button = get_mouse_button(KEY2TERMCAP1(c),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 &is_click, &is_drag);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 if (mouse_model_popup() && button == MOUSE_LEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 && (mod_mask & MOD_MASK_SHIFT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 /* Translate shift-left to right button. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 button = MOUSE_RIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 mod_mask &= ~MOD_MASK_SHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 clip_modeless(button, is_click, is_drag);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 for (ccline.cmdpos = 0; ccline.cmdpos < ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 ++ccline.cmdpos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 i = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 if (mouse_row <= cmdline_row + ccline.cmdspos / Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 && mouse_col < ccline.cmdspos % Columns + i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 break;
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1388 # ifdef FEAT_MBYTE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 /* Count ">" for double-wide char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 correct_cmdspos(ccline.cmdpos, i);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
1393 ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1394 + ccline.cmdpos) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 }
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1396 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1397 ccline.cmdspos += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401 /* Mouse scroll wheel: ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 case K_MOUSEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 case K_MOUSEUP:
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1404 case K_MOUSELEFT:
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1405 case K_MOUSERIGHT:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1406 /* Alternate buttons ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 case K_X1MOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 case K_X1DRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 case K_X1RELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 case K_X2MOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 case K_X2DRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 case K_X2RELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415 #endif /* FEAT_MOUSE */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 case K_LEFTMOUSE_NM: /* mousefocus click, ignored */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 case K_LEFTRELEASE_NM:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422 case K_VER_SCROLLBAR:
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
1423 if (msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 gui_do_scroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 case K_HOR_SCROLLBAR:
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
1431 if (msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 {
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1433 gui_do_horiz_scroll(scrollbar_value, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 #endif
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1438 #ifdef FEAT_GUI_TABLINE
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1439 case K_TABLINE:
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1440 case K_TABMENU:
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1441 /* Don't want to change any tabs here. Make sure the same tab
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1442 * is still selected. */
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1443 if (gui_use_tabline())
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1444 gui_mch_set_curtab(tabpage_index(curtab));
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1445 goto cmdline_not_changed;
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1446 #endif
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1447
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1448 case K_SELECT: /* end of Select mode mapping - ignore */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451 case Ctrl_B: /* begin of command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 case K_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 case K_KHOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 case K_S_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 case K_C_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 ccline.cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460 case Ctrl_E: /* end of command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 case K_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 case K_KEND:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 case K_S_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 case K_C_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469 case Ctrl_A: /* all matches */
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1470 if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1471 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1474 case Ctrl_L:
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1475 #ifdef FEAT_SEARCH_EXTRA
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1476 if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1477 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1478 /* Add a character from under the cursor for 'incsearch' */
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1479 if (did_incsearch)
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1480 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1481 curwin->w_cursor = match_end;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1482 if (!equalpos(curwin->w_cursor, search_start))
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1483 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1484 c = gchar_cursor();
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1485 /* If 'ignorecase' and 'smartcase' are set and the
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1486 * command line has no uppercase characters, convert
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1487 * the character to lowercase */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1488 if (p_ic && p_scs
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1489 && !pat_has_uppercase(ccline.cmdbuff))
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1490 c = MB_TOLOWER(c);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1491 if (c != NUL)
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1492 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1493 if (c == firstc || vim_strchr((char_u *)(
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1494 p_magic ? "\\^$.*[" : "\\^$"), c)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1495 != NULL)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1496 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1497 /* put a backslash before special
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1498 * characters */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1499 stuffcharReadbuff(c);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1500 c = '\\';
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1501 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1502 break;
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1503 }
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1504 }
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1505 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1506 goto cmdline_not_changed;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1507 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1508 #endif
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1509
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1510 /* completion: longest common part */
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1511 if (nextwild(&xpc, WILD_LONGEST, 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1512 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515 case Ctrl_N: /* next match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 case Ctrl_P: /* previous match */
9976
e448370630b2 commit https://github.com/vim/vim/commit/7df0f6313a46b80d760c9a80241922544333351c
Christian Brabandt <cb@256bit.org>
parents: 9971
diff changeset
1517 if (xpc.xp_numfiles > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 {
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1519 if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1520 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521 break;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1522 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 }
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1524 /* FALLTHROUGH */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 case K_UP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 case K_DOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 case K_S_UP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 case K_S_DOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 case K_PAGEUP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 case K_KPAGEUP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 case K_PAGEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 case K_KPAGEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 if (hislen == 0 || firstc == NUL) /* no history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538 i = hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540 /* save current command string so it can be restored later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 if (lookfor == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 if ((lookfor = vim_strsave(ccline.cmdbuff)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 lookfor[ccline.cmdpos] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548 j = (int)STRLEN(lookfor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 /* one step backwards */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
1552 if (c == K_UP|| c == K_S_UP || c == Ctrl_P
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1553 || c == K_PAGEUP || c == K_KPAGEUP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1554 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 if (hiscnt == hislen) /* first time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 hiscnt = hisidx[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 else if (hiscnt == 0 && hisidx[histype] != hislen - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 hiscnt = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 else if (hiscnt != hisidx[histype] + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 --hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 else /* at top of list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 hiscnt = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 else /* one step forwards */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 /* on last entry, clear the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 if (hiscnt == hisidx[histype])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 hiscnt = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576 /* not on a history line, nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 if (hiscnt == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 if (hiscnt == hislen - 1) /* wrap around */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 hiscnt = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 ++hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 hiscnt = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
1589 if ((c != K_UP && c != K_DOWN)
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1590 || hiscnt == i
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1591 || STRNCMP(history[histype][hiscnt].hisstr,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 lookfor, (size_t)j) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596 if (hiscnt != i) /* jumped to other entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 int old_firstc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 vim_free(ccline.cmdbuff);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
1603 xpc.xp_context = EXPAND_NOTHING;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 if (hiscnt == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 p = lookfor; /* back to the old one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 p = history[histype][hiscnt].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 if (histype == HIST_SEARCH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 && p != lookfor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 && (old_firstc = p[STRLEN(p) + 1]) != firstc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 /* Correct for the separator character used when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 * adding the history entry vs the one used now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 * First loop: count length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 * Second loop: copy the characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 for (i = 0; i <= 1; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 for (j = 0; p[j] != NUL; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 /* Replace old sep with new sep, unless it is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 * escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 if (p[j] == old_firstc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 && (j == 0 || p[j - 1] != '\\'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 ccline.cmdbuff[len] = firstc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 /* Escape new sep, unless it is already
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 * escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 if (p[j] == firstc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 && (j == 0 || p[j - 1] != '\\'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 ccline.cmdbuff[len] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 ccline.cmdbuff[len] = p[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 if (i == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 alloc_cmdbuff(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 goto returncmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 ccline.cmdbuff[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 alloc_cmdbuff((int)STRLEN(p));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 goto returncmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 STRCPY(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 ccline.cmdpos = ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 beep_flush();
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1668 #endif
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1669 goto cmdline_not_changed;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1670
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1671 #ifdef FEAT_SEARCH_EXTRA
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1672 case Ctrl_G: /* next match */
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1673 case Ctrl_T: /* previous match */
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1674 if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1675 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1676 pos_T t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1677 int search_flags = SEARCH_KEEP + SEARCH_NOOF
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1678 + SEARCH_PEEK;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1679
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1680 if (char_avail())
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1681 continue;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1682 cursor_off();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1683 out_flush();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1684 if (c == Ctrl_G)
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1685 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1686 t = match_end;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1687 search_flags += SEARCH_COL;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1688 }
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1689 else
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1690 t = match_start;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1691 ++emsg_off;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1692 i = searchit(curwin, curbuf, &t,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1693 c == Ctrl_G ? FORWARD : BACKWARD,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1694 ccline.cmdbuff, count, search_flags,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1695 RE_SEARCH, 0, NULL);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1696 --emsg_off;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1697 if (i)
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1698 {
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1699 search_start = match_start;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1700 match_end = t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1701 match_start = t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1702 if (c == Ctrl_T && firstc == '/')
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1703 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1704 /* move just before the current match, so that
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1705 * when nv_search finishes the cursor will be
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1706 * put back on the match */
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1707 search_start = t;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1708 (void)decl(&search_start);
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1709 }
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1710 if (lt(t, search_start) && c == Ctrl_G)
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1711 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1712 /* wrap around */
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1713 search_start = t;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1714 if (firstc == '?')
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1715 (void)incl(&search_start);
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1716 else
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1717 (void)decl(&search_start);
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1718 }
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1719
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1720 set_search_match(&match_end);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1721 curwin->w_cursor = match_start;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1722 changed_cline_bef_curs();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1723 update_topline();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1724 validate_cursor();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1725 highlight_match = TRUE;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1726 old_curswant = curwin->w_curswant;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1727 old_leftcol = curwin->w_leftcol;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1728 old_topline = curwin->w_topline;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1729 # ifdef FEAT_DIFF
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1730 old_topfill = curwin->w_topfill;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1731 # endif
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1732 old_botline = curwin->w_botline;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1733 update_screen(NOT_VALID);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1734 redrawcmdline();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1735 }
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1736 else
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1737 vim_beep(BO_ERROR);
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1738 goto cmdline_not_changed;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1739 }
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1740 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 case Ctrl_V:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 case Ctrl_Q:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 putcmdline('^', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 c = get_literal(); /* get next (two) character(s) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 do_abbr = FALSE; /* don't do abbreviation now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 /* may need to remove ^ when composing char was typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 if (enc_utf8 && utf_iscomposing(c) && !cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 case Ctrl_K:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 putcmdline('?', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 c = get_digraph(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 if (c != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 #endif /* FEAT_DIGRAPHS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 case Ctrl__: /* CTRL-_: switch language mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 if (!p_ari)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 break;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1783 # ifdef FEAT_FKMAP
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 if (p_altkeymap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 cmd_fkmap = !cmd_fkmap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 if (cmd_fkmap) /* in Farsi always in Insert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 ccline.overstrike = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 else /* Hebrew is default */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1791 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 cmd_hkmap = !cmd_hkmap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1797 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1798 if (c == intr_char)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1800 gotesc = TRUE; /* will free ccline.cmdbuff after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 putting it in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 goto returncmd; /* back to Normal mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 * Normal character with no special meaning. Just set mod_mask
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 * to 0x0 so that typing Shift-Space in the GUI doesn't enter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 * the string <S-Space>. This should only happen after ^V.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 if (!IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 mod_mask = 0x0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 * End of switch on command line character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 * We come here if we have a normal character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818
4980
9ae0fe467776 updated for version 7.3.1235
Bram Moolenaar <bram@vim.org>
parents: 4903
diff changeset
1819 if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && (ccheck_abbr(
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 /* Add ABBR_OFF for characters above 0x100, this is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 * what check_abbr() expects. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 #endif
4980
9ae0fe467776 updated for version 7.3.1235
Bram Moolenaar <bram@vim.org>
parents: 4903
diff changeset
1825 c) || c == Ctrl_RSB))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 * put the character in the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 if (IS_SPECIAL(c) || mod_mask != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832 put_on_cmdline(get_special_key_name(c, mod_mask), -1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 j = (*mb_char2bytes)(c, IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 IObuff[j] = NUL; /* exclude composing chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 put_on_cmdline(IObuff, j, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 IObuff[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 put_on_cmdline(IObuff, 1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 * This part implements incremental searches for "/" and "?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 * Jump to cmdline_not_changed when a character has been read but the command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 * line did not change. Then we only search and redraw if something changed in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 * the past.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 * Jump to cmdline_changed when the command line did change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 * (Sorry for the goto's, I know it is ugly).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 cmdline_not_changed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 if (!incsearch_postponed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 cmdline_changed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 * 'incsearch' highlighting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 {
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1872 pos_T end_pos;
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1873 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1874 proftime_T tm;
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1875 #endif
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1876
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1877 /* if there is a character waiting, search and redraw later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1878 if (char_avail())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1879 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1880 incsearch_postponed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1881 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 incsearch_postponed = FALSE;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1884 curwin->w_cursor = search_start; /* start at old position */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 /* If there is no command line, don't do anything */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 if (ccline.cmdlen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1889 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 cursor_off(); /* so the user knows we're busy */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 ++emsg_off; /* So it doesn't beep if bad expr */
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1894 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1895 /* Set the time limit to half a second. */
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1896 profile_setlimit(500L, &tm);
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1897 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 i = do_search(NULL, firstc, ccline.cmdbuff, count,
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1899 SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK,
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1900 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1901 &tm
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1902 #else
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1903 NULL
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1904 #endif
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1905 );
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1906 --emsg_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 /* if interrupted while searching, behave like it failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 (void)vpeekc(); /* remove <C-C> from input stream */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 got_int = FALSE; /* don't abandon the command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 else if (char_avail())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 /* cancelled searching because a char was typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 incsearch_postponed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 }
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1918 if (i != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 highlight_match = TRUE; /* highlight position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 highlight_match = FALSE; /* remove highlight */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1923 /* first restore the old curwin values, so the screen is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 * positioned in the same way as the actual search command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 curwin->w_leftcol = old_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 curwin->w_topline = old_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 curwin->w_topfill = old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 curwin->w_botline = old_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 changed_cline_bef_curs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 update_topline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 {
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1936 pos_T save_pos = curwin->w_cursor;
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1937
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1938 match_start = curwin->w_cursor;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1939 set_search_match(&curwin->w_cursor);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 validate_cursor();
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1941 end_pos = curwin->w_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1942 match_end = end_pos;
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1943 curwin->w_cursor = save_pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1944 }
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 782
diff changeset
1945 else
95dac6af3b3a updated for version 7.0232
vimboss
parents: 782
diff changeset
1946 end_pos = curwin->w_cursor; /* shutup gcc 4 */
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1947
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1948 validate_cursor();
979
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1949 # ifdef FEAT_WINDOWS
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1950 /* May redraw the status line to show the cursor position. */
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1951 if (p_ru && curwin->w_status_height > 0)
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1952 curwin->w_redr_status = TRUE;
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1953 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1954
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1955 save_cmdline(&save_ccline);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
1956 update_screen(SOME_VALID);
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1957 restore_cmdline(&save_ccline);
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1958
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1959 /* Leave it at the end to make CTRL-R CTRL-W work. */
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1960 if (i != 0)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1961 curwin->w_cursor = end_pos;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1962
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1963 msg_starthere();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1964 redrawcmdline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1965 did_incsearch = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1966 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1967 #else /* FEAT_SEARCH_EXTRA */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 if (cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 # ifdef FEAT_ARABIC
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
1974 || (p_arshape && !p_tbidi && enc_utf8)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 /* Always redraw the whole command line to fix shaping and
3374
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1978 * right-left typing. Not efficient, but it works.
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1979 * Do it only when there are no characters left to read
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1980 * to avoid useless intermediate redraws. */
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1981 if (vpeekc() == NUL)
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1982 redrawcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1983 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1985
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1986 returncmd:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1987
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 cmdmsg_rl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 cmd_fkmap = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996 ExpandCleanup(&xpc);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
1997 ccline.xpc = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000 if (did_incsearch)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2002 if (gotesc)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2003 curwin->w_cursor = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2004 else
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2005 {
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2006 if (!equalpos(save_cursor, search_start))
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2007 {
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2008 /* put the '" mark at the original position */
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2009 curwin->w_cursor = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2010 setpcmark();
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2011 }
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2012 curwin->w_cursor = search_start;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2013 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 curwin->w_curswant = old_curswant;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 curwin->w_leftcol = old_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2016 curwin->w_topline = old_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2018 curwin->w_topfill = old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 curwin->w_botline = old_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 highlight_match = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 validate_cursor(); /* needed for TAB */
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
2023 redraw_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 if (ccline.cmdbuff != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2028 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 * Put line in history buffer (":" and "=" only when it was typed).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 if (ccline.cmdlen && firstc != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 && (some_key_typed || histype == HIST_SEARCH))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 add_to_history(histype, ccline.cmdbuff, TRUE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 histype == HIST_SEARCH ? firstc : NUL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 if (firstc == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 vim_free(new_last_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 new_last_cmdline = vim_strsave(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 if (gotesc) /* abandon command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 vim_free(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 ccline.cmdbuff = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 if (msg_scrolled == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 compute_cmdrow();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 MSG("");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 * If the screen was shifted up, redraw the whole screen (later).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 * If the line is too long, clear it, so ruler and shown command do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 * not get printed in the middle of it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 redir_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 /* When the command line was typed, no need for a wait-return prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 if (some_key_typed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 State = save_State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 im_save_status(b_im_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074 im_set_active(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2083 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2084 char_u *p = ccline.cmdbuff;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2085
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2086 /* Make ccline empty, getcmdline() may try to use it. */
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2087 ccline.cmdbuff = NULL;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2088 return p;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2089 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2091
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2092 #if (defined(FEAT_CRYPT) || defined(FEAT_EVAL)) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2093 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094 * Get a command line with a prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 * This is prepared to be called recursively from getcmdline() (e.g. by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 * f_input() when evaluating an expression from CTRL-R =).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 * Returns the command line in allocated memory, or NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2100 getcmdline_prompt(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2101 int firstc,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2102 char_u *prompt, /* command line prompt */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2103 int attr, /* attributes for prompt */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2104 int xp_context, /* type of expansion */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2105 char_u *xp_arg) /* user-defined expansion argument */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2108 struct cmdline_info save_ccline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 int msg_col_save = msg_col;
8694
f2e81ae5ab48 commit https://github.com/vim/vim/commit/6135d0d803084f6c2dd8672df1bef4c6e58f9e19
Christian Brabandt <cb@256bit.org>
parents: 8647
diff changeset
2110 int msg_silent_save = msg_silent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2112 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 ccline.cmdprompt = prompt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 ccline.cmdattr = attr;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2115 # ifdef FEAT_EVAL
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2116 ccline.xp_context = xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2117 ccline.xp_arg = xp_arg;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2118 ccline.input_fn = (firstc == '@');
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2119 # endif
8694
f2e81ae5ab48 commit https://github.com/vim/vim/commit/6135d0d803084f6c2dd8672df1bef4c6e58f9e19
Christian Brabandt <cb@256bit.org>
parents: 8647
diff changeset
2120 msg_silent = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 s = getcmdline(firstc, 1L, 0);
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2122 restore_cmdline(&save_ccline);
8694
f2e81ae5ab48 commit https://github.com/vim/vim/commit/6135d0d803084f6c2dd8672df1bef4c6e58f9e19
Christian Brabandt <cb@256bit.org>
parents: 8647
diff changeset
2123 msg_silent = msg_silent_save;
3020
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2124 /* Restore msg_col, the prompt from input() may have changed it.
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2125 * But only if called recursively and the commandline is therefore being
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2126 * restored to an old one; if not, the input() prompt stays on the screen,
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2127 * so we need its modified msg_col left intact. */
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2128 if (ccline.cmdbuff != NULL)
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2129 msg_col = msg_col_save;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2133 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2134
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2135 /*
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2136 * Return TRUE when the text must not be changed and we can't switch to
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2137 * another window or buffer. Used when editing the command line, evaluating
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2138 * 'balloonexpr', etc.
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2139 */
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2140 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2141 text_locked(void)
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2142 {
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2143 #ifdef FEAT_CMDWIN
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2144 if (cmdwin_type != 0)
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2145 return TRUE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2146 #endif
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2147 return textlock != 0;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2148 }
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2149
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2150 /*
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2151 * Give an error message for a command that isn't allowed while the cmdline
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2152 * window is open or editing the cmdline in another way.
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2153 */
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2154 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2155 text_locked_msg(void)
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2156 {
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2157 EMSG(_(get_text_locked_msg()));
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2158 }
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2159
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2160 char_u *
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2161 get_text_locked_msg(void)
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2162 {
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2163 #ifdef FEAT_CMDWIN
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2164 if (cmdwin_type != 0)
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2165 return e_cmdwin;
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2166 #endif
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2167 return e_secure;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2168 }
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2169
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2170 #if defined(FEAT_AUTOCMD) || defined(PROTO)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2171 /*
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2172 * Check if "curbuf_lock" or "allbuf_lock" is set and return TRUE when it is
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2173 * and give an error message.
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2174 */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2175 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2176 curbuf_locked(void)
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2177 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2178 if (curbuf_lock > 0)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2179 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2180 EMSG(_("E788: Not allowed to edit another buffer now"));
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2181 return TRUE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2182 }
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2183 return allbuf_locked();
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2184 }
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2185
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2186 /*
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2187 * Check if "allbuf_lock" is set and return TRUE when it is and give an error
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2188 * message.
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2189 */
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2190 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2191 allbuf_locked(void)
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2192 {
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2193 if (allbuf_lock > 0)
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2194 {
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2195 EMSG(_("E811: Not allowed to change buffer information now"));
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2196 return TRUE;
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2197 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2198 return FALSE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2199 }
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2200 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2201
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2203 cmdline_charsize(int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 if (cmdline_star > 0) /* showing '*', always 1 position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 return ptr2cells(ccline.cmdbuff + idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 * Compute the offset of the cursor on the command line for the prompt and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 * indent.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2217 set_cmdspos(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 {
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2219 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 ccline.cmdspos = 1 + ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 ccline.cmdspos = 0 + ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 * Compute the screen position for the cursor on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2229 set_cmdspos_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 int i, m, c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 if (KeyTyped)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2235 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 m = Columns * Rows;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2237 if (m < 0) /* overflow, Columns or Rows at weird value */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2238 m = MAXCOL;
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2239 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 m = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 for (i = 0; i < ccline.cmdlen && i < ccline.cmdpos; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2243 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 c = cmdline_charsize(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2245 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 /* Count ">" for double-wide multi-byte char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 correct_cmdspos(i, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 #endif
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
2250 /* If the cmdline doesn't fit, show cursor on last visible char.
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
2251 * Don't move the cursor itself, so we can still append. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 if ((ccline.cmdspos += c) >= m)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 ccline.cmdspos -= c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2259 i += (*mb_ptr2len)(ccline.cmdbuff + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 * Check if the character at "idx", which is "cells" wide, is a multi-byte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 * character that doesn't fit, so that a ">" must be displayed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2270 correct_cmdspos(int idx, int cells)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2272 if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 && (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 && ccline.cmdspos % Columns + cells > Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 ccline.cmdspos++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 * Get an Ex command line for the ":" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2283 getexline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2284 int c, /* normally ':', NUL for ":append" */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2285 void *cookie UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2286 int indent) /* indent for inside conditionals */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 /* When executing a register, remove ':' that's in front of each line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 if (exec_from_reg && vpeekc() == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 (void)vgetc();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 return getcmdline(c, 1L, indent);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 * Get an Ex command line for Ex mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 * In Ex mode we only use the OS supplied line editing features and no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 * mappings or abbreviations.
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2298 * Returns a string in allocated memory or NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2301 getexmodeline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2302 int promptc, /* normally ':', NUL for ":append" and '?' for
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2303 :s prompt */
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2304 void *cookie UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2305 int indent) /* indent for inside conditionals */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2307 garray_T line_ga;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2308 char_u *pend;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2309 int startcol = 0;
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2310 int c1 = 0;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2311 int escaped = FALSE; /* CTRL-V typed */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2312 int vcol = 0;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2313 char_u *p;
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2314 int prev_char;
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2315 int len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 /* Switch cursor on now. This avoids that it happens after the "\n", which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 * confuses the system function that computes tabstops. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 cursor_on();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 /* always start in column 0; write a newline if necessary */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 compute_cmdrow();
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2323 if ((msg_col || msg_didout) && promptc != '?')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 msg_putchar('\n');
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2325 if (promptc == ':')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 {
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2327 /* indent that is only displayed, not in the line itself */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2328 if (p_prompt)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2329 msg_putchar(':');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2330 while (indent-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 startcol = msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2333 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 ga_init2(&line_ga, 1, 30);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2337 /* autoindent for :insert and :append is in the line itself */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2338 if (promptc <= 0)
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2339 {
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2340 vcol = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2341 while (indent >= 8)
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2342 {
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2343 ga_append(&line_ga, TAB);
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2344 msg_puts((char_u *)" ");
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2345 indent -= 8;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2346 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2347 while (indent-- > 0)
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2348 {
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2349 ga_append(&line_ga, ' ');
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2350 msg_putchar(' ');
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2351 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2352 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2353 ++no_mapping;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2354 ++allow_keys;
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2355
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2356 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 * Get the line, one character at a time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 got_int = FALSE;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2360 while (!got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 {
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2362 long sw;
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2363 char_u *s;
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2364
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 if (ga_grow(&line_ga, 40) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2366 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2368 /* Get one character at a time. Don't use inchar(), it can't handle
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2369 * special characters. */
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2370 prev_char = c1;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2371 c1 = vgetc();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 /*
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2374 * Handle line editing.
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2375 * Previously this was left to the system, putting the terminal in
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2376 * cooked mode, but then CTRL-D and CTRL-T can't be used properly.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2378 if (got_int)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2379 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2380 msg_putchar('\n');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2381 break;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2382 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2383
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2384 if (!escaped)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2386 /* CR typed means "enter", which is NL */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2387 if (c1 == '\r')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2388 c1 = '\n';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2389
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2390 if (c1 == BS || c1 == K_BS
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2391 || c1 == DEL || c1 == K_DEL || c1 == K_KDEL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2393 if (line_ga.ga_len > 0)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2394 {
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2395 #ifdef FEAT_MBYTE
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2396 if (has_mbyte)
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2397 {
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2398 p = (char_u *)line_ga.ga_data;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2399 p[line_ga.ga_len] = NUL;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2400 len = (*mb_head_off)(p, p + line_ga.ga_len - 1) + 1;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2401 line_ga.ga_len -= len;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2402 }
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2403 else
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2404 #endif
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2405 --line_ga.ga_len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2406 goto redraw;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2407 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2408 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2410
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2411 if (c1 == Ctrl_U)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2413 msg_col = startcol;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2414 msg_clr_eos();
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2415 line_ga.ga_len = 0;
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2416 goto redraw;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2417 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2418
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2419 if (c1 == Ctrl_T)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2420 {
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2421 sw = get_sw_value(curbuf);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2422 p = (char_u *)line_ga.ga_data;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2423 p[line_ga.ga_len] = NUL;
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2424 indent = get_indent_str(p, 8, FALSE);
3740
7de7ef01288d updated for version 7.3.629
Bram Moolenaar <bram@vim.org>
parents: 3628
diff changeset
2425 indent += sw - indent % sw;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2426 add_indent:
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2427 while (get_indent_str(p, 8, FALSE) < indent)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428 {
7009
286fd54c7ae3 patch 7.4.822
Bram Moolenaar <bram@vim.org>
parents: 6949
diff changeset
2429 (void)ga_grow(&line_ga, 2); /* one more for the NUL */
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2430 p = (char_u *)line_ga.ga_data;
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2431 s = skipwhite(p);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2432 mch_memmove(s + 1, s, line_ga.ga_len - (s - p) + 1);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2433 *s = ' ';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2434 ++line_ga.ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2436 redraw:
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2437 /* redraw the line */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2438 msg_col = startcol;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2439 vcol = 0;
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2440 p = (char_u *)line_ga.ga_data;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2441 p[line_ga.ga_len] = NUL;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2442 while (p < (char_u *)line_ga.ga_data + line_ga.ga_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2444 if (*p == TAB)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2446 do
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2447 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2448 msg_putchar(' ');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2449 } while (++vcol % 8);
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2450 ++p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2451 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2452 else
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2453 {
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2454 len = MB_PTR2LEN(p);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2455 msg_outtrans_len(p, len);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2456 vcol += ptr2cells(p);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2457 p += len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2458 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2459 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2460 msg_clr_eos();
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2461 windgoto(msg_row, msg_col);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2462 continue;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2463 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2464
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2465 if (c1 == Ctrl_D)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2466 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2467 /* Delete one shiftwidth. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2468 p = (char_u *)line_ga.ga_data;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2469 if (prev_char == '0' || prev_char == '^')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2470 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2471 if (prev_char == '^')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2472 ex_keep_indent = TRUE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2473 indent = 0;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2474 p[--line_ga.ga_len] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2478 p[line_ga.ga_len] = NUL;
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2479 indent = get_indent_str(p, 8, FALSE);
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2480 if (indent > 0)
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2481 {
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2482 --indent;
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2483 indent -= indent % get_sw_value(curbuf);
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2484 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2485 }
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2486 while (get_indent_str(p, 8, FALSE) > indent)
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2487 {
6733
5f6077b10738 patch 7.4.690 for Problem: Memory access errors when changing indent in Ex mode. Also missing
Bram Moolenaar <bram@vim.org>
parents: 6695
diff changeset
2488 s = skipwhite(p);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2489 mch_memmove(s - 1, s, line_ga.ga_len - (s - p) + 1);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2490 --line_ga.ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2492 goto add_indent;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2493 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2494
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2495 if (c1 == Ctrl_V || c1 == Ctrl_Q)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2496 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2497 escaped = TRUE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2498 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2500
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2501 /* Ignore special key codes: mouse movement, K_IGNORE, etc. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2502 if (IS_SPECIAL(c1))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2503 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2505
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2506 if (IS_SPECIAL(c1))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2507 c1 = '?';
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2508 #ifdef FEAT_MBYTE
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2509 if (has_mbyte)
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2510 len = (*mb_char2bytes)(c1,
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2511 (char_u *)line_ga.ga_data + line_ga.ga_len);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2512 else
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2513 #endif
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2514 {
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2515 len = 1;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2516 ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2517 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2518 if (c1 == '\n')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2519 msg_putchar('\n');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2520 else if (c1 == TAB)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2521 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2522 /* Don't use chartabsize(), 'ts' can be different */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2523 do
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2524 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2525 msg_putchar(' ');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2526 } while (++vcol % 8);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2527 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2530 msg_outtrans_len(
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2531 ((char_u *)line_ga.ga_data) + line_ga.ga_len, len);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2532 vcol += char2cells(c1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2533 }
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2534 line_ga.ga_len += len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2535 escaped = FALSE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2536
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2537 windgoto(msg_row, msg_col);
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2538 pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2539
2590
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2540 /* We are done when a NL is entered, but not when it comes after an
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2541 * odd number of backslashes, that results in a NUL. */
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2542 if (line_ga.ga_len > 0 && pend[-1] == '\n')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 {
2590
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2544 int bcount = 0;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2545
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2546 while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2547 ++bcount;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2548
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2549 if (bcount > 0)
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2550 {
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2551 /* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2552 * "\NL", etc. */
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2553 line_ga.ga_len -= (bcount + 1) / 2;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2554 pend -= (bcount + 1) / 2;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2555 pend[-1] = '\n';
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2556 }
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2557
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2558 if ((bcount & 1) == 0)
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2559 {
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2560 --line_ga.ga_len;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2561 --pend;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2562 *pend = NUL;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2563 break;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2564 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2568 --no_mapping;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2569 --allow_keys;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2570
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 /* make following messages go to the next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 if (msg_row < Rows - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 emsg_on_display = FALSE; /* don't want ui_delay() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 ga_clear(&line_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 return (char_u *)line_ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 481
diff changeset
2584 # if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 481
diff changeset
2585 || defined(FEAT_MOUSESHAPE) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 * Return TRUE if ccline.overstrike is on.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2590 cmdline_overstrike(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 return ccline.overstrike;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 * Return TRUE if the cursor is at the end of the cmdline.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2599 cmdline_at_end(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601 return (ccline.cmdpos >= ccline.cmdlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2603 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
2605 #if (defined(FEAT_XIM) && (defined(FEAT_GUI_GTK))) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 * Return the virtual column number at the current cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 * This is used by the IM code to obtain the start of the preedit string.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 colnr_T
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2611 cmdline_getvcol_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 if (ccline.cmdbuff == NULL || ccline.cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 return MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2617 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 for (col = 0; i < ccline.cmdpos; ++col)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2623 i += (*mb_ptr2len)(ccline.cmdbuff + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 return col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2627 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 return ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635 * If part of the command line is an IM preedit string, redraw it with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 * IM feedback attributes. The cursor position is restored after drawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2639 redrawcmd_preedit(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 if ((State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642 && xic != NULL
976
727ab557c58a updated for version 7.0-102
vimboss
parents: 972
diff changeset
2643 /* && im_get_status() doesn't work when using SCIM */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 && !p_imdisable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 && im_is_preediting())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 int cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 int cmdspos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 int old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 int old_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 old_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 old_col = msg_col;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2655 cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 for (col = 0; col < preedit_start_col
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661 && cmdpos < ccline.cmdlen; ++col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 cmdspos += (*mb_ptr2cells)(ccline.cmdbuff + cmdpos);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2664 cmdpos += (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670 cmdspos += preedit_start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 cmdpos += preedit_start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 msg_row = cmdline_row + (cmdspos / (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 msg_col = cmdspos % (int)Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 for (col = 0; cmdpos < ccline.cmdlen; ++col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 int char_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 int char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 char_attr = im_get_feedback_attr(col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 if (char_attr < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 break; /* end of preedit string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2690 char_len = (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2692 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 char_len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 msg_outtrans_len_attr(ccline.cmdbuff + cmdpos, char_len, char_attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696 cmdpos += char_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 msg_row = old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 msg_col = old_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 #endif /* FEAT_XIM && FEAT_GUI_GTK */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 * Allocate a new command line buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 * Assigns the new buffer to ccline.cmdbuff and ccline.cmdbufflen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2708 * Returns the new value of ccline.cmdbuff and ccline.cmdbufflen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2711 alloc_cmdbuff(int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 * give some extra space to avoid having to allocate all the time
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 if (len < 80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 len = 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 len += 20;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 ccline.cmdbuff = alloc(len); /* caller should check for out-of-memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 ccline.cmdbufflen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723 }
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 * Re-allocate the command line to length len + something extra.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2729 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2730 realloc_cmdbuff(int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2734 if (len < ccline.cmdbufflen)
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2735 return OK; /* no need to resize */
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2736
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 p = ccline.cmdbuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738 alloc_cmdbuff(len); /* will get some more */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 if (ccline.cmdbuff == NULL) /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 ccline.cmdbuff = p; /* keep the old one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 }
2556
e065501c703a Fix illegal memory access when using expressions in the command line.
Bram Moolenaar <bram@vim.org>
parents: 2534
diff changeset
2744 /* There isn't always a NUL after the command, but it may need to be
e065501c703a Fix illegal memory access when using expressions in the command line.
Bram Moolenaar <bram@vim.org>
parents: 2534
diff changeset
2745 * there, thus copy up to the NUL and add a NUL. */
e065501c703a Fix illegal memory access when using expressions in the command line.
Bram Moolenaar <bram@vim.org>
parents: 2534
diff changeset
2746 mch_memmove(ccline.cmdbuff, p, (size_t)ccline.cmdlen);
e065501c703a Fix illegal memory access when using expressions in the command line.
Bram Moolenaar <bram@vim.org>
parents: 2534
diff changeset
2747 ccline.cmdbuff[ccline.cmdlen] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2748 vim_free(p);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2749
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2750 if (ccline.xpc != NULL
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2751 && ccline.xpc->xp_pattern != NULL
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2752 && ccline.xpc->xp_context != EXPAND_NOTHING
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2753 && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2754 {
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
2755 int i = (int)(ccline.xpc->xp_pattern - p);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2756
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2757 /* If xp_pattern points inside the old cmdbuff it needs to be adjusted
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2758 * to point into the newly allocated memory. */
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2759 if (i >= 0 && i <= ccline.cmdlen)
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2760 ccline.xpc->xp_pattern = ccline.cmdbuff + i;
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2761 }
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2762
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2763 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2765
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2766 #if defined(FEAT_ARABIC) || defined(PROTO)
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2767 static char_u *arshape_buf = NULL;
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2768
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2769 # if defined(EXITFREE) || defined(PROTO)
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2770 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2771 free_cmdline_buf(void)
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2772 {
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2773 vim_free(arshape_buf);
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2774 }
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2775 # endif
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2776 #endif
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2777
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2778 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2779 * Draw part of the cmdline at the current cursor position. But draw stars
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2780 * when cmdline_star is TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2783 draw_cmdline(int start, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2784 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2785 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2786 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2788 if (cmdline_star > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2789 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2790 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2791 msg_putchar('*');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2792 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2793 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2794 i += (*mb_ptr2len)(ccline.cmdbuff + start + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2795 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 if (p_arshape && !p_tbidi && enc_utf8 && len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2801 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 static int buflen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805 int newlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 int mb_l;
719
82ef0c58b012 updated for version 7.0219
vimboss
parents: 716
diff changeset
2807 int pc, pc1 = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 int prev_c = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 int prev_c1 = 0;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2810 int u8c;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2811 int u8cc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2812 int nc = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 * Do arabic shaping into a temporary buffer. This is very
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 * inefficient!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 */
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2818 if (len * 2 + 2 > buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 /* Re-allocate the buffer. We keep it around to avoid a lot of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 * alloc()/free() calls. */
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2822 vim_free(arshape_buf);
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2823 buflen = len * 2 + 2;
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2824 arshape_buf = alloc(buflen);
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2825 if (arshape_buf == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 return; /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2828
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2829 if (utf_iscomposing(utf_ptr2char(ccline.cmdbuff + start)))
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2830 {
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2831 /* Prepend a space to draw the leading composing char on. */
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2832 arshape_buf[0] = ' ';
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2833 newlen = 1;
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2834 }
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2835
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2836 for (j = start; j < start + len; j += mb_l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 p = ccline.cmdbuff + j;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2839 u8c = utfc_ptr2char_len(p, u8cc, start + len - j);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2840 mb_l = utfc_ptr2len_len(p, start + len - j);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2841 if (ARABIC_CHAR(u8c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2842 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2843 /* Do Arabic shaping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846 /* displaying from right to left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2847 pc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2848 pc1 = prev_c1;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2849 prev_c1 = u8cc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2850 if (j + mb_l >= start + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2851 nc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2852 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2853 nc = utf_ptr2char(p + mb_l);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2857 /* displaying from left to right */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2858 if (j + mb_l >= start + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 pc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 else
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2861 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2862 int pcc[MAX_MCO];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2863
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2864 pc = utfc_ptr2char_len(p + mb_l, pcc,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 start + len - j - mb_l);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2866 pc1 = pcc[0];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2867 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 nc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2872 u8c = arabic_shape(u8c, NULL, &u8cc[0], pc, pc1, nc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2874 newlen += (*mb_char2bytes)(u8c, arshape_buf + newlen);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2875 if (u8cc[0] != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2877 newlen += (*mb_char2bytes)(u8cc[0], arshape_buf + newlen);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2878 if (u8cc[1] != 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2879 newlen += (*mb_char2bytes)(u8cc[1],
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2880 arshape_buf + newlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2881 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2882 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2884 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2885 prev_c = u8c;
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2886 mch_memmove(arshape_buf + newlen, p, mb_l);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 newlen += mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2890
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2891 msg_outtrans_len(arshape_buf, newlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2892 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2893 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2895 msg_outtrans_len(ccline.cmdbuff + start, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2896 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2897
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2898 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 * Put a character on the command line. Shifts the following text to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 * right when "shift" is TRUE. Used for CTRL-V, CTRL-K, etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 * "c" must be printable (fit in one display cell)!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2904 putcmdline(int c, int shift)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2909 msg_putchar(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 if (shift)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2914 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2916 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2917 * Undo a putcmdline(c, FALSE).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2920 unputcmdline(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2922 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 if (ccline.cmdlen == ccline.cmdpos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 msg_putchar(' ');
3558
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2927 #ifdef FEAT_MBYTE
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2928 else if (has_mbyte)
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2929 draw_cmdline(ccline.cmdpos,
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2930 (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2931 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933 draw_cmdline(ccline.cmdpos, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2938 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 * Put the given string, of the given length, onto the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 * If len is -1, then STRLEN() is used to calculate the length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 * If 'redraw' is TRUE then the new part of the command line, and the remaining
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 * part will be redrawn, otherwise it will not. If this function is called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 * twice in a row, then 'redraw' should be FALSE and redrawcmd() should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 * called afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2945 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2946 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2947 put_on_cmdline(char_u *str, int len, int redraw)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2948 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2949 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 int m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955 len = (int)STRLEN(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 /* Check if ccline.cmdbuff needs to be longer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 if (ccline.cmdlen + len + 1 >= ccline.cmdbufflen)
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2959 retval = realloc_cmdbuff(ccline.cmdlen + len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2960 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 if (retval == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 if (!ccline.overstrike)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 mch_memmove(ccline.cmdbuff + ccline.cmdpos + len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 ccline.cmdbuff + ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 (size_t)(ccline.cmdlen - ccline.cmdpos));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 ccline.cmdlen += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 /* Count nr of characters in the new string. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2977 m = 0;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2978 for (i = 0; i < len; i += (*mb_ptr2len)(str + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 ++m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 /* Count nr of bytes in cmdline that are overwritten by these
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 * characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 for (i = ccline.cmdpos; i < ccline.cmdlen && m > 0;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2983 i += (*mb_ptr2len)(ccline.cmdbuff + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 --m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 if (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 mch_memmove(ccline.cmdbuff + ccline.cmdpos + len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 ccline.cmdbuff + i, (size_t)(ccline.cmdlen - i));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 ccline.cmdlen += ccline.cmdpos + len - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 ccline.cmdlen = ccline.cmdpos + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2996 if (ccline.cmdpos + len > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 ccline.cmdlen = ccline.cmdpos + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 mch_memmove(ccline.cmdbuff + ccline.cmdpos, str, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 ccline.cmdbuff[ccline.cmdlen] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 /* When the inserted text starts with a composing character,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 * backup to the character before it. There could be two of them.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 while (ccline.cmdpos > 0 && utf_iscomposing(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 i = (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 ccline.cmdbuff + ccline.cmdpos - 1) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 ccline.cmdpos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 len += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019 if (i == 0 && ccline.cmdpos > 0 && arabic_maycombine(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021 /* Check the previous character for Arabic combining pair. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 i = (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 ccline.cmdbuff + ccline.cmdpos - 1) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 if (arabic_combine(utf_ptr2char(ccline.cmdbuff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 + ccline.cmdpos - i), c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 ccline.cmdpos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 len += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 /* Also backup the cursor position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 i = ptr2cells(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 ccline.cmdspos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 msg_col -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 if (msg_col < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 msg_col += Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 --msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3048
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049 if (redraw && !cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 i = cmdline_row;
3114
5b53cea62e5d updated for version 7.3.328
Bram Moolenaar <bram@vim.org>
parents: 3106
diff changeset
3053 cursorcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 /* Avoid clearing the rest of the line too often. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 if (cmdline_row != i || ccline.overstrike)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 * If we are in Farsi command mode, the character input must be in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 * Insert mode. So do not advance the cmdpos.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 if (!cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 if (KeyTyped)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3069 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 m = Columns * Rows;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3071 if (m < 0) /* overflow, Columns or Rows at weird value */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3072 m = MAXCOL;
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3073 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 m = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 c = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 /* count ">" for a double-wide char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 correct_cmdspos(ccline.cmdpos, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 #endif
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3084 /* Stop cursor at the end of the screen, but do increment the
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3085 * insert position, so that entering a very long command
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3086 * works, even though you can't see it. */
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3087 if (ccline.cmdspos + c < m)
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3088 ccline.cmdspos += c;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3089 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3090 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3091 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
3092 c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 if (c > len - i - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 c = len - i - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 ccline.cmdpos += c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 i += c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3102 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3103 if (redraw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3104 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3105 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3106 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3108 static struct cmdline_info prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3109 static int prev_ccline_used = FALSE;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3110
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3111 /*
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3112 * Save ccline, because obtaining the "=" register may execute "normal :cmd"
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3113 * and overwrite it. But get_cmdline_str() may need it, thus make it
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3114 * available globally in prev_ccline.
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3115 */
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3116 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3117 save_cmdline(struct cmdline_info *ccp)
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3118 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3119 if (!prev_ccline_used)
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3120 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3121 vim_memset(&prev_ccline, 0, sizeof(struct cmdline_info));
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3122 prev_ccline_used = TRUE;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3123 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3124 *ccp = prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3125 prev_ccline = ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3126 ccline.cmdbuff = NULL;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3127 ccline.cmdprompt = NULL;
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
3128 ccline.xpc = NULL;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3129 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3130
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3131 /*
1214
a91a2e0c4108 updated for version 7.1b
vimboss
parents: 1039
diff changeset
3132 * Restore ccline after it has been saved with save_cmdline().
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3133 */
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3134 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3135 restore_cmdline(struct cmdline_info *ccp)
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3136 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3137 ccline = prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3138 prev_ccline = *ccp;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3139 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3140
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3141 #if defined(FEAT_EVAL) || defined(PROTO)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3142 /*
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3143 * Save the command line into allocated memory. Returns a pointer to be
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3144 * passed to restore_cmdline_alloc() later.
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3145 * Returns NULL when failed.
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3146 */
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3147 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3148 save_cmdline_alloc(void)
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3149 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3150 struct cmdline_info *p;
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3151
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3152 p = (struct cmdline_info *)alloc((unsigned)sizeof(struct cmdline_info));
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3153 if (p != NULL)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3154 save_cmdline(p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3155 return (char_u *)p;
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3156 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3157
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3158 /*
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3159 * Restore the command line from the return value of save_cmdline_alloc().
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3160 */
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3161 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3162 restore_cmdline_alloc(char_u *p)
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3163 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3164 if (p != NULL)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3165 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3166 restore_cmdline((struct cmdline_info *)p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3167 vim_free(p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3168 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3169 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3170 #endif
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3171
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3172 /*
7336
4c5f53a60543 commit https://github.com/vim/vim/commit/6f62fed349bf829da2adb02619dc9acba13c8ab6
Christian Brabandt <cb@256bit.org>
parents: 7250
diff changeset
3173 * Paste a yank register into the command line.
4c5f53a60543 commit https://github.com/vim/vim/commit/6f62fed349bf829da2adb02619dc9acba13c8ab6
Christian Brabandt <cb@256bit.org>
parents: 7250
diff changeset
3174 * Used by CTRL-R command in command-line mode.
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3175 * insert_reg() can't be used here, because special characters from the
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3176 * register contents will be interpreted as commands.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3177 *
7336
4c5f53a60543 commit https://github.com/vim/vim/commit/6f62fed349bf829da2adb02619dc9acba13c8ab6
Christian Brabandt <cb@256bit.org>
parents: 7250
diff changeset
3178 * Return FAIL for failure, OK otherwise.
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3179 */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3180 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3181 cmdline_paste(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3182 int regname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3183 int literally, /* Insert text literally instead of "as typed" */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3184 int remcr) /* remove trailing CR */
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3185 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3186 long i;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3187 char_u *arg;
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3188 char_u *p;
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3189 int allocated;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3190 struct cmdline_info save_ccline;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3191
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3192 /* check for valid regname; also accept special characters for CTRL-R in
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3193 * the command line */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3194 if (regname != Ctrl_F && regname != Ctrl_P && regname != Ctrl_W
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3195 && regname != Ctrl_A && !valid_yank_reg(regname, FALSE))
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3196 return FAIL;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3197
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3198 /* A register containing CTRL-R can cause an endless loop. Allow using
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3199 * CTRL-C to break the loop. */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3200 line_breakcheck();
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3201 if (got_int)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3202 return FAIL;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3203
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3204 #ifdef FEAT_CLIPBOARD
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3205 regname = may_get_selection(regname);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3206 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3207
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3208 /* Need to save and restore ccline. And set "textlock" to avoid nasty
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3209 * things like going to another buffer when evaluating an expression. */
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3210 save_cmdline(&save_ccline);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3211 ++textlock;
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3212 i = get_spec_reg(regname, &arg, &allocated, TRUE);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3213 --textlock;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3214 restore_cmdline(&save_ccline);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3215
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3216 if (i)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3217 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3218 /* Got the value of a special register in "arg". */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3219 if (arg == NULL)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3220 return FAIL;
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3221
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3222 /* When 'incsearch' is set and CTRL-R CTRL-W used: skip the duplicate
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3223 * part of the word. */
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3224 p = arg;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3225 if (p_is && regname == Ctrl_W)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3226 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3227 char_u *w;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3228 int len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3229
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3230 /* Locate start of last word in the cmd buffer. */
2937
0a650db02653 updated for version 7.3.241
Bram Moolenaar <bram@vim.org>
parents: 2931
diff changeset
3231 for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3232 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3233 #ifdef FEAT_MBYTE
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3234 if (has_mbyte)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3235 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3236 len = (*mb_head_off)(ccline.cmdbuff, w - 1) + 1;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3237 if (!vim_iswordc(mb_ptr2char(w - len)))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3238 break;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3239 w -= len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3240 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3241 else
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3242 #endif
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3243 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3244 if (!vim_iswordc(w[-1]))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3245 break;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3246 --w;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3247 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3248 }
2937
0a650db02653 updated for version 7.3.241
Bram Moolenaar <bram@vim.org>
parents: 2931
diff changeset
3249 len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3250 if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3251 p += len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3252 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3253
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3254 cmdline_paste_str(p, literally);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3255 if (allocated)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3256 vim_free(arg);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3257 return OK;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3258 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3259
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
3260 return cmdline_paste_reg(regname, literally, remcr);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3261 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3262
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3263 /*
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3264 * Put a string on the command line.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3265 * When "literally" is TRUE, insert literally.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3266 * When "literally" is FALSE, insert as typed, but don't leave the command
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3267 * line.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3268 */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3269 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3270 cmdline_paste_str(char_u *s, int literally)
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3271 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3272 int c, cv;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3273
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3274 if (literally)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3275 put_on_cmdline(s, -1, TRUE);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3276 else
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3277 while (*s != NUL)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3278 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3279 cv = *s;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3280 if (cv == Ctrl_V && s[1])
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3281 ++s;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3282 #ifdef FEAT_MBYTE
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3283 if (has_mbyte)
1606
9dd62cb57ed5 updated for version 7.1-319
vimboss
parents: 1590
diff changeset
3284 c = mb_cptr2char_adv(&s);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3285 else
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3286 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3287 c = *s++;
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
3288 if (cv == Ctrl_V || c == ESC || c == Ctrl_C
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
3289 || c == CAR || c == NL || c == Ctrl_L
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3290 #ifdef UNIX
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3291 || c == intr_char
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3292 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3293 || (c == Ctrl_BSL && *s == Ctrl_N))
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3294 stuffcharReadbuff(Ctrl_V);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3295 stuffcharReadbuff(c);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3296 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3297 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3298
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3299 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3300 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3301 * Delete characters on the command line, from "from" to the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3302 * position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3303 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3304 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3305 cmdline_del(int from)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3306 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3307 mch_memmove(ccline.cmdbuff + from, ccline.cmdbuff + ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3308 (size_t)(ccline.cmdlen - ccline.cmdpos + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3309 ccline.cmdlen -= ccline.cmdpos - from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3310 ccline.cmdpos = from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3312 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3314 /*
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
3315 * This function is called when the screen size changes and with incremental
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
3316 * search and in other situations where the command line may have been
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
3317 * overwritten.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3320 redrawcmdline(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3323 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 compute_cmdrow();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3331 redrawcmdprompt(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3333 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3335 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 return;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
3337 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3338 msg_putchar(ccline.cmdfirstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 if (ccline.cmdprompt != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3340 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3341 msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3342 ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3343 /* do the reverse of set_cmdspos() */
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
3344 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3345 --ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 for (i = ccline.cmdindent; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3349 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3350 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 * Redraw what is currently on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3356 redrawcmd(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360
683
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3361 /* when 'incsearch' is set there may be no command line while redrawing */
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3362 if (ccline.cmdbuff == NULL)
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3363 {
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3364 windgoto(cmdline_row, 0);
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3365 msg_clr_eos();
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3366 return;
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3367 }
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3368
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3369 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 redrawcmdprompt();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 /* Don't use more prompt, truncate the cmdline if it doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 draw_cmdline(0, ccline.cmdlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 set_cmdspos_cursor();
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 * An emsg() before may have set msg_scroll. This is used in normal mode,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 * in cmdline mode we can reset them now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384 msg_scroll = FALSE; /* next message overwrites cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3386 /* Typing ':' at the more prompt may set skip_redraw. We don't want this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3387 * in cmdline mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3388 skip_redraw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3389 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3390
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3391 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3392 compute_cmdrow(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3393 {
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
3394 if (exmode_active || msg_scrolled != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 cmdline_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 cmdline_row = W_WINROW(lastwin) + lastwin->w_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 + W_STATUS_HEIGHT(lastwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3402 cursorcmd(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410 msg_row = cmdline_row + (ccline.cmdspos / (int)(Columns - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 msg_col = (int)Columns - (ccline.cmdspos % (int)(Columns - 1)) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 if (msg_row <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3417 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 msg_row = cmdline_row + (ccline.cmdspos / (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3419 msg_col = ccline.cmdspos % (int)Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 windgoto(msg_row, msg_col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3425 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3426 redrawcmd_preedit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3427 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 #ifdef MCH_CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 mch_update_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3434 gotocmdline(int clr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3440 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3441 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3442 msg_col = 0; /* always start in column 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 if (clr) /* clear the bottom line(s) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 msg_clr_eos(); /* will reset clear_cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 windgoto(cmdline_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3447
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3448 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3449 * Check the word in front of the cursor for an abbreviation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 * Called when the non-id character "c" has been entered.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 * When an abbreviation is recognized it is removed from the text with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 * backspaces and the replacement string is inserted, followed by "c".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3455 ccheck_abbr(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457 if (p_paste || no_abbr) /* no abbreviations or in paste mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3459
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3463 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3464 static int
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3465 #ifdef __BORLANDC__
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3466 _RTLENTRYF
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3467 #endif
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3468 sort_func_compare(const void *s1, const void *s2)
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3469 {
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3470 char_u *p1 = *(char_u **)s1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3471 char_u *p2 = *(char_u **)s2;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3472
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3473 if (*p1 != '<' && *p2 == '<') return -1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3474 if (*p1 == '<' && *p2 != '<') return 1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3475 return STRCMP(p1, p2);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3476 }
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3477 #endif
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3478
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3480 * Return FAIL if this is not an appropriate context in which to do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 * completion of anything, return OK if it is (even if there are no matches).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 * For the caller, this means that the character is just passed through like a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 * normal character (instead of being expanded). This allows :s/^I^D etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3486 nextwild(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3487 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3488 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3489 int options, /* extra options for ExpandOne() */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3490 int escape) /* if TRUE, escape the returned matches */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3491 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3492 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3493 char_u *p1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3494 char_u *p2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3495 int difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3496 int v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3497
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3498 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3500 set_expand_context(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3501 cmd_showtail = expand_showtail(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3502 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3503
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 if (xp->xp_context == EXPAND_UNSUCCESSFUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 return OK; /* Something illegal on command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 if (xp->xp_context == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3511 /* Caller can use the character as a normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3512 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3514
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3515 MSG_PUTS("..."); /* show that we are busy */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 i = (int)(xp->xp_pattern - ccline.cmdbuff);
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3519 xp->xp_pattern_len = ccline.cmdpos - i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 if (type == WILD_NEXT || type == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 * Get next/previous match for a previous expanded pattern.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 p2 = ExpandOne(xp, NULL, NULL, 0, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 * Translate string into pattern and expand it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 */
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3533 if ((p1 = addstar(xp->xp_pattern, xp->xp_pattern_len,
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3534 xp->xp_context)) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 p2 = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 {
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3538 int use_options = options |
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3539 WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT;
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3540 if (escape)
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3541 use_options |= WILD_ESCAPE;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3542
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3543 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3544 use_options += WILD_ICASE;
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3545 p2 = ExpandOne(xp, p1,
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3546 vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3547 use_options, type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 vim_free(p1);
2047
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 2016
diff changeset
3549 /* longest match: make sure it is not shorter, happens with :help */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 if (p2 != NULL && type == WILD_LONGEST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 {
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3552 for (j = 0; j < xp->xp_pattern_len; ++j)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 if (ccline.cmdbuff[i + j] == '*'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 || ccline.cmdbuff[i + j] == '?')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 if ((int)STRLEN(p2) < j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3558 vim_free(p2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3559 p2 = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3563 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3564
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3565 if (p2 != NULL && !got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3566 {
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3567 difflen = (int)STRLEN(p2) - xp->xp_pattern_len;
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
3568 if (ccline.cmdlen + difflen + 4 > ccline.cmdbufflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3569 {
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
3570 v = realloc_cmdbuff(ccline.cmdlen + difflen + 4);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3571 xp->xp_pattern = ccline.cmdbuff + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3572 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3574 v = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 if (v == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 {
323
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3577 mch_memmove(&ccline.cmdbuff[ccline.cmdpos + difflen],
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3578 &ccline.cmdbuff[ccline.cmdpos],
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3579 (size_t)(ccline.cmdlen - ccline.cmdpos + 1));
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3580 mch_memmove(&ccline.cmdbuff[i], p2, STRLEN(p2));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 ccline.cmdlen += difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 ccline.cmdpos += difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 vim_free(p2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 redrawcmd();
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 21
diff changeset
3588 cursorcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 /* When expanding a ":map" command and no matches are found, assume that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 * the key is supposed to be inserted literally */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3592 if (xp->xp_context == EXPAND_MAPPINGS && p2 == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3593 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3595 if (xp->xp_numfiles <= 0 && p2 == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 else if (xp->xp_numfiles == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 /* free expanded pattern */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 (void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3602 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3603
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3604 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3605 * Do wildcard expansion on the string 'str'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 * Chars that should not be expanded must be preceded with a backslash.
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3607 * Return a pointer to allocated memory containing the new string.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 * Return NULL for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 *
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3610 * "orig" is the originally expanded string, copied to allocated memory. It
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3611 * should either be kept in orig_save or freed. When "mode" is WILD_NEXT or
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3612 * WILD_PREV "orig" should be NULL.
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3613 *
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3614 * Results are cached in xp->xp_files and xp->xp_numfiles, except when "mode"
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3615 * is WILD_EXPAND_FREE or WILD_ALL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 * mode = WILD_FREE: just free previously expanded matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619 * mode = WILD_EXPAND_KEEP: normal expansion, keep matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 * mode = WILD_NEXT: use next match in multiple match, wrap to first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 * mode = WILD_PREV: use previous match in multiple match, wrap to first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 * mode = WILD_ALL: return all matches concatenated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 * mode = WILD_LONGEST: return longest matched part
3398
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3624 * mode = WILD_ALL_KEEP: get all matches, keep matches
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 * options = WILD_LIST_NOTFOUND: list entries without a match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 * options = WILD_HOME_REPLACE: do home_replace() for buffer names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3628 * options = WILD_USE_NL: Use '\n' for WILD_ALL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 * options = WILD_NO_BEEP: Don't beep for multiple matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 * options = WILD_ADD_SLASH: add a slash after directory names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 * options = WILD_KEEP_ALL: don't remove 'wildignore' entries
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3632 * options = WILD_SILENT: don't print warning messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 * options = WILD_ESCAPE: put backslash before special chars
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3634 * options = WILD_ICASE: ignore case for files
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3635 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3636 * The variables xp->xp_context and xp->xp_backslash must have been set!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3637 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3638 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3639 ExpandOne(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3640 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3641 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3642 char_u *orig, /* allocated copy of original of expanded string */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3643 int options,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3644 int mode)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 char_u *ss = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 static int findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 static char_u *orig_save = NULL; /* kept value of orig */
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3649 int orig_saved = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 long_u len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 int non_suf_match; /* number without matching suffix */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 * first handle the case of using an old match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 if (mode == WILD_NEXT || mode == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3659 if (xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 if (mode == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 if (findex == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3664 findex = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3665 --findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3666 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3667 else /* mode == WILD_NEXT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3668 ++findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3669
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 * When wrapping around, return the original string, set findex to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 * -1.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3674 if (findex < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 if (orig_save == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 findex = xp->xp_numfiles - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 findex = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 if (findex >= xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 if (orig_save == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 findex = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 findex = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 if (p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690 win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 findex, cmd_showtail);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 if (findex == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694 return vim_strsave(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 return vim_strsave(xp->xp_files[findex]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3700
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3701 /* free old names */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3703 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 FreeWild(xp->xp_numfiles, xp->xp_files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3706 vim_free(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 orig_save = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 findex = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711 if (mode == WILD_FREE) /* only release file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 vim_free(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 orig_save = orig;
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3718 orig_saved = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 * Do the expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 if (ExpandFromContext(xp, str, &xp->xp_numfiles, &xp->xp_files,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 options) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3726 #ifdef FNAME_ILLEGAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 /* Illegal file name has been silently skipped. But when there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 * are wildcards, the real problem is that there was no match,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 * causing the pattern to be added, which has illegal characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 if (!(options & WILD_SILENT) && (options & WILD_LIST_NOTFOUND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 EMSG2(_(e_nomatch2), str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735 else if (xp->xp_numfiles == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 if (!(options & WILD_SILENT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738 EMSG2(_(e_nomatch2), str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 /* Escape the matches for use on the command line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3743 ExpandEscape(xp, str, xp->xp_numfiles, xp->xp_files, options);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3744
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3745 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3746 * Check for matching suffixes in file names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 */
3398
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3748 if (mode != WILD_ALL && mode != WILD_ALL_KEEP
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3749 && mode != WILD_LONGEST)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 if (xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 non_suf_match = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 non_suf_match = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 if ((xp->xp_context == EXPAND_FILES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 || xp->xp_context == EXPAND_DIRECTORIES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 && xp->xp_numfiles > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 * More than one match; check suffix.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 * The files will have been sorted on matching suffix in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 * expand_wildcards, only need to check the first two.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 non_suf_match = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 for (i = 0; i < 2; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 if (match_suffix(xp->xp_files[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 ++non_suf_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769 if (non_suf_match != 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 /* Can we ever get here unless it's while expanding
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 * interactively? If not, we can get rid of this all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3773 * together. Don't really want to wait for this message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3774 * (and possibly have to hit return to continue!).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 if (!(options & WILD_SILENT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 EMSG(_(e_toomany));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 else if (!(options & WILD_NO_BEEP))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 if (!(non_suf_match != 1 && mode == WILD_EXPAND_FREE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 ss = vim_strsave(xp->xp_files[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3783 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3784 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3785 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 /* Find longest common part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 if (mode == WILD_LONGEST && xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3790 int mb_len = 1;
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3791 int c0, ci;
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3792
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3793 for (len = 0; xp->xp_files[0][len]; len += mb_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3795 #ifdef FEAT_MBYTE
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3796 if (has_mbyte)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3798 mb_len = (*mb_ptr2len)(&xp->xp_files[0][len]);
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3799 c0 =(* mb_ptr2char)(&xp->xp_files[0][len]);
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3800 }
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3801 else
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3802 #endif
7250
99476f1aaacd commit https://github.com/vim/vim/commit/e4eda3bc7157932b0bf380fd3fdc1ba8f4438b60
Christian Brabandt <cb@256bit.org>
parents: 7235
diff changeset
3803 c0 = xp->xp_files[0][len];
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3804 for (i = 1; i < xp->xp_numfiles; ++i)
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3805 {
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3806 #ifdef FEAT_MBYTE
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3807 if (has_mbyte)
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3808 ci =(* mb_ptr2char)(&xp->xp_files[i][len]);
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3809 else
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3810 #endif
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3811 ci = xp->xp_files[i][len];
4242
edd0bc1f26bd updated for version 7.3.872
Bram Moolenaar <bram@vim.org>
parents: 3961
diff changeset
3812 if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 || xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
3814 || xp->xp_context == EXPAND_SHELLCMD
4242
edd0bc1f26bd updated for version 7.3.872
Bram Moolenaar <bram@vim.org>
parents: 3961
diff changeset
3815 || xp->xp_context == EXPAND_BUFFERS))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3816 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3817 if (MB_TOLOWER(c0) != MB_TOLOWER(ci))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3818 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3819 }
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3820 else if (c0 != ci)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3821 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3823 if (i < xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3824 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3825 if (!(options & WILD_NO_BEEP))
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
3826 vim_beep(BO_WILD);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3827 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3828 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3829 }
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3830
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3831 ss = alloc((unsigned)len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3832 if (ss)
419
f713fc55bf7b updated for version 7.0109
vimboss
parents: 410
diff changeset
3833 vim_strncpy(ss, xp->xp_files[0], (size_t)len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3834 findex = -1; /* next p_wc gets first one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3835 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3836
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3837 /* Concatenate all matching names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838 if (mode == WILD_ALL && xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3839 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3840 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 for (i = 0; i < xp->xp_numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3842 len += (long_u)STRLEN(xp->xp_files[i]) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 ss = lalloc(len, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844 if (ss != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 *ss = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 for (i = 0; i < xp->xp_numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 STRCAT(ss, xp->xp_files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 if (i != xp->xp_numfiles - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3851 STRCAT(ss, (options & WILD_USE_NL) ? "\n" : " ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 ExpandCleanup(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3858
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3859 /* Free "orig" if it wasn't stored in "orig_save". */
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3860 if (!orig_saved)
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3861 vim_free(orig);
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3862
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 return ss;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 * Prepare an expand structure for use.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3870 ExpandInit(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 {
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
3872 xp->xp_pattern = NULL;
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3873 xp->xp_pattern_len = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 xp->xp_backslash = XP_BS_NONE;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3875 #ifndef BACKSLASH_IN_FILENAME
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3876 xp->xp_shell = FALSE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3877 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 xp->xp_files = NULL;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3880 #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3881 xp->xp_arg = NULL;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3882 #endif
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
3883 xp->xp_line = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3884 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3885
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3886 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3887 * Cleanup an expand structure after use.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3890 ExpandCleanup(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 if (xp->xp_numfiles >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 FreeWild(xp->xp_numfiles, xp->xp_files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3895 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3897 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3900 ExpandEscape(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3901 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3902 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3903 int numfiles,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3904 char_u **files,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3905 int options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3906 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3907 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3908 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3910 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3911 * May change home directory back to "~"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 if (options & WILD_HOME_REPLACE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 tilde_replace(str, numfiles, files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3915
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 if (options & WILD_ESCAPE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 if (xp->xp_context == EXPAND_FILES
2778
e92a4b9b4484 updated for version 7.3.165
Bram Moolenaar <bram@vim.org>
parents: 2652
diff changeset
3919 || xp->xp_context == EXPAND_FILES_IN_PATH
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
3920 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 || xp->xp_context == EXPAND_BUFFERS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 || xp->xp_context == EXPAND_DIRECTORIES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3925 * Insert a backslash into a file name before a space, \, %, #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3926 * and wildmatch characters, except '~'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3927 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3928 for (i = 0; i < numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3929 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3930 /* for ":set path=" we need to escape spaces twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 if (xp->xp_backslash == XP_BS_THREE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 p = vim_strsave_escaped(files[i], (char_u *)" ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 files[i] = p;
719
82ef0c58b012 updated for version 7.0219
vimboss
parents: 716
diff changeset
3938 #if defined(BACKSLASH_IN_FILENAME)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 p = vim_strsave_escaped(files[i], (char_u *)" ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3944 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3945 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 }
1589
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3948 #ifdef BACKSLASH_IN_FILENAME
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3949 p = vim_strsave_fnameescape(files[i], FALSE);
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3950 #else
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3951 p = vim_strsave_fnameescape(files[i], xp->xp_shell);
1589
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3952 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 /* If 'str' starts with "\~", replace "~" at start of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960 * files[i] with "\~". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~')
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3962 escape_fname(&files[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3963 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 xp->xp_backslash = XP_BS_NONE;
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3965
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3966 /* If the first file starts with a '+' escape it. Otherwise it
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3967 * could be seen as "+cmd". */
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3968 if (*files[0] == '+')
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3969 escape_fname(&files[0]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 else if (xp->xp_context == EXPAND_TAGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3973 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3974 * Insert a backslash before characters in a tag name that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3975 * would terminate the ":tag" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3976 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3977 for (i = 0; i < numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 p = vim_strsave_escaped(files[i], (char_u *)"\\|\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3987 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3990 /*
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3991 * Escape special characters in "fname" for when used as a file name argument
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3992 * after a Vim command, or, when "shell" is non-zero, a shell command.
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3993 * Returns the result in allocated memory.
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3994 */
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3995 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3996 vim_strsave_fnameescape(char_u *fname, int shell)
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3997 {
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
3998 char_u *p;
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3999 #ifdef BACKSLASH_IN_FILENAME
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4000 char_u buf[20];
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4001 int j = 0;
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4002
5481
31217cc48e7d updated for version 7.4.090
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
4003 /* Don't escape '[', '{' and '!' if they are in 'isfname'. */
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4004 for (p = PATH_ESC_CHARS; *p != NUL; ++p)
5481
31217cc48e7d updated for version 7.4.090
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
4005 if ((*p != '[' && *p != '{' && *p != '!') || !vim_isfilec(*p))
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4006 buf[j++] = *p;
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4007 buf[j] = NUL;
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4008 p = vim_strsave_escaped(fname, buf);
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4009 #else
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4010 p = vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4011 if (shell && csh_like_shell() && p != NULL)
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4012 {
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4013 char_u *s;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4014
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4015 /* For csh and similar shells need to put two backslashes before '!'.
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4016 * One is taken by Vim, one by the shell. */
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4017 s = vim_strsave_escaped(p, (char_u *)"!");
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4018 vim_free(p);
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4019 p = s;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4020 }
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4021 #endif
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4022
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4023 /* '>' and '+' are special at the start of some commands, e.g. ":edit" and
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4024 * ":write". "cd -" has a special meaning. */
2445
04dae202d316 Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents: 2433
diff changeset
4025 if (p != NULL && (*p == '>' || *p == '+' || (*p == '-' && p[1] == NUL)))
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4026 escape_fname(&p);
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4027
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4028 return p;
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4029 }
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4030
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4031 /*
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4032 * Put a backslash before the file name in "pp", which is in allocated memory.
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4033 */
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4034 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4035 escape_fname(char_u **pp)
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4036 {
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4037 char_u *p;
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4038
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4039 p = alloc((unsigned)(STRLEN(*pp) + 2));
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4040 if (p != NULL)
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4041 {
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4042 p[0] = '\\';
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4043 STRCPY(p + 1, *pp);
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4044 vim_free(*pp);
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4045 *pp = p;
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4046 }
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4047 }
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4048
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4049 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4050 * For each file name in files[num_files]:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4051 * If 'orig_pat' starts with "~/", replace the home directory with "~".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4052 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4053 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4054 tilde_replace(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4055 char_u *orig_pat,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4056 int num_files,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4057 char_u **files)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4058 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4059 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4060 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4062 if (orig_pat[0] == '~' && vim_ispathsep(orig_pat[1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4063 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4064 for (i = 0; i < num_files; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4065 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4066 p = home_replace_save(NULL, files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4067 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4069 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4070 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4072 }
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 * Show all matches for completion on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 * Returns EXPAND_NOTHING when the character that triggered expansion should
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4079 * be inserted like a normal character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4080 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4081 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4082 showmatches(expand_T *xp, int wildmenu UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 int num_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086 char_u **files_found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 int i, j, k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 int maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089 int lines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 int columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 int lastlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 int showtail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 set_expand_context(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 i = expand_cmdline(xp, ccline.cmdbuff, ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100 &num_files, &files_found);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 showtail = expand_showtail(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 if (i != EXPAND_OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108 num_files = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 files_found = xp->xp_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110 showtail = cmd_showtail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4113 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 if (!wildmenu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4115 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4116 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 msg_didany = FALSE; /* lines_left will be set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4118 msg_start(); /* prepare for paging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4119 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4120 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122 msg_didany = FALSE; /* lines_left will be set again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 msg_start(); /* prepare for paging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4129 got_int = FALSE; /* only int. the completion, not the cmd line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 else if (wildmenu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 win_redr_status_matches(xp, num_files, files_found, 0, showtail);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 /* find the length of the longest file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137 maxlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138 for (i = 0; i < num_files; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 if (!showtail && (xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4141 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 || xp->xp_context == EXPAND_BUFFERS))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 home_replace(NULL, files_found[i], NameBuff, MAXPATHL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4145 j = vim_strsize(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4146 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4147 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4148 j = vim_strsize(L_SHOWFILE(i));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4149 if (j > maxlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4150 maxlen = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4151 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154 lines = num_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4157 /* compute the number of columns and lines for the listing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 maxlen += 2; /* two spaces between file names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 columns = ((int)Columns + 2) / maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 if (columns < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 columns = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 lines = (num_files + columns - 1) / columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 attr = hl_attr(HLF_D); /* find out highlighting for directories */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4166
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 MSG_PUTS_ATTR(_("tagname"), hl_attr(HLF_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 msg_advance(maxlen - 3);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 MSG_PUTS_ATTR(_(" kind file\n"), hl_attr(HLF_T));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 /* list the files line by line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 for (i = 0; i < lines; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 lastlen = 999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 for (k = i; k < num_files; k += lines)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 msg_outtrans_attr(files_found[k], hl_attr(HLF_D));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 p = files_found[k] + STRLEN(files_found[k]) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 msg_advance(maxlen + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 msg_puts(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187 msg_advance(maxlen + 3);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 msg_puts_long_attr(p + 2, hl_attr(HLF_D));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191 for (j = maxlen - lastlen; --j >= 0; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 if (xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4194 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 || xp->xp_context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 {
2118
63bf37c1e7a2 updated for version 7.2.401
Bram Moolenaar <bram@zimbu.org>
parents: 2099
diff changeset
4197 /* highlight directories */
2128
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4198 if (xp->xp_numfiles != -1)
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4199 {
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4200 char_u *halved_slash;
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4201 char_u *exp_path;
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4202
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4203 /* Expansion was done before and special characters
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4204 * were escaped, need to halve backslashes. Also
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4205 * $HOME has been replaced with ~/. */
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4206 exp_path = expand_env_save_opt(files_found[k], TRUE);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4207 halved_slash = backslash_halve_save(
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4208 exp_path != NULL ? exp_path : files_found[k]);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4209 j = mch_isdir(halved_slash != NULL ? halved_slash
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4210 : files_found[k]);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4211 vim_free(exp_path);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4212 vim_free(halved_slash);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4213 }
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4214 else
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4215 /* Expansion was done here, file names are literal. */
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4216 j = mch_isdir(files_found[k]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 if (showtail)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 p = L_SHOWFILE(k);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4219 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 home_replace(NULL, files_found[k], NameBuff, MAXPATHL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4222 TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4223 p = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4225 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4226 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4227 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4228 j = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4229 p = L_SHOWFILE(k);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4230 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4231 lastlen = msg_outtrans_attr(p, j ? attr : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4233 if (msg_col > 0) /* when not wrapped around */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4234 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4235 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4236 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4237 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4238 out_flush(); /* show one line at a time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4239 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4240 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4241 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247 * we redraw the command below the lines that we have just listed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 * This is a bit tricky, but it saves a lot of screen updating.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 cmdline_row = msg_row; /* will put it back later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 FreeWild(num_files, files_found);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 return EXPAND_OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 * Private gettail for showmatches() (and win_redr_status_matches()):
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 * Find tail of file name path, but ignore trailing "/".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4264 sm_gettail(char_u *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 char_u *t = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 int had_sep = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270 for (p = s; *p != NUL; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 if (vim_ispathsep(*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 && !rem_backslash(p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277 had_sep = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 else if (had_sep)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280 t = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 had_sep = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282 }
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
4283 mb_ptr_adv(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4285 return t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4286 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4288 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4289 * Return TRUE if we only need to show the tail of completion matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4290 * When not completing file names or there is a wildcard in the path FALSE is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4291 * returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4294 expand_showtail(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 /* When not completing file names a "/" may mean something different. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4300 if (xp->xp_context != EXPAND_FILES
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4301 && xp->xp_context != EXPAND_SHELLCMD
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4302 && xp->xp_context != EXPAND_DIRECTORIES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305 end = gettail(xp->xp_pattern);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 if (end == xp->xp_pattern) /* there is no path separator */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 for (s = xp->xp_pattern; s < end; s++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 /* Skip escaped wildcards. Only when the backslash is not a path
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312 * separator, on DOS the '*' "path\*\file" must not be skipped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 if (rem_backslash(s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 else if (vim_strchr((char_u *)"*?[", *s) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4316 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4319 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 * Prepare a string for expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323 * When expanding file names: The string will be used with expand_wildcards().
5438
878ed73c7070 updated for version 7.4.069
Bram Moolenaar <bram@vim.org>
parents: 5072
diff changeset
4324 * Copy "fname[len]" into allocated memory and add a '*' at the end.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4325 * When expanding other names: The string will be used with regcomp(). Copy
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4326 * the name into allocated memory and prepend "^".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4327 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4329 addstar(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4330 char_u *fname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4331 int len,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4332 int context) /* EXPAND_FILES etc. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 char_u *retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 int new_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 char_u *tail;
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4338 int ends_in_star;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4340 if (context != EXPAND_FILES
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4341 && context != EXPAND_FILES_IN_PATH
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4342 && context != EXPAND_SHELLCMD
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4343 && context != EXPAND_DIRECTORIES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4345 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4346 * Matching will be done internally (on something other than files).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 * So we convert the file-matching-type wildcards into our kind for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 * use with vim_regcomp(). First work out how long it will be:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4349 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 /* For help tags the translation is done in find_help_tags().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4352 * For a tag pattern starting with "/" no translation is needed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 if (context == EXPAND_HELP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4354 || context == EXPAND_COLORS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4355 || context == EXPAND_COMPILER
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
4356 || context == EXPAND_OWNSYNTAX
2268
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2243
diff changeset
4357 || context == EXPAND_FILETYPE
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4358 || context == EXPAND_PACKADD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 || (context == EXPAND_TAGS && fname[0] == '/'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 retval = vim_strnsave(fname, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4363 new_len = len + 2; /* +2 for '^' at start, NUL at end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364 for (i = 0; i < len; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4366 if (fname[i] == '*' || fname[i] == '~')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4367 new_len++; /* '*' needs to be replaced by ".*"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4368 '~' needs to be replaced by "\~" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 /* Buffer names are like file names. "." should be literal */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 if (context == EXPAND_BUFFERS && fname[i] == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 new_len++; /* "." becomes "\." */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 /* Custom expansion takes care of special things, match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375 * backslashes literally (perhaps also for other types?) */
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
4376 if ((context == EXPAND_USER_DEFINED
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
4377 || context == EXPAND_USER_LIST) && fname[i] == '\\')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 new_len++; /* '\' becomes "\\" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 retval = alloc(new_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4381 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4383 retval[0] = '^';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4384 j = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4385 for (i = 0; i < len; i++, j++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4387 /* Skip backslash. But why? At least keep it for custom
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 * expansion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 if (context != EXPAND_USER_DEFINED
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4390 && context != EXPAND_USER_LIST
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4391 && fname[i] == '\\'
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4392 && ++i == len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4393 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4395 switch (fname[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4396 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4397 case '*': retval[j++] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 case '~': retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401 case '?': retval[j] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4403 case '.': if (context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4404 retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 break;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4406 case '\\': if (context == EXPAND_USER_DEFINED
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4407 || context == EXPAND_USER_LIST)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 retval[j] = fname[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 retval[j] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4417 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4418 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4419 retval = alloc(len + 4);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421 {
419
f713fc55bf7b updated for version 7.0109
vimboss
parents: 410
diff changeset
4422 vim_strncpy(retval, fname, len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 /*
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents: 828
diff changeset
4425 * Don't add a star to *, ~, ~user, $var or `cmd`.
f24a95dae8ee updated for version 7.0d05
vimboss
parents: 828
diff changeset
4426 * * would become **, which walks the whole tree.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 * ~ would be at the start of the file name, but not the tail.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 * $ could be anywhere in the tail.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 * ` could be anywhere in the file name.
1484
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4430 * When the name ends in '$' don't add a star, remove the '$'.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 tail = gettail(retval);
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4433 ends_in_star = (len > 0 && retval[len - 1] == '*');
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4434 #ifndef BACKSLASH_IN_FILENAME
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4435 for (i = len - 2; i >= 0; --i)
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4436 {
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4437 if (retval[i] != '\\')
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4438 break;
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4439 ends_in_star = !ends_in_star;
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4440 }
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4441 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4442 if ((*retval != '~' || tail != retval)
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4443 && !ends_in_star
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 && vim_strchr(tail, '$') == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4445 && vim_strchr(retval, '`') == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 retval[len++] = '*';
1484
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4447 else if (len > 0 && retval[len - 1] == '$')
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4448 --len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4449 retval[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4450 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4452 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4453 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4454
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4455 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4456 * Must parse the command line so far to work out what context we are in.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4457 * Completion can then be done based on that context.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4458 * This routine sets the variables:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4459 * xp->xp_pattern The start of the pattern to be expanded within
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4460 * the command line (ends at the cursor).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4461 * xp->xp_context The type of thing to expand. Will be one of:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4462 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4463 * EXPAND_UNSUCCESSFUL Used sometimes when there is something illegal on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4464 * the command line, like an unknown command. Caller
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4465 * should beep.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4466 * EXPAND_NOTHING Unrecognised context for completion, use char like
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4467 * a normal char, rather than for completion. eg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4468 * :s/^I/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 * EXPAND_COMMANDS Cursor is still touching the command, so complete
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4470 * it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4471 * EXPAND_BUFFERS Complete file names for :buf and :sbuf commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472 * EXPAND_FILES After command with XFILE set, or after setting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 * with P_EXPAND set. eg :e ^I, :w>>^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4474 * EXPAND_DIRECTORIES In some cases this is used instead of the latter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4475 * when we know only directories are of interest. eg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 * :set dir=^I
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4477 * EXPAND_SHELLCMD After ":!cmd", ":r !cmd" or ":w !cmd".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 * EXPAND_SETTINGS Complete variable names. eg :set d^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4479 * EXPAND_BOOL_SETTINGS Complete boolean variables only, eg :set no^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4480 * EXPAND_TAGS Complete tags from the files in p_tags. eg :ta a^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4481 * EXPAND_TAGS_LISTFILES As above, but list filenames on ^D, after :tselect
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4482 * EXPAND_HELP Complete tags from the file 'helpfile'/tags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4483 * EXPAND_EVENTS Complete event names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4484 * EXPAND_SYNTAX Complete :syntax command arguments
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 * EXPAND_HIGHLIGHT Complete highlight (syntax) group names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4486 * EXPAND_AUGROUP Complete autocommand group names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4487 * EXPAND_USER_VARS Complete user defined variable names, eg :unlet a^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4488 * EXPAND_MAPPINGS Complete mapping and abbreviation names,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4489 * eg :unmap a^I , :cunab x^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 * EXPAND_FUNCTIONS Complete internal or user defined function names,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 * eg :call sub^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492 * EXPAND_USER_FUNC Complete user defined function names, eg :delf F^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 * EXPAND_EXPRESSION Complete internal or user defined function/variable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494 * names in expressions, eg :while s^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 * EXPAND_ENV_VARS Complete environment variable names
3744
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3740
diff changeset
4496 * EXPAND_USER Complete user names
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4498 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4499 set_expand_context(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4501 /* only expansion for ':', '>' and '=' command-lines */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4502 if (ccline.cmdfirstc != ':'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 #ifdef FEAT_EVAL
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4504 && ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4505 && !ccline.input_fn
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 set_cmd_context(xp, ccline.cmdbuff, ccline.cmdlen, ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4516 set_cmd_context(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4517 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4518 char_u *str, /* start of command line */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4519 int len, /* length of command line (excl. NUL) */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4520 int col) /* position of cursor */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4521 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4522 int old_char = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4523 char_u *nextcomm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4526 * Avoid a UMR warning from Purify, only save the character if it has been
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 * written before.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4528 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 if (col < len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530 old_char = str[col];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4531 str[col] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4532 nextcomm = str;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4533
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4534 #ifdef FEAT_EVAL
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4535 if (ccline.cmdfirstc == '=')
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4536 {
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4537 # ifdef FEAT_CMDL_COMPL
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4538 /* pass CMD_SIZE because there is no real command */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4539 set_context_for_expression(xp, str, CMD_SIZE);
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4540 # endif
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4541 }
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4542 else if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4543 {
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4544 xp->xp_context = ccline.xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4545 xp->xp_pattern = ccline.cmdbuff;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4546 # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4547 xp->xp_arg = ccline.xp_arg;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4548 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4549 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4550 else
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4551 #endif
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4552 while (nextcomm != NULL)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4553 nextcomm = set_one_cmd_context(xp, nextcomm);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4554
5056
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4555 /* Store the string here so that call_user_expand_func() can get to them
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4556 * easily. */
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4557 xp->xp_line = str;
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4558 xp->xp_col = col;
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4559
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4560 str[col] = old_char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4561 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4562
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4563 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4564 * Expand the command line "str" from context "xp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4565 * "xp" must have been set by set_cmd_context().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4566 * xp->xp_pattern points into "str", to where the text that is to be expanded
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4567 * starts.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4568 * Returns EXPAND_UNSUCCESSFUL when there is something illegal before the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4569 * cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4570 * Returns EXPAND_NOTHING when there is nothing to expand, might insert the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4571 * key that triggered expansion literally.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4572 * Returns EXPAND_OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4573 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4574 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4575 expand_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4576 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4577 char_u *str, /* start of command line */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4578 int col, /* position of cursor */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4579 int *matchcount, /* return: nr of matches */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4580 char_u ***matches) /* return: array of pointers to matches */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4581 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4582 char_u *file_str = NULL;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4583 int options = WILD_ADD_SLASH|WILD_SILENT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4584
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4585 if (xp->xp_context == EXPAND_UNSUCCESSFUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4586 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4587 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 return EXPAND_UNSUCCESSFUL; /* Something illegal on command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590 if (xp->xp_context == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4592 /* Caller can use the character as a normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4593 return EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 /* add star to file name, or convert to regexp if not exp. files. */
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
4597 xp->xp_pattern_len = (int)(str + col - xp->xp_pattern);
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
4598 file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4599 if (file_str == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 return EXPAND_UNSUCCESSFUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4602 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4603 options += WILD_ICASE;
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4604
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4605 /* find all files that match the description */
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4606 if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4607 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4608 *matchcount = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 *matches = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4610 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4611 vim_free(file_str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4613 return EXPAND_OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4614 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4616 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617 /*
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4618 * Cleanup matches for help tags:
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4619 * Remove "@ab" if the top of 'helplang' is "ab" and the language of the first
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4620 * tag matches it. Otherwise remove "@en" if "en" is the only language.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 */
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
4622 static void cleanup_help_tags(int num_file, char_u **file);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4623
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4624 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4625 cleanup_help_tags(int num_file, char_u **file)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4627 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4628 int len;
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4629 char_u buf[4];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4630 char_u *p = buf;
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4631
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
4632 if (p_hlg[0] != NUL && (p_hlg[0] != 'e' || p_hlg[1] != 'n'))
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4633 {
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4634 *p++ = '@';
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4635 *p++ = p_hlg[0];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4636 *p++ = p_hlg[1];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4637 }
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4638 *p = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640 for (i = 0; i < num_file; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4641 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4642 len = (int)STRLEN(file[i]) - 3;
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4643 if (len <= 0)
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4644 continue;
9070
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4645 if (STRCMP(file[i] + len, "@en") == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4646 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4647 /* Sorting on priority means the same item in another language may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4648 * be anywhere. Search all items for a match up to the "@en". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4649 for (j = 0; j < num_file; ++j)
9070
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4650 if (j != i && (int)STRLEN(file[j]) == len + 3
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4651 && STRNCMP(file[i], file[j], len + 1) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4652 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4653 if (j == num_file)
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
4654 /* item only exists with @en, remove it */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4655 file[i][len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4657 }
9070
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4658
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4659 if (*buf != NUL)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4660 for (i = 0; i < num_file; ++i)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4661 {
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4662 len = (int)STRLEN(file[i]) - 3;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4663 if (len <= 0)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4664 continue;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4665 if (STRCMP(file[i] + len, buf) == 0)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4666 {
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4667 /* remove the default language */
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4668 file[i][len] = NUL;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4669 }
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4670 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4671 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4672 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 * Do the expansion based on xp->xp_context and "pat".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4678 ExpandFromContext(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4679 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4680 char_u *pat,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4681 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4682 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4683 int options) /* EW_ flags */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 #ifdef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4686 regmatch_T regmatch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4687 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4688 int ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4689 int flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4691 flags = EW_DIR; /* include directories */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4692 if (options & WILD_LIST_NOTFOUND)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4693 flags |= EW_NOTFOUND;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4694 if (options & WILD_ADD_SLASH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4695 flags |= EW_ADDSLASH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4696 if (options & WILD_KEEP_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4697 flags |= EW_KEEPALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4698 if (options & WILD_SILENT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699 flags |= EW_SILENT;
6659
6f1e4b7942c3 updated for version 7.4.654
Bram Moolenaar <bram@vim.org>
parents: 6424
diff changeset
4700 if (options & WILD_ALLLINKS)
6f1e4b7942c3 updated for version 7.4.654
Bram Moolenaar <bram@vim.org>
parents: 6424
diff changeset
4701 flags |= EW_ALLLINKS;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4702
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4703 if (xp->xp_context == EXPAND_FILES
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4704 || xp->xp_context == EXPAND_DIRECTORIES
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4705 || xp->xp_context == EXPAND_FILES_IN_PATH)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4706 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4707 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4708 * Expand file or directory names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4709 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4710 int free_pat = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4711 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4713 /* for ":set path=" and ":set tags=" halve backslashes for escaped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4714 * space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4715 if (xp->xp_backslash != XP_BS_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4716 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4717 free_pat = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4718 pat = vim_strsave(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 for (i = 0; pat[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720 if (pat[i] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 if (xp->xp_backslash == XP_BS_THREE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723 && pat[i + 1] == '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4724 && pat[i + 2] == '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4725 && pat[i + 3] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
4726 STRMOVE(pat + i, pat + i + 3);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4727 if (xp->xp_backslash == XP_BS_ONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4728 && pat[i + 1] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
4729 STRMOVE(pat + i, pat + i + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4731 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4732
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4733 if (xp->xp_context == EXPAND_FILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4734 flags |= EW_FILE;
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4735 else if (xp->xp_context == EXPAND_FILES_IN_PATH)
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4736 flags |= (EW_FILE | EW_PATH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4737 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 flags = (flags | EW_DIR) & ~EW_FILE;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4739 if (options & WILD_ICASE)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4740 flags |= EW_ICASE;
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4741
2016
03c191181749 updated for version 7.2-313
vimboss
parents: 1965
diff changeset
4742 /* Expand wildcards, supporting %:h and the like. */
03c191181749 updated for version 7.2-313
vimboss
parents: 1965
diff changeset
4743 ret = expand_wildcards_eval(&pat, num_file, file, flags);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 if (free_pat)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 vim_free(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 return ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 *file = (char_u **)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 if (xp->xp_context == EXPAND_HELP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752 {
1696
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4753 /* With an empty argument we would get all the help tags, which is
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4754 * very slow. Get matches for "help" instead. */
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4755 if (find_help_tags(*pat == NUL ? (char_u *)"help" : pat,
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4756 num_file, file, FALSE) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4758 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4759 cleanup_help_tags(*num_file, *file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4760 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4761 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4763 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4765
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4766 #ifndef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4767 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4768 #else
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
4769 if (xp->xp_context == EXPAND_SHELLCMD)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
4770 return expand_shellcmd(pat, num_file, file, flags);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4771 if (xp->xp_context == EXPAND_OLD_SETTING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4772 return ExpandOldSetting(num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4773 if (xp->xp_context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4774 return ExpandBufnames(pat, num_file, file, options);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4775 if (xp->xp_context == EXPAND_TAGS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4776 || xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4777 return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 if (xp->xp_context == EXPAND_COLORS)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4779 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4780 char *directories[] = {"colors", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4781 return ExpandRTDir(pat, DIP_START + DIP_OPT, num_file, file,
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4782 directories);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4783 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4784 if (xp->xp_context == EXPAND_COMPILER)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4785 {
3106
f04619f1fc16 updated for version 7.3.324
Bram Moolenaar <bram@vim.org>
parents: 3020
diff changeset
4786 char *directories[] = {"compiler", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4787 return ExpandRTDir(pat, 0, num_file, file, directories);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4788 }
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
4789 if (xp->xp_context == EXPAND_OWNSYNTAX)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4790 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4791 char *directories[] = {"syntax", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4792 return ExpandRTDir(pat, 0, num_file, file, directories);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4793 }
2268
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2243
diff changeset
4794 if (xp->xp_context == EXPAND_FILETYPE)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4795 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4796 char *directories[] = {"syntax", "indent", "ftplugin", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4797 return ExpandRTDir(pat, 0, num_file, file, directories);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4798 }
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4799 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4800 if (xp->xp_context == EXPAND_USER_LIST)
856
8cd729851562 updated for version 7.0g
vimboss
parents: 849
diff changeset
4801 return ExpandUserList(xp, num_file, file);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4802 # endif
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4803 if (xp->xp_context == EXPAND_PACKADD)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4804 return ExpandPackAddDir(pat, num_file, file);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4807 if (regmatch.regprog == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4808 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4809
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4810 /* set ignore-case according to p_ic, p_scs and pat */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4811 regmatch.rm_ic = ignorecase(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4813 if (xp->xp_context == EXPAND_SETTINGS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4814 || xp->xp_context == EXPAND_BOOL_SETTINGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4815 ret = ExpandSettings(xp, &regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4816 else if (xp->xp_context == EXPAND_MAPPINGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4817 ret = ExpandMappings(&regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4818 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4819 else if (xp->xp_context == EXPAND_USER_DEFINED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4820 ret = ExpandUserDefined(xp, &regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4821 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4822 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4824 static struct expgen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4825 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4826 int context;
7807
1a5d34492798 commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents: 7801
diff changeset
4827 char_u *((*func)(expand_T *, int));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4828 int ic;
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4829 int escaped;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4830 } tab[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4831 {
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4832 {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4833 {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4834 #ifdef FEAT_CMDHIST
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4835 {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4836 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837 #ifdef FEAT_USR_CMDS
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4838 {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
6424
de877dab1c31 updated for version 7.4.542
Bram Moolenaar <bram@vim.org>
parents: 6211
diff changeset
4839 {EXPAND_USER_ADDR_TYPE, get_user_cmd_addr_type, FALSE, TRUE},
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4840 {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4841 {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4842 {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 #ifdef FEAT_EVAL
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4845 {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4846 {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4847 {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4848 {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 #ifdef FEAT_MENU
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4851 {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4852 {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854 #ifdef FEAT_SYN_HL
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4855 {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4856 #endif
4803
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4857 #ifdef FEAT_PROFILE
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4858 {EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE},
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4859 #endif
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4860 {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4861 #ifdef FEAT_AUTOCMD
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4862 {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4863 {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4864 #endif
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1834
diff changeset
4865 #ifdef FEAT_CSCOPE
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4866 {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1834
diff changeset
4867 #endif
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
4868 #ifdef FEAT_SIGNS
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4869 {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
4870 #endif
2068
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
4871 #ifdef FEAT_PROFILE
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4872 {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
2068
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
4873 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4874 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4875 && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4876 {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4877 {EXPAND_LOCALES, get_locales, TRUE, FALSE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4878 #endif
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4879 {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
3744
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3740
diff changeset
4880 {EXPAND_USER, get_users, TRUE, FALSE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4881 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4882 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4884 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4885 * Find a context in the table and call the ExpandGeneric() with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4886 * right function to do the expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4887 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4888 ret = FAIL;
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1877
diff changeset
4889 for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4890 if (xp->xp_context == tab[i].context)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4891 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4892 if (tab[i].ic)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893 regmatch.rm_ic = TRUE;
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4894 ret = ExpandGeneric(xp, &regmatch, num_file, file,
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
4895 tab[i].func, tab[i].escaped);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4896 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4897 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4898 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4899
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
4900 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4901
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4902 return ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4903 #endif /* FEAT_CMDL_COMPL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4906 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4907 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4908 * Expand a list of names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4909 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 * Generic function for command line completion. It calls a function to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 * obtain strings, one by one. The strings are matched against a regexp
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912 * program. Matching strings are copied into an array, which is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4913 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4914 * Returns OK when no problems encountered, FAIL for error (out of memory).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4916 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4917 ExpandGeneric(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4918 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4919 regmatch_T *regmatch,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4920 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4921 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4922 char_u *((*func)(expand_T *, int)),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4923 /* returns a string from the list */
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4924 int escaped)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4925 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4926 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4927 int count = 0;
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4928 int round;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4929 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4930
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4931 /* do this loop twice:
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4932 * round == 0: count the number of matching names
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4933 * round == 1: copy the matching names into allocated memory
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4934 */
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4935 for (round = 0; round <= 1; ++round)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937 for (i = 0; ; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 str = (*func)(xp, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940 if (str == NULL) /* end of list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4942 if (*str == NUL) /* skip empty strings */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 if (vim_regexec(regmatch, str, (colnr_T)0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4946 {
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4947 if (round)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4948 {
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4949 if (escaped)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4950 str = vim_strsave_escaped(str, (char_u *)" \t\\.");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4951 else
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4952 str = vim_strsave(str);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4953 (*file)[count] = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4954 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955 if (func == get_menu_names && str != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4956 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4957 /* test for separator added by get_menu_names() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 str += STRLEN(str) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959 if (*str == '\001')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 *str = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4961 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4962 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4964 ++count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4967 if (round == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969 if (count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971 *num_file = count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4972 *file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973 if (*file == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975 *file = (char_u **)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4976 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4977 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4978 count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4979 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4980 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4981
828
01583c79d5f4 updated for version 7.0d03
vimboss
parents: 819
diff changeset
4982 /* Sort the results. Keep menu's in the specified order. */
01583c79d5f4 updated for version 7.0d03
vimboss
parents: 819
diff changeset
4983 if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4984 {
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4985 if (xp->xp_context == EXPAND_EXPRESSION
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4986 || xp->xp_context == EXPAND_FUNCTIONS
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4987 || xp->xp_context == EXPAND_USER_FUNC)
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4988 /* <SNR> functions should be sorted to the end. */
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4989 qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4990 sort_func_compare);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4991 else
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4992 sort_strings(*file, *num_file);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
4993 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4994
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4995 #ifdef FEAT_CMDL_COMPL
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4996 /* Reset the variables used for special highlight names expansion, so that
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4997 * they don't show up when getting normal highlight names by ID. */
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4998 reset_expand_highlight();
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4999 #endif
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5000
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5003
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5004 /*
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5005 * Complete a shell command.
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5006 * Returns FAIL or OK;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5007 */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5008 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5009 expand_shellcmd(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5010 char_u *filepat, /* pattern to match with command names */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5011 int *num_file, /* return: number of matches */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5012 char_u ***file, /* return: array with matches */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5013 int flagsarg) /* EW_ flags */
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5014 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5015 char_u *pat;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5016 int i;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5017 char_u *path;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5018 int mustfree = FALSE;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5019 garray_T ga;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5020 char_u *buf = alloc(MAXPATHL);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5021 size_t l;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5022 char_u *s, *e;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5023 int flags = flagsarg;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5024 int ret;
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5025 int did_curdir = FALSE;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5026
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5027 if (buf == NULL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5028 return FAIL;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5029
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5030 /* for ":set path=" and ":set tags=" halve backslashes for escaped
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5031 * space */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5032 pat = vim_strsave(filepat);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5033 for (i = 0; pat[i]; ++i)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5034 if (pat[i] == '\\' && pat[i + 1] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
5035 STRMOVE(pat + i, pat + i + 1);
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5036
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5037 flags |= EW_FILE | EW_EXEC | EW_SHELLCMD;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5038
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5039 /* For an absolute name we don't use $PATH. */
955
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5040 if (mch_isFullName(pat))
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5041 path = (char_u *)" ";
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5042 else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5043 || (pat[1] == '.' && vim_ispathsep(pat[2])))))
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5044 path = (char_u *)".";
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5045 else
2630
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5046 {
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5047 path = vim_getenv((char_u *)"PATH", &mustfree);
2630
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5048 if (path == NULL)
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5049 path = (char_u *)"";
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5050 }
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5051
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5052 /*
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5053 * Go over all directories in $PATH. Expand matches in that directory and
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5054 * collect them in "ga". When "." is not in $PATH also expand for the
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5055 * current directory, to find "subdir/cmd".
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5056 */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5057 ga_init2(&ga, (int)sizeof(char *), 10);
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5058 for (s = path; ; s = e)
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5059 {
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5060 if (*s == NUL)
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5061 {
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5062 if (did_curdir)
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5063 break;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5064 /* Find directories in the current directory, path is empty. */
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5065 did_curdir = TRUE;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5066 }
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5067 else if (*s == '.')
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5068 did_curdir = TRUE;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5069
955
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5070 if (*s == ' ')
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5071 ++s; /* Skip space used for absolute path name. */
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5072
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
5073 #if defined(MSWIN)
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5074 e = vim_strchr(s, ';');
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5075 #else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5076 e = vim_strchr(s, ':');
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5077 #endif
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5078 if (e == NULL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5079 e = s + STRLEN(s);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5080
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5081 l = e - s;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5082 if (l > MAXPATHL - 5)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5083 break;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5084 vim_strncpy(buf, s, l);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5085 add_pathsep(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5086 l = STRLEN(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5087 vim_strncpy(buf + l, pat, MAXPATHL - 1 - l);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5088
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5089 /* Expand matches in one directory of $PATH. */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5090 ret = expand_wildcards(1, &buf, num_file, file, flags);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5091 if (ret == OK)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5092 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5093 if (ga_grow(&ga, *num_file) == FAIL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5094 FreeWild(*num_file, *file);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5095 else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5096 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5097 for (i = 0; i < *num_file; ++i)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5098 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5099 s = (*file)[i];
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5100 if (STRLEN(s) > l)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5101 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5102 /* Remove the path again. */
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
5103 STRMOVE(s, s + l);
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5104 ((char_u **)ga.ga_data)[ga.ga_len++] = s;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5105 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5106 else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5107 vim_free(s);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5108 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5109 vim_free(*file);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5110 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5111 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5112 if (*e != NUL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5113 ++e;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5114 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5115 *file = ga.ga_data;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5116 *num_file = ga.ga_len;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5117
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5118 vim_free(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5119 vim_free(pat);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5120 if (mustfree)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5121 vim_free(path);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5122 return OK;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5123 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5124
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5125
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5126 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
5127 static void * call_user_expand_func(void *(*user_expand_func)(char_u *, int, char_u **, int), expand_T *xp, int *num_file, char_u ***file);
410
c60ba877860b updated for version 7.0107
vimboss
parents: 407
diff changeset
5128
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5129 /*
1518
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5130 * Call "user_expand_func()" to invoke a user defined VimL function and return
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5131 * the result (either a string or a List).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5132 */
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5133 static void *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5134 call_user_expand_func(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5135 void *(*user_expand_func)(char_u *, int, char_u **, int),
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5136 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5137 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5138 char_u ***file)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5139 {
5072
cca600e60928 updated for version 7.3.1279
Bram Moolenaar <bram@vim.org>
parents: 5056
diff changeset
5140 int keep = 0;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5141 char_u num[50];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5142 char_u *args[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5143 int save_current_SID = current_SID;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5144 void *ret;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5145 struct cmdline_info save_ccline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5146
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5147 if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL)
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5148 return NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5149 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5150 *file = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5151
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5152 if (ccline.cmdbuff != NULL)
1518
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5153 {
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5154 keep = ccline.cmdbuff[ccline.cmdlen];
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5155 ccline.cmdbuff[ccline.cmdlen] = 0;
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5156 }
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5157
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
5158 args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5159 args[1] = xp->xp_line;
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5160 sprintf((char *)num, "%d", xp->xp_col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5161 args[2] = num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5162
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5163 /* Save the cmdline, we don't know what the function may do. */
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5164 save_ccline = ccline;
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5165 ccline.cmdbuff = NULL;
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5166 ccline.cmdprompt = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5167 current_SID = xp->xp_scriptID;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5168
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5169 ret = user_expand_func(xp->xp_arg, 3, args, FALSE);
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5170
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5171 ccline = save_ccline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5172 current_SID = save_current_SID;
1518
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5173 if (ccline.cmdbuff != NULL)
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5174 ccline.cmdbuff[ccline.cmdlen] = keep;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5175
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
5176 vim_free(args[0]);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5177 return ret;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5178 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5179
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5180 /*
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5181 * Expand names with a function defined by the user.
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5182 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5183 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5184 ExpandUserDefined(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5185 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5186 regmatch_T *regmatch,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5187 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5188 char_u ***file)
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5189 {
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5190 char_u *retstr;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5191 char_u *s;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5192 char_u *e;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5193 char_u keep;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5194 garray_T ga;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5195
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5196 retstr = call_user_expand_func(call_func_retstr, xp, num_file, file);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5197 if (retstr == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5198 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5200 ga_init2(&ga, (int)sizeof(char *), 3);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5201 for (s = retstr; *s != NUL; s = e)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5203 e = vim_strchr(s, '\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5204 if (e == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5205 e = s + STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5206 keep = *e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5207 *e = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5208
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5209 if (xp->xp_pattern[0] && vim_regexec(regmatch, s, (colnr_T)0) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5211 *e = keep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5212 if (*e != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5213 ++e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5214 continue;
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 if (ga_grow(&ga, 1) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5218 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5219
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5220 ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, (int)(e - s));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5221 ++ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5222
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5223 *e = keep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5224 if (*e != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5225 ++e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5226 }
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5227 vim_free(retstr);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5228 *file = ga.ga_data;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5229 *num_file = ga.ga_len;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5230 return OK;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5231 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5232
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5233 /*
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5234 * Expand names with a list returned by a function defined by the user.
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5235 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5236 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5237 ExpandUserList(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5238 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5239 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5240 char_u ***file)
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5241 {
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5242 list_T *retlist;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5243 listitem_T *li;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5244 garray_T ga;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5245
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5246 retlist = call_user_expand_func(call_func_retlist, xp, num_file, file);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5247 if (retlist == NULL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5248 return FAIL;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5249
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5250 ga_init2(&ga, (int)sizeof(char *), 3);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5251 /* Loop over the items in the list. */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5252 for (li = retlist->lv_first; li != NULL; li = li->li_next)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5253 {
1917
802898d3afd1 updated for version 7.2-214
vimboss
parents: 1880
diff changeset
5254 if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL)
802898d3afd1 updated for version 7.2-214
vimboss
parents: 1880
diff changeset
5255 continue; /* Skip non-string items and empty strings */
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5256
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5257 if (ga_grow(&ga, 1) == FAIL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5258 break;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5259
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5260 ((char_u **)ga.ga_data)[ga.ga_len] =
1917
802898d3afd1 updated for version 7.2-214
vimboss
parents: 1880
diff changeset
5261 vim_strsave(li->li_tv.vval.v_string);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5262 ++ga.ga_len;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5263 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5264 list_unref(retlist);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5265
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5266 *file = ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5267 *num_file = ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5268 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5269 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5270 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5272 /*
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5273 * Expand color scheme, compiler or filetype names.
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5274 * Search from 'runtimepath':
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5275 * 'runtimepath'/{dirnames}/{pat}.vim
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5276 * When "flags" has DIP_START: search also from 'start' of 'packpath':
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5277 * 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5278 * When "flags" has DIP_OPT: search also from 'opt' of 'packpath':
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5279 * 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5280 * "dirnames" is an array with one or more directory names.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5281 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5282 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5283 ExpandRTDir(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5284 char_u *pat,
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5285 int flags,
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5286 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5287 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5288 char *dirnames[])
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5289 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5290 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5291 char_u *e;
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5292 char_u *match;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5293 garray_T ga;
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5294 int i;
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5295 int pat_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5297 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 *file = NULL;
2931
f2c108f44f41 updated for version 7.3.238
Bram Moolenaar <bram@vim.org>
parents: 2929
diff changeset
5299 pat_len = (int)STRLEN(pat);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5300 ga_init2(&ga, (int)sizeof(char *), 10);
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5301
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5302 for (i = 0; dirnames[i] != NULL; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5303 {
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5304 s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5305 if (s == NULL)
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5306 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5307 ga_clear_strings(&ga);
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5308 return FAIL;
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5309 }
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5310 sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5311 globpath(p_rtp, s, &ga, 0);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5312 vim_free(s);
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5313 }
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5314
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5315 if (flags & DIP_START) {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5316 for (i = 0; dirnames[i] != NULL; ++i)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5317 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5318 s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 22));
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5319 if (s == NULL)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5320 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5321 ga_clear_strings(&ga);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5322 return FAIL;
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5323 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5324 sprintf((char *)s, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5325 globpath(p_pp, s, &ga, 0);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5326 vim_free(s);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5327 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5328 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5329
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5330 if (flags & DIP_OPT) {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5331 for (i = 0; dirnames[i] != NULL; ++i)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5332 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5333 s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 20));
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5334 if (s == NULL)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5335 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5336 ga_clear_strings(&ga);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5337 return FAIL;
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5338 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5339 sprintf((char *)s, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5340 globpath(p_pp, s, &ga, 0);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5341 vim_free(s);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5342 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5343 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5344
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5345 for (i = 0; i < ga.ga_len; ++i)
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5346 {
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5347 match = ((char_u **)ga.ga_data)[i];
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5348 s = match;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5349 e = s + STRLEN(s);
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5350 if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5351 {
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5352 e -= 4;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5353 for (s = e; s > match; mb_ptr_back(match, s))
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5354 if (s < match || vim_ispathsep(*s))
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5355 break;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5356 ++s;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5357 *e = NUL;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5358 mch_memmove(match, s, e - s + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5359 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5360 }
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5361
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5362 if (ga.ga_len == 0)
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
5363 return FAIL;
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5364
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5365 /* Sort and remove duplicates which can happen when specifying multiple
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5366 * directories in dirnames. */
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5367 remove_duplicates(&ga);
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5368
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5369 *file = ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5370 *num_file = ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5371 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5372 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5373
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5374 /*
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5375 * Expand loadplugin names:
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5376 * 'packpath'/pack/ * /opt/{pat}
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5377 */
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5378 static int
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5379 ExpandPackAddDir(
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5380 char_u *pat,
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5381 int *num_file,
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5382 char_u ***file)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5383 {
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5384 char_u *s;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5385 char_u *e;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5386 char_u *match;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5387 garray_T ga;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5388 int i;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5389 int pat_len;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5390
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5391 *num_file = 0;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5392 *file = NULL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5393 pat_len = (int)STRLEN(pat);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5394 ga_init2(&ga, (int)sizeof(char *), 10);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5395
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5396 s = alloc((unsigned)(pat_len + 26));
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5397 if (s == NULL)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5398 {
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5399 ga_clear_strings(&ga);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5400 return FAIL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5401 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5402 sprintf((char *)s, "pack/*/opt/%s*", pat);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5403 globpath(p_pp, s, &ga, 0);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5404 vim_free(s);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5405
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5406 for (i = 0; i < ga.ga_len; ++i)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5407 {
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5408 match = ((char_u **)ga.ga_data)[i];
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5409 s = gettail(match);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5410 e = s + STRLEN(s);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5411 mch_memmove(match, s, e - s + 1);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5412 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5413
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5414 if (ga.ga_len == 0)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5415 return FAIL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5416
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5417 /* Sort and remove duplicates which can happen when specifying multiple
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5418 * directories in dirnames. */
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5419 remove_duplicates(&ga);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5420
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5421 *file = ga.ga_data;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5422 *num_file = ga.ga_len;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5423 return OK;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5424 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5425
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5426 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5427
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5428 #if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5429 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5430 * Expand "file" for all comma-separated directories in "path".
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5431 * Adds the matches to "ga". Caller must init "ga".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5432 */
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5433 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5434 globpath(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5435 char_u *path,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5436 char_u *file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5437 garray_T *ga,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5438 int expand_options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5440 expand_T xpc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5441 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5442 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5443 int num_p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5444 char_u **p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5445
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5446 buf = alloc(MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5447 if (buf == NULL)
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5448 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5449
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
5450 ExpandInit(&xpc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5451 xpc.xp_context = EXPAND_FILES;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
5452
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5453 /* Loop over all entries in {path}. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5454 while (*path != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456 /* Copy one item of the path to buf[] and concatenate the file name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 copy_option_part(&path, buf, MAXPATHL, ",");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 if (STRLEN(buf) + STRLEN(file) + 2 < MAXPATHL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 {
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
5460 # if defined(MSWIN)
2495
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5461 /* Using the platform's path separator (\) makes vim incorrectly
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5462 * treat it as an escape character, use '/' instead. */
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5463 if (*buf != NUL && !after_pathsep(buf, buf + STRLEN(buf)))
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5464 STRCAT(buf, "/");
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5465 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5466 add_pathsep(buf);
2495
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5467 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468 STRCAT(buf, file);
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5469 if (ExpandFromContext(&xpc, buf, &num_p, &p,
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5470 WILD_SILENT|expand_options) != FAIL && num_p > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 {
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5472 ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options);
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5473
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5474 if (ga_grow(ga, num_p) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476 for (i = 0; i < num_p; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5477 {
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5478 ((char_u **)ga->ga_data)[ga->ga_len] =
5950
0fc665889e8f updated for version 7.4.316
Bram Moolenaar <bram@vim.org>
parents: 5873
diff changeset
5479 vim_strnsave(p[i], (int)STRLEN(p[i]));
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5480 ++ga->ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5481 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482 }
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5483
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 FreeWild(num_p, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5487 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5489 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5492 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5493
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5494 #if defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5495
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5496 /*********************************
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5497 * Command line history stuff *
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5501 * Translate a history character to the associated type number.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5502 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5503 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5504 hist_char2type(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 if (c == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5507 return HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5508 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5509 return HIST_EXPR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510 if (c == '@')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511 return HIST_INPUT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5512 if (c == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 return HIST_DEBUG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 return HIST_SEARCH; /* must be '?' or '/' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5516
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5517 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5518 * Table of history names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 * These names are used in :history and various hist...() functions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520 * It is sufficient to give the significant prefix of a history name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523 static char *(history_names[]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 "cmd",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 "search",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 "expr",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528 "input",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 "debug",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5533 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5534 /*
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5535 * Function given to ExpandGeneric() to obtain the possible first
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5536 * arguments of the ":history command.
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5537 */
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5538 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5539 get_history_arg(expand_T *xp UNUSED, int idx)
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5540 {
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5541 static char_u compl[2] = { NUL, NUL };
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5542 char *short_names = ":=@>?/";
3529
ac2e00f917df updated for version 7.3.525
Bram Moolenaar <bram@vim.org>
parents: 3503
diff changeset
5543 int short_names_count = (int)STRLEN(short_names);
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5544 int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5545
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5546 if (idx < short_names_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5547 {
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5548 compl[0] = (char_u)short_names[idx];
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5549 return compl;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5550 }
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5551 if (idx < short_names_count + history_name_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5552 return (char_u *)history_names[idx - short_names_count];
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5553 if (idx == short_names_count + history_name_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5554 return (char_u *)"all";
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5555 return NULL;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5556 }
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5557 #endif
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5558
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 * init_history() - Initialize the command line history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561 * Also used to re-allocate the history when the size changes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5562 */
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 323
diff changeset
5563 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5564 init_history(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5565 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5566 int newlen; /* new length of history table */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5567 histentry_T *temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5568 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5569 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5570 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5571
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5572 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5573 * If size of history table changed, reallocate it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5574 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5575 newlen = (int)p_hi;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5576 if (newlen != hislen) /* history length changed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5577 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5578 for (type = 0; type < HIST_COUNT; ++type) /* adjust the tables */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5579 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5580 if (newlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5581 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5582 temp = (histentry_T *)lalloc(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5583 (long_u)(newlen * sizeof(histentry_T)), TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5584 if (temp == NULL) /* out of memory! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5585 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5586 if (type == 0) /* first one: just keep the old length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5587 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5588 newlen = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5589 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5590 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591 /* Already changed one table, now we can only have zero
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5592 * length for all tables. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5593 newlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594 type = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5595 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5596 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 temp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600 if (newlen == 0 || temp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5601 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 if (hisidx[type] < 0) /* there are no entries yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5604 for (i = 0; i < newlen; ++i)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5605 clear_hist_entry(&temp[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5606 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607 else if (newlen > hislen) /* array becomes bigger */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5609 for (i = 0; i <= hisidx[type]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5610 temp[i] = history[type][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5611 j = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5612 for ( ; i <= newlen - (hislen - hisidx[type]); ++i)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5613 clear_hist_entry(&temp[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5614 for ( ; j < hislen; ++i, ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5615 temp[i] = history[type][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5616 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5617 else /* array becomes smaller or 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5619 j = hisidx[type];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5620 for (i = newlen - 1; ; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5622 if (i >= 0) /* copy newest entries */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5623 temp[i] = history[type][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5624 else /* remove older entries */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5625 vim_free(history[type][j].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5626 if (--j < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5627 j = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5628 if (j == hisidx[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5629 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5631 hisidx[type] = newlen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5632 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5633 vim_free(history[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5634 history[type] = temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5636 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5637 hislen = newlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5640
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5641 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5642 clear_hist_entry(histentry_T *hisptr)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5643 {
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5644 hisptr->hisnum = 0;
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5645 hisptr->viminfo = FALSE;
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5646 hisptr->hisstr = NULL;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
5647 hisptr->time_set = 0;
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5648 }
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5649
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 * Check if command line 'str' is already in history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5652 * If 'move_to_front' is TRUE, matching entry is moved to end of history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5654 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5655 in_history(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5656 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5657 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5658 int move_to_front, /* Move the entry to the front if it exists */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5659 int sep,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5660 int writing) /* ignore entries read from viminfo */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5662 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5663 int last_i = -1;
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5664 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 if (hisidx[type] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5667 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5668 i = hisidx[type];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5669 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5670 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5671 if (history[type][i].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5672 return FALSE;
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5673
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5674 /* For search history, check that the separator character matches as
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5675 * well. */
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5676 p = history[type][i].hisstr;
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5677 if (STRCMP(str, p) == 0
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
5678 && !(writing && history[type][i].viminfo)
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5679 && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5680 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 if (!move_to_front)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683 last_i = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5684 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5685 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5686 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5687 i = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5688 } while (i != hisidx[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5689
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5690 if (last_i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5691 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5692 str = history[type][i].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5693 while (i != hisidx[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 if (++i >= hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5696 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5697 history[type][last_i] = history[type][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5698 last_i = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5699 }
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5700 history[type][i].hisnum = ++hisnum[type];
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5701 history[type][i].viminfo = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5702 history[type][i].hisstr = str;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
5703 history[type][i].time_set = vim_time();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5704 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5706 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5707 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5708
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5709 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710 * Convert history name (from table above) to its HIST_ equivalent.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 * When "name" is empty, return "cmd" history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 * Returns -1 for unknown history name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5715 get_histtype(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5716 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5717 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5718 int len = (int)STRLEN(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5719
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5720 /* No argument: use current history. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5721 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5722 return hist_char2type(ccline.cmdfirstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5724 for (i = 0; history_names[i] != NULL; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5725 if (STRNICMP(name, history_names[i], len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5726 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 if (vim_strchr((char_u *)":=@>?/", name[0]) != NULL && name[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5729 return hist_char2type(name[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5730
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5731 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5732 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734 static int last_maptick = -1; /* last seen maptick */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737 * Add the given string to the given history. If the string is already in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738 * history then it is moved to the front. "histype" may be one of he HIST_
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 * values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5742 add_to_history(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5743 int histype,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5744 char_u *new_entry,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5745 int in_map, /* consider maptick when inside a mapping */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5746 int sep) /* separator character used (search hist) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5747 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5748 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5749 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5751 if (hislen == 0) /* no history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5754 if (cmdmod.keeppatterns && histype == HIST_SEARCH)
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5755 return;
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5756
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 * Searches inside the same mapping overwrite each other, so that only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759 * the last line is kept. Be careful not to remove a line that was moved
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760 * down, only lines that were added.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762 if (histype == HIST_SEARCH && in_map)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764 if (maptick == last_maptick)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5765 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5766 /* Current line is from the same mapping, remove it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5767 hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5768 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5769 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 --hisnum[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5771 if (--hisidx[HIST_SEARCH] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5772 hisidx[HIST_SEARCH] = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5773 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5774 last_maptick = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5775 }
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
5776 if (!in_history(histype, new_entry, TRUE, sep, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5778 if (++hisidx[histype] == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779 hisidx[histype] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 hisptr = &history[histype][hisidx[histype]];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5781 vim_free(hisptr->hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5783 /* Store the separator after the NUL of the string. */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 831
diff changeset
5784 len = (int)STRLEN(new_entry);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5785 hisptr->hisstr = vim_strnsave(new_entry, len + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 if (hisptr->hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 hisptr->hisstr[len + 1] = sep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5788
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5789 hisptr->hisnum = ++hisnum[histype];
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5790 hisptr->viminfo = FALSE;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
5791 hisptr->time_set = vim_time();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5792 if (histype == HIST_SEARCH && in_map)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5793 last_maptick = maptick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5795 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5796
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5797 #if defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5798
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5800 * Get identifier of newest history entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5804 get_history_idx(int histype)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5805 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806 if (hislen == 0 || histype < 0 || histype >= HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5807 || hisidx[histype] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5809
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5810 return history[histype][hisidx[histype]].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5812
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
5813 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 * Calculate history index from a number:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 * num > 0: seen as identifying number of a history entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816 * num < 0: relative position in history wrt newest entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5819 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5820 calc_hist_idx(int histype, int num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5821 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5823 histentry_T *hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5824 int wrapped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5825
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5826 if (hislen == 0 || histype < 0 || histype >= HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5827 || (i = hisidx[histype]) < 0 || num == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830 hist = history[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5831 if (num > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5832 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5833 while (hist[i].hisnum > num)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5834 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5835 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5836 if (wrapped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5837 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5838 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5839 wrapped = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5840 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5841 if (hist[i].hisnum == num && hist[i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5842 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5843 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5844 else if (-num <= hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5846 i += num + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5847 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5848 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5849 if (hist[i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5850 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5851 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5855 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5856 * Get a history entry by its index.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5857 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5858 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5859 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5860 get_history_entry(int histype, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5862 idx = calc_hist_idx(histype, idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5863 if (idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5864 return history[histype][idx].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5865 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5866 return (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5867 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5869 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5870 * Clear all entries of a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5871 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5872 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5873 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5874 clr_history(int histype)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5875 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5876 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5877 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5878
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5879 if (hislen != 0 && histype >= 0 && histype < HIST_COUNT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5880 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881 hisptr = history[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 for (i = hislen; i--;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5883 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5885 clear_hist_entry(hisptr);
8406
5d926807c19c commit https://github.com/vim/vim/commit/119d4693e06e68d4f099aa7287e375ae3d265fd0
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
5886 hisptr++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 hisidx[histype] = -1; /* mark history as cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5889 hisnum[histype] = 0; /* reset identifier counter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5896 * Remove all entries matching {str} from a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5900 del_history_entry(int histype, char_u *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5902 regmatch_T regmatch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5903 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5904 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5905 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 int last;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5907 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5909 regmatch.regprog = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 regmatch.rm_ic = FALSE; /* always match case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911 if (hislen != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 && histype >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913 && histype < HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5914 && *str != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5915 && (idx = hisidx[histype]) >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5916 && (regmatch.regprog = vim_regcomp(str, RE_MAGIC + RE_STRING))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5917 != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5919 i = last = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5920 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5922 hisptr = &history[histype][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5923 if (hisptr->hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5924 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5925 if (vim_regexec(&regmatch, hisptr->hisstr, (colnr_T)0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5926 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5927 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5928 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5929 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5930 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5931 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5932 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5933 if (i != last)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5935 history[histype][last] = *hisptr;
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5936 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5937 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5938 if (--last < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5939 last += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5940 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5941 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5942 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 } while (i != idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944 if (history[histype][idx].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5945 hisidx[histype] = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5946 }
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
5947 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5948 return found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5949 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5950
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5951 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5952 * Remove an indexed entry from a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5953 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5954 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5955 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5956 del_history_idx(int histype, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5957 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5958 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5960 i = calc_hist_idx(histype, idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5961 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5962 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5963 idx = hisidx[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5964 vim_free(history[histype][i].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5965
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5966 /* When deleting the last added search string in a mapping, reset
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5967 * last_maptick, so that the last added search string isn't deleted again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5968 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5969 if (histype == HIST_SEARCH && maptick == last_maptick && i == idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5970 last_maptick = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5972 while (i != idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5973 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5974 j = (i + 1) % hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5975 history[histype][i] = history[histype][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5976 i = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5977 }
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5978 clear_hist_entry(&history[histype][i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5979 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5980 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5981 hisidx[histype] = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5982 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5983 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5984
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5985 #endif /* FEAT_EVAL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5986
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5987 #if defined(FEAT_CRYPT) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5988 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5989 * Very specific function to remove the value in ":set key=val" from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5990 * history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5991 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5992 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5993 remove_key_from_history(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5994 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5995 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5998 i = hisidx[HIST_CMD];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6000 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6001 p = history[HIST_CMD][i].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6002 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6003 for ( ; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6004 if (STRNCMP(p, "key", 3) == 0 && !isalpha(p[3]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6005 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6006 p = vim_strchr(p + 3, '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6007 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6008 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6010 for (i = 0; p[i] && !vim_iswhite(p[i]); ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011 if (p[i] == '\\' && p[i + 1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6012 ++i;
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
6013 STRMOVE(p, p + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014 --p;
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 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 #endif /* FEAT_CMDHIST */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6021 #if defined(FEAT_EVAL) || defined(FEAT_CMDWIN) || defined(PROTO)
8645
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6022 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6023 * Get pointer to the command line info to use. cmdline_paste() may clear
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6024 * ccline and put the previous value in prev_ccline.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6025 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6026 static struct cmdline_info *
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6027 get_ccline_ptr(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6028 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6029 if ((State & CMDLINE) == 0)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6030 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6031 if (ccline.cmdbuff != NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6032 return &ccline;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6033 if (prev_ccline_used && prev_ccline.cmdbuff != NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6034 return &prev_ccline;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6035 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6036 }
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6037 #endif
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6038
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6039 #if defined(FEAT_EVAL) || defined(PROTO)
8645
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6040 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6041 * Get the current command line in allocated memory.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6042 * Only works when the command line is being edited.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6043 * Returns NULL when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6044 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6045 char_u *
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6046 get_cmdline_str(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6047 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6048 struct cmdline_info *p = get_ccline_ptr();
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6049
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6050 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6051 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6052 return vim_strnsave(p->cmdbuff, p->cmdlen);
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6053 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6054
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6055 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6056 * Get the current command line position, counted in bytes.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6057 * Zero is the first position.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6058 * Only works when the command line is being edited.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6059 * Returns -1 when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6060 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6061 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6062 get_cmdline_pos(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6063 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6064 struct cmdline_info *p = get_ccline_ptr();
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6065
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6066 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6067 return -1;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6068 return p->cmdpos;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6069 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6070
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6071 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6072 * Set the command line byte position to "pos". Zero is the first position.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6073 * Only works when the command line is being edited.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6074 * Returns 1 when failed, 0 when OK.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6075 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6076 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6077 set_cmdline_pos(
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6078 int pos)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6079 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6080 struct cmdline_info *p = get_ccline_ptr();
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6081
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6082 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6083 return 1;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6084
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6085 /* The position is not set directly but after CTRL-\ e or CTRL-R = has
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6086 * changed the command line. */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6087 if (pos < 0)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6088 new_cmdpos = 0;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6089 else
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6090 new_cmdpos = pos;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6091 return 0;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6092 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6093 #endif
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6094
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6095 #if defined(FEAT_EVAL) || defined(FEAT_CMDWIN) || defined(PROTO)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6096 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6097 * Get the current command-line type.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6098 * Returns ':' or '/' or '?' or '@' or '>' or '-'
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6099 * Only works when the command line is being edited.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6100 * Returns NUL when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6101 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6102 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6103 get_cmdline_type(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6104 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6105 struct cmdline_info *p = get_ccline_ptr();
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6106
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6107 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6108 return NUL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6109 if (p->cmdfirstc == NUL)
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6110 return
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6111 # ifdef FEAT_EVAL
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6112 (p->input_fn) ? '@' :
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6113 # endif
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6114 '-';
8645
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6115 return p->cmdfirstc;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6116 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6117 #endif
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6118
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6119 #if defined(FEAT_QUICKFIX) || defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6120 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6121 * Get indices "num1,num2" that specify a range within a list (not a range of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6122 * text lines in a buffer!) from a string. Used for ":history" and ":clist".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6123 * Returns OK if parsed successfully, otherwise FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6124 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6125 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6126 get_list_range(char_u **str, int *num1, int *num2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6127 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6128 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6129 int first = FALSE;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9301
diff changeset
6130 varnumber_T num;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6132 *str = skipwhite(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6133 if (**str == '-' || vim_isdigit(**str)) /* parse "from" part of range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6134 {
7447
ad432f8f68fb commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents: 7408
diff changeset
6135 vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6136 *str += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6137 *num1 = (int)num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6138 first = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6139 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6140 *str = skipwhite(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6141 if (**str == ',') /* parse "to" part of range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6142 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6143 *str = skipwhite(*str + 1);
7447
ad432f8f68fb commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents: 7408
diff changeset
6144 vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6145 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6146 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6147 *num2 = (int)num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148 *str = skipwhite(*str + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 else if (!first) /* no number given at all */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6151 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6153 else if (first) /* only one number given */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154 *num2 = *num1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6155 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6158
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6159 #if defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6160 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6161 * :history command - print a history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6162 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6163 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6164 ex_history(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6166 histentry_T *hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167 int histype1 = HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 int histype2 = HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 int hisidx1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6170 int hisidx2 = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6172 int i, j, k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6173 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 if (hislen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 MSG(_("'history' option is zero"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6179 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6181
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6182 if (!(VIM_ISDIGIT(*arg) || *arg == '-' || *arg == ','))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6183 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6184 end = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6185 while (ASCII_ISALPHA(*end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6186 || vim_strchr((char_u *)":=@>/?", *end) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6187 end++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6188 i = *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6189 *end = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6190 histype1 = get_histtype(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 if (histype1 == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 {
1853
96445585f1d9 updated for version 7.2-151
vimboss
parents: 1845
diff changeset
6193 if (STRNICMP(arg, "all", STRLEN(arg)) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6195 histype1 = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 histype2 = HIST_COUNT-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6197 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6198 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6199 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6200 *end = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6201 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6202 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6203 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6204 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6205 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6206 histype2 = histype1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6207 *end = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6208 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6209 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6210 end = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6211 if (!get_list_range(&end, &hisidx1, &hisidx2) || *end != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6212 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6213 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6214 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6217 for (; !got_int && histype1 <= histype2; ++histype1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6218 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6219 STRCPY(IObuff, "\n # ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6220 STRCAT(STRCAT(IObuff, history_names[histype1]), " history");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6221 MSG_PUTS_TITLE(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6222 idx = hisidx[histype1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6223 hist = history[histype1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224 j = hisidx1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225 k = hisidx2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6226 if (j < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6227 j = (-j > hislen) ? 0 : hist[(hislen+j+idx+1) % hislen].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228 if (k < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 k = (-k > hislen) ? 0 : hist[(hislen+k+idx+1) % hislen].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 if (idx >= 0 && j <= k)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6231 for (i = idx + 1; !got_int; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6232 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 if (i == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 if (hist[i].hisstr != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6236 && hist[i].hisnum >= j && hist[i].hisnum <= k)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 sprintf((char *)IObuff, "%c%6d ", i == idx ? '>' : ' ',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 hist[i].hisnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6241 if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6242 trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
3290
821c8be2e9d6 updated for version 7.3.413
Bram Moolenaar <bram@vim.org>
parents: 3277
diff changeset
6243 (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6245 STRCAT(IObuff, hist[i].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6247 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6248 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6249 if (i == idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6250 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6251 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6252 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6253 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6254 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6256 #if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
4903
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6257 /*
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6258 * Buffers for history read from a viminfo file. Only valid while reading.
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6259 */
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6260 static histentry_T *viminfo_history[HIST_COUNT] =
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6261 {NULL, NULL, NULL, NULL, NULL};
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6262 static int viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0, 0};
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6263 static int viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0, 0};
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6264 static int viminfo_add_at_front = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6265
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
6266 static int hist_type2char(int type, int use_question);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6267
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6268 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6269 * Translate a history type number to the associated character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6270 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6271 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6272 hist_type2char(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6273 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6274 int use_question) /* use '?' instead of '/' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6276 if (type == HIST_CMD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6277 return ':';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6278 if (type == HIST_SEARCH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6279 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6280 if (use_question)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6281 return '?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6282 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6283 return '/';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6284 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6285 if (type == HIST_EXPR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6286 return '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6287 return '@';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6288 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6289
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6290 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6291 * Prepare for reading the history from the viminfo file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6292 * This allocates history arrays to store the read history lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6293 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6294 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6295 prepare_viminfo_history(int asklen, int writing)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6298 int num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6299 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6302 init_history();
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6303 viminfo_add_at_front = (asklen != 0 && !writing);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6304 if (asklen > hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 asklen = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6306
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6308 {
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6309 /* Count the number of empty spaces in the history list. Entries read
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6310 * from viminfo previously are also considered empty. If there are
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6311 * more spaces available than we request, then fill them up. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6312 for (i = 0, num = 0; i < hislen; i++)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6313 if (history[type][i].hisstr == NULL || history[type][i].viminfo)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6314 num++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6315 len = asklen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6316 if (num > len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6317 len = num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6318 if (len <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6319 viminfo_history[type] = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6320 else
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6321 viminfo_history[type] = (histentry_T *)lalloc(
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6322 (long_u)(len * sizeof(histentry_T)), FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6323 if (viminfo_history[type] == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6324 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6325 viminfo_hislen[type] = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6326 viminfo_hisidx[type] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6327 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6328 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6330 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6331 * Accept a line from the viminfo, store it in the history array when it's
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6332 * new.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6333 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6334 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6335 read_viminfo_history(vir_T *virp, int writing)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6336 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6337 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6338 long_u len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6339 char_u *val;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6340 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6342 type = hist_char2type(virp->vir_line[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6343 if (viminfo_hisidx[type] < viminfo_hislen[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6344 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6345 val = viminfo_readstring(virp, 1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6346 if (val != NULL && *val != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6347 {
3316
7b17a38eb223 updated for version 7.3.425
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
6348 int sep = (*val == ' ' ? NUL : *val);
7b17a38eb223 updated for version 7.3.425
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
6349
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6350 if (!in_history(type, val + (type == HIST_SEARCH),
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6351 viminfo_add_at_front, sep, writing))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6352 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6353 /* Need to re-allocate to append the separator byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6354 len = STRLEN(val);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6355 p = lalloc(len + 2, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6356 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6358 if (type == HIST_SEARCH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6359 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6360 /* Search entry: Move the separator from the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6361 * column to after the NUL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6362 mch_memmove(p, val + 1, (size_t)len);
3316
7b17a38eb223 updated for version 7.3.425
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
6363 p[len] = sep;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6364 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6365 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6366 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6367 /* Not a search entry: No separator in the viminfo
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6368 * file, add a NUL separator. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6369 mch_memmove(p, val, (size_t)len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6370 p[len + 1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6371 }
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6372 viminfo_history[type][viminfo_hisidx[type]].hisstr = p;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6373 viminfo_history[type][viminfo_hisidx[type]].time_set = 0;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6374 viminfo_history[type][viminfo_hisidx[type]].viminfo = TRUE;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6375 viminfo_history[type][viminfo_hisidx[type]].hisnum = 0;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6376 viminfo_hisidx[type]++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6378 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6379 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6380 vim_free(val);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6382 return viminfo_readline(virp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6383 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6384
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6385 /*
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6386 * Accept a new style history line from the viminfo, store it in the history
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6387 * array when it's new.
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6388 */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6389 void
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6390 handle_viminfo_history(
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6391 garray_T *values,
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6392 int writing)
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6393 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6394 int type;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6395 long_u len;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6396 char_u *val;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6397 char_u *p;
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6398 bval_T *vp = (bval_T *)values->ga_data;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6399
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6400 /* Check the format:
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6401 * |{bartype},{histtype},{timestamp},{separator},"text" */
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6402 if (values->ga_len < 4
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6403 || vp[0].bv_type != BVAL_NR
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6404 || vp[1].bv_type != BVAL_NR
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6405 || (vp[2].bv_type != BVAL_NR && vp[2].bv_type != BVAL_EMPTY)
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6406 || vp[3].bv_type != BVAL_STRING)
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6407 return;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6408
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6409 type = vp[0].bv_nr;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6410 if (type >= HIST_COUNT)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6411 return;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6412 if (viminfo_hisidx[type] < viminfo_hislen[type])
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6413 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6414 val = vp[3].bv_string;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6415 if (val != NULL && *val != NUL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6416 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6417 int sep = type == HIST_SEARCH && vp[2].bv_type == BVAL_NR
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6418 ? vp[2].bv_nr : NUL;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6419 int idx;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6420 int overwrite = FALSE;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6421
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6422 if (!in_history(type, val, viminfo_add_at_front, sep, writing))
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6423 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6424 /* If lines were written by an older Vim we need to avoid
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6425 * getting duplicates. See if the entry already exists. */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6426 for (idx = 0; idx < viminfo_hisidx[type]; ++idx)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6427 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6428 p = viminfo_history[type][idx].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6429 if (STRCMP(val, p) == 0
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6430 && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6431 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6432 overwrite = TRUE;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6433 break;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6434 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6435 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6436
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6437 if (!overwrite)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6438 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6439 /* Need to re-allocate to append the separator byte. */
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6440 len = vp[3].bv_len;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6441 p = lalloc(len + 2, TRUE);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6442 }
9301
c3805fb080a6 commit https://github.com/vim/vim/commit/72e697d189616265ecefe0df4509d476df3bae40
Christian Brabandt <cb@256bit.org>
parents: 9287
diff changeset
6443 else
c3805fb080a6 commit https://github.com/vim/vim/commit/72e697d189616265ecefe0df4509d476df3bae40
Christian Brabandt <cb@256bit.org>
parents: 9287
diff changeset
6444 len = 0; /* for picky compilers */
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6445 if (p != NULL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6446 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6447 viminfo_history[type][idx].time_set = vp[1].bv_nr;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6448 if (!overwrite)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6449 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6450 mch_memmove(p, val, (size_t)len + 1);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6451 /* Put the separator after the NUL. */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6452 p[len + 1] = sep;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6453 viminfo_history[type][idx].hisstr = p;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6454 viminfo_history[type][idx].hisnum = 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6455 viminfo_history[type][idx].viminfo = TRUE;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6456 viminfo_hisidx[type]++;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6457 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6458 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6459 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6460 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6461 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6462 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6463
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6464 /*
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6465 * Concatenate history lines from viminfo after the lines typed in this Vim.
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6466 */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6467 static void
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6468 concat_history(int type)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6469 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6470 int idx;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6471 int i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6472
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6473 idx = hisidx[type] + viminfo_hisidx[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6474 if (idx >= hislen)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6475 idx -= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6476 else if (idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6477 idx = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6478 if (viminfo_add_at_front)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6479 hisidx[type] = idx;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6480 else
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6481 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6482 if (hisidx[type] == -1)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6483 hisidx[type] = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6484 do
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6485 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6486 if (history[type][idx].hisstr != NULL
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6487 || history[type][idx].viminfo)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6488 break;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6489 if (++idx == hislen)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6490 idx = 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6491 } while (idx != hisidx[type]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6492 if (idx != hisidx[type] && --idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6493 idx = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6494 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6495 for (i = 0; i < viminfo_hisidx[type]; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6496 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6497 vim_free(history[type][idx].hisstr);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6498 history[type][idx].hisstr = viminfo_history[type][i].hisstr;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6499 history[type][idx].viminfo = TRUE;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6500 history[type][idx].time_set = viminfo_history[type][i].time_set;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6501 if (--idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6502 idx = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6503 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6504 idx += 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6505 idx %= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6506 for (i = 0; i < viminfo_hisidx[type]; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6507 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6508 history[type][idx++].hisnum = ++hisnum[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6509 idx %= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6510 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6511 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6512
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6513 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6514 static int
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6515 #ifdef __BORLANDC__
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6516 _RTLENTRYF
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6517 #endif
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6518 sort_hist(const void *s1, const void *s2)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6519 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6520 histentry_T *p1 = *(histentry_T **)s1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6521 histentry_T *p2 = *(histentry_T **)s2;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6522
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6523 if (p1->time_set < p2->time_set) return -1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6524 if (p1->time_set > p2->time_set) return 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6525 return 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6526 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6527 #endif
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6528
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6529 /*
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6530 * Merge history lines from viminfo and lines typed in this Vim based on the
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6531 * timestamp;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6532 */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6533 static void
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6534 merge_history(int type)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6535 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6536 int max_len;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6537 histentry_T **tot_hist;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6538 histentry_T *new_hist;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6539 int i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6540 int len;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6541
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6542 /* Make one long list with all entries. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6543 max_len = hislen + viminfo_hisidx[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6544 tot_hist = (histentry_T **)alloc(max_len * (int)sizeof(histentry_T *));
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6545 new_hist = (histentry_T *)alloc(hislen * (int)sizeof(histentry_T));
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6546 if (tot_hist == NULL || new_hist == NULL)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6547 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6548 vim_free(tot_hist);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6549 vim_free(new_hist);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6550 return;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6551 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6552 for (i = 0; i < viminfo_hisidx[type]; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6553 tot_hist[i] = &viminfo_history[type][i];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6554 len = i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6555 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6556 if (history[type][i].hisstr != NULL)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6557 tot_hist[len++] = &history[type][i];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6558
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6559 /* Sort the list on timestamp. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6560 qsort((void *)tot_hist, (size_t)len, sizeof(histentry_T *), sort_hist);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6561
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6562 /* Keep the newest ones. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6563 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6564 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6565 if (i < len)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6566 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6567 new_hist[i] = *tot_hist[i];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6568 tot_hist[i]->hisstr = NULL;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6569 if (new_hist[i].hisnum == 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6570 new_hist[i].hisnum = ++hisnum[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6571 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6572 else
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6573 clear_hist_entry(&new_hist[i]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6574 }
9287
af25a1a875db commit https://github.com/vim/vim/commit/a890f5e34887bff7616bdb4b9ee0bf98c8d2a8f0
Christian Brabandt <cb@256bit.org>
parents: 9272
diff changeset
6575 hisidx[type] = (i < len ? i : len) - 1;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6576
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6577 /* Free what is not kept. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6578 for (i = 0; i < viminfo_hisidx[type]; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6579 vim_free(viminfo_history[type][i].hisstr);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6580 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6581 vim_free(history[type][i].hisstr);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6582 vim_free(history[type]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6583 history[type] = new_hist;
9270
79cb08f0d812 commit https://github.com/vim/vim/commit/62f8b4e18014b259bcde4a2845c602b0a44a3714
Christian Brabandt <cb@256bit.org>
parents: 9256
diff changeset
6584 vim_free(tot_hist);
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6585 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6586
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6587 /*
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6588 * Finish reading history lines from viminfo. Not used when writing viminfo.
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6589 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6590 void
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6591 finish_viminfo_history(vir_T *virp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6592 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6593 int type;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6594 int merge = virp->vir_version >= VIMINFO_VERSION_WITH_HISTORY;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6596 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6597 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6598 if (history[type] == NULL)
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6599 continue;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6600
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6601 if (merge)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6602 merge_history(type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6603 else
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6604 concat_history(type);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6605
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6606 vim_free(viminfo_history[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6607 viminfo_history[type] = NULL;
4327
0d3573091d42 updated for version 7.3.913
Bram Moolenaar <bram@vim.org>
parents: 4311
diff changeset
6608 viminfo_hisidx[type] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6609 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6610 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6611
4903
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6612 /*
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6613 * Write history to viminfo file in "fp".
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6614 * When "merge" is TRUE merge history lines with a previously read viminfo
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6615 * file, data is in viminfo_history[].
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6616 * When "merge" is FALSE just write all history lines. Used for ":wviminfo!".
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6617 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6618 void
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6619 write_viminfo_history(FILE *fp, int merge)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6620 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6621 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6622 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6623 int num_saved;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6624 int round;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6626 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6627 if (hislen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6628 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6629 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6631 num_saved = get_viminfo_parameter(hist_type2char(type, FALSE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6632 if (num_saved == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6633 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6634 if (num_saved < 0) /* Use default */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6635 num_saved = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6636 fprintf(fp, _("\n# %s History (newest to oldest):\n"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6637 type == HIST_CMD ? _("Command Line") :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 type == HIST_SEARCH ? _("Search String") :
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6639 type == HIST_EXPR ? _("Expression") :
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6640 type == HIST_INPUT ? _("Input Line") :
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6641 _("Debug Line"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6642 if (num_saved > hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6643 num_saved = hislen;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6644
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6645 /*
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6646 * Merge typed and viminfo history:
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6647 * round 1: history of typed commands.
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6648 * round 2: history from recently read viminfo.
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6649 */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6650 for (round = 1; round <= 2; ++round)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6651 {
4307
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6652 if (round == 1)
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6653 /* start at newest entry, somewhere in the list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6654 i = hisidx[type];
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6655 else if (viminfo_hisidx[type] > 0)
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6656 /* start at newest entry, first in the list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6657 i = 0;
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6658 else
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6659 /* empty list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6660 i = -1;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6661 if (i >= 0)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6662 while (num_saved > 0
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6663 && !(round == 2 && i >= viminfo_hisidx[type]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6664 {
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6665 char_u *p;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6666 time_t timestamp;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6667 int c = NUL;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6668
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6669 if (round == 1)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6670 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6671 p = history[type][i].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6672 timestamp = history[type][i].time_set;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6673 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6674 else
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6675 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6676 p = viminfo_history[type] == NULL ? NULL
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6677 : viminfo_history[type][i].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6678 timestamp = viminfo_history[type] == NULL ? 0
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6679 : viminfo_history[type][i].time_set;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6680 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6681
4903
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6682 if (p != NULL && (round == 2
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6683 || !merge
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6684 || !history[type][i].viminfo))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6685 {
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6686 --num_saved;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6687 fputc(hist_type2char(type, TRUE), fp);
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6688 /* For the search history: put the separator in the
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6689 * second column; use a space if there isn't one. */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6690 if (type == HIST_SEARCH)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6691 {
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6692 c = p[STRLEN(p) + 1];
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6693 putc(c == NUL ? ' ' : c, fp);
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6694 }
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6695 viminfo_writestring(fp, p);
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6696
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6697 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6698 char cbuf[NUMBUFLEN];
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6699
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6700 /* New style history with a bar line. Format:
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6701 * |{bartype},{histtype},{timestamp},{separator},"text" */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6702 if (c == NUL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6703 cbuf[0] = NUL;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6704 else
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6705 sprintf(cbuf, "%d", c);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6706 fprintf(fp, "|%d,%d,%ld,%s,", BARTYPE_HISTORY,
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6707 type, (long)timestamp, cbuf);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6708 barline_writestring(fp, p, LSIZE - 20);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6709 putc('\n', fp);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6710 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6711 }
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6712 if (round == 1)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6713 {
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6714 /* Decrement index, loop around and stop when back at
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6715 * the start. */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6716 if (--i < 0)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6717 i = hislen - 1;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6718 if (i == hisidx[type])
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6719 break;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6720 }
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6721 else
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6722 {
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6723 /* Increment index. Stop at the end in the while. */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6724 ++i;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6725 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6726 }
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6727 }
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6728 for (i = 0; i < viminfo_hisidx[type]; ++i)
4327
0d3573091d42 updated for version 7.3.913
Bram Moolenaar <bram@vim.org>
parents: 4311
diff changeset
6729 if (viminfo_history[type] != NULL)
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6730 vim_free(viminfo_history[type][i].hisstr);
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6731 vim_free(viminfo_history[type]);
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6732 viminfo_history[type] = NULL;
4311
8e1d1da398b3 updated for version 7.3.905
Bram Moolenaar <bram@vim.org>
parents: 4307
diff changeset
6733 viminfo_hisidx[type] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6735 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6736 #endif /* FEAT_VIMINFO */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6737
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6738 #if defined(FEAT_FKMAP) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6739 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6740 * Write a character at the current cursor+offset position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6741 * It is directly written into the command buffer block.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6742 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6743 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6744 cmd_pchar(int c, int offset)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6745 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6746 if (ccline.cmdpos + offset >= ccline.cmdlen || ccline.cmdpos + offset < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6747 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6748 EMSG(_("E198: cmd_pchar beyond the command length"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6749 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6750 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6751 ccline.cmdbuff[ccline.cmdpos + offset] = (char_u)c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6752 ccline.cmdbuff[ccline.cmdlen] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6753 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6754
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6755 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6756 cmd_gchar(int offset)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6757 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6758 if (ccline.cmdpos + offset >= ccline.cmdlen || ccline.cmdpos + offset < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6760 /* EMSG(_("cmd_gchar beyond the command length")); */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6761 return NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6762 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6763 return (int)ccline.cmdbuff[ccline.cmdpos + offset];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6765 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6767 #if defined(FEAT_CMDWIN) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6768 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6769 * Open a window on the current command line and history. Allow editing in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6770 * the window. Returns when the window is closed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6771 * Returns:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6772 * CR if the command is to be executed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6773 * Ctrl_C if it is to be abandoned
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6774 * K_IGNORE if editing continues
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6775 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6776 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6777 ex_window(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6778 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6779 struct cmdline_info save_ccline;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6780 bufref_T old_curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6781 win_T *old_curwin = curwin;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6782 bufref_T bufref;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6783 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6784 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6785 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6786 int histtype;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6787 garray_T winsizes;
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
6788 #ifdef FEAT_AUTOCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6789 char_u typestr[2];
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
6790 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6791 int save_restart_edit = restart_edit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6792 int save_State = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6793 int save_exmode = exmode_active;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6794 #ifdef FEAT_RIGHTLEFT
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6795 int save_cmdmsg_rl = cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6796 #endif
6145
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6797 #ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6798 int save_KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6799 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6800
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6801 /* Can't do this recursively. Can't do it when typing a password. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6802 if (cmdwin_type != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6803 # if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6804 || cmdline_star > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6805 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6806 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6807 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6808 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6809 return K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6810 }
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6811 set_bufref(&old_curbuf, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6812
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6813 /* Save current window sizes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 win_size_save(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6817 /* Don't execute autocommands while creating the window. */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6818 block_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6819 # endif
683
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6820 /* don't use a new tab page */
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6821 cmdmod.tab = 0;
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6822
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6823 /* Create a window for the command-line buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6824 if (win_split((int)p_cwh, WSP_BOT) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6825 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6826 beep_flush();
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6827 # ifdef FEAT_AUTOCMD
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6828 unblock_autocmds();
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6829 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6830 return K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 }
1831
eb1ce51c1cb0 updated for version 7.2-129
vimboss
parents: 1754
diff changeset
6832 cmdwin_type = get_cmdline_type();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6834 /* Create the command-line buffer empty. */
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1718
diff changeset
6835 (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
6836 (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6837 set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838 set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 curbuf->b_p_ma = TRUE;
1865
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6840 #ifdef FEAT_FOLDING
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6841 curwin->w_p_fen = FALSE;
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6842 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 # ifdef FEAT_RIGHTLEFT
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6844 curwin->w_p_rl = cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6845 cmdmsg_rl = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 # endif
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2559
diff changeset
6847 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6849 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6850 /* Do execute autocommands for setting the filetype (load syntax). */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6851 unblock_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6852 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6853
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6854 /* Showing the prompt may have set need_wait_return, reset it. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6855 need_wait_return = FALSE;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6856
1831
eb1ce51c1cb0 updated for version 7.2-129
vimboss
parents: 1754
diff changeset
6857 histtype = hist_char2type(cmdwin_type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6858 if (histtype == HIST_CMD || histtype == HIST_DEBUG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6859 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6860 if (p_wc == TAB)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6862 add_map((char_u *)"<buffer> <Tab> <C-X><C-V>", INSERT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6863 add_map((char_u *)"<buffer> <Tab> a<C-X><C-V>", NORMAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6864 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6865 set_option_value((char_u *)"ft", 0L, (char_u *)"vim", OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6866 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6867
10
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6868 /* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6869 * sets 'textwidth' to 78). */
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6870 curbuf->b_p_tw = 0;
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6871
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6872 /* Fill the buffer with the history. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6873 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6874 if (hislen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6876 i = hisidx[histtype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6877 if (i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6878 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6879 lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6880 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6881 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6882 if (++i == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6883 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6884 if (history[histtype][i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6885 ml_append(lnum++, history[histtype][i].hisstr,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6886 (colnr_T)0, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6887 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6888 while (i != hisidx[histtype]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6890 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6891
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6892 /* Replace the empty last line with the current command-line and put the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6893 * cursor there. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6894 ml_replace(curbuf->b_ml.ml_line_count, ccline.cmdbuff, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6895 curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6896 curwin->w_cursor.col = ccline.cmdpos;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6897 changed_line_abv_curs();
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6898 invalidate_botline();
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
6899 redraw_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6900
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6901 /* Save the command line info, can be used recursively. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6902 save_ccline = ccline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6903 ccline.cmdbuff = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6904 ccline.cmdprompt = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6905
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6906 /* No Ex mode here! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6907 exmode_active = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6909 State = NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6910 # ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6911 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6912 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6913
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6914 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6915 /* Trigger CmdwinEnter autocommands. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6916 typestr[0] = cmdwin_type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6917 typestr[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6918 apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
929
2448f4c8afc6 updated for version 7.0-055
vimboss
parents: 856
diff changeset
6919 if (restart_edit != 0) /* autocmd with ":startinsert" */
2448f4c8afc6 updated for version 7.0-055
vimboss
parents: 856
diff changeset
6920 stuffcharReadbuff(K_NOP);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6921 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6922
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6923 i = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6924 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6925
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6926 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6927 * Call the main loop until <CR> or CTRL-C is typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6928 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6929 cmdwin_result = 0;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
6930 main_loop(TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6931
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6932 RedrawingDisabled = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6933
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6934 # ifdef FEAT_AUTOCMD
6145
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6935
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6936 # ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6937 save_KeyTyped = KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6938 # endif
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6939
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6940 /* Trigger CmdwinLeave autocommands. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6941 apply_autocmds(EVENT_CMDWINLEAVE, typestr, typestr, FALSE, curbuf);
6145
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6942
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6943 # ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6944 /* Restore KeyTyped in case it is modified by autocommands */
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6945 KeyTyped = save_KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6946 # endif
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6947
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6948 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6949
1214
a91a2e0c4108 updated for version 7.1b
vimboss
parents: 1039
diff changeset
6950 /* Restore the command line info. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6951 ccline = save_ccline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6952 cmdwin_type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6953
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6954 exmode_active = save_exmode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6955
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
6956 /* Safety check: The old window or buffer was deleted: It's a bug when
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6957 * this happens! */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6958 if (!win_valid(old_curwin) || !bufref_valid(&old_curbuf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6959 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6960 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6961 EMSG(_("E199: Active window or buffer deleted"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6962 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6963 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6964 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6965 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6966 /* autocmds may abort script processing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6967 if (aborting() && cmdwin_result != K_IGNORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6968 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6969 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6970 /* Set the new command line from the cmdline buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6971 vim_free(ccline.cmdbuff);
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6972 if (cmdwin_result == K_XF1 || cmdwin_result == K_XF2) /* :qa[!] typed */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6973 {
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6974 char *p = (cmdwin_result == K_XF2) ? "qa" : "qa!";
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6975
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6976 if (histtype == HIST_CMD)
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6977 {
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6978 /* Execute the command directly. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6979 ccline.cmdbuff = vim_strsave((char_u *)p);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6980 cmdwin_result = CAR;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6981 }
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6982 else
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6983 {
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6984 /* First need to cancel what we were doing. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6985 ccline.cmdbuff = NULL;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6986 stuffcharReadbuff(':');
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6987 stuffReadbuff((char_u *)p);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6988 stuffcharReadbuff(CAR);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6989 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6991 else if (cmdwin_result == K_XF2) /* :qa typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6992 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6993 ccline.cmdbuff = vim_strsave((char_u *)"qa");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6994 cmdwin_result = CAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6995 }
2839
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
6996 else if (cmdwin_result == Ctrl_C)
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
6997 {
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
6998 /* :q or :close, don't execute any command
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
6999 * and don't modify the cmd window. */
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7000 ccline.cmdbuff = NULL;
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7001 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7002 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7003 ccline.cmdbuff = vim_strsave(ml_get_curline());
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7004 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7005 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7006 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7007 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7008 ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7009 ccline.cmdbufflen = ccline.cmdlen + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7010 ccline.cmdpos = curwin->w_cursor.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7011 if (ccline.cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7012 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7013 if (cmdwin_result == K_IGNORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7015 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7016 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7018 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7020 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7021 /* Don't execute autocommands while deleting the window. */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
7022 block_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7023 # endif
6876
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7024 # ifdef FEAT_CONCEAL
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7025 /* Avoid command-line window first character being concealed. */
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7026 curwin->w_p_cole = 0;
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7027 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7028 wp = curwin;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7029 set_bufref(&bufref, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7030 win_goto(old_curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7031 win_close(wp, TRUE);
2099
c1f67ce5740a updated for version 7.2.382
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7032
c1f67ce5740a updated for version 7.2.382
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7033 /* win_close() may have already wiped the buffer when 'bh' is
c1f67ce5740a updated for version 7.2.382
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7034 * set to 'wipe' */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7035 if (bufref_valid(&bufref))
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7036 close_buffer(NULL, bufref.br_buf, DOBUF_WIPE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7037
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7038 /* Restore window sizes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7039 win_size_restore(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7040
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7041 # ifdef FEAT_AUTOCMD
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
7042 unblock_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7043 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7044 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7045
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7046 ga_clear(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7047 restart_edit = save_restart_edit;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7048 # ifdef FEAT_RIGHTLEFT
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7049 cmdmsg_rl = save_cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7050 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7051
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7052 State = save_State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7053 # ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7054 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7055 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7056
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7057 return cmdwin_result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7058 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7059 #endif /* FEAT_CMDWIN */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7060
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7061 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7062 * Used for commands that either take a simple command string argument, or:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7063 * cmd << endmarker
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7064 * {script}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7065 * endmarker
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7066 * Returns a pointer to allocated memory with {script} or NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7067 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7068 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
7069 script_get(exarg_T *eap, char_u *cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7070 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7071 char_u *theline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7072 char *end_pattern = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7073 char dot[] = ".";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7074 garray_T ga;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7075
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7076 if (cmd[0] != '<' || cmd[1] != '<' || eap->getline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7077 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7079 ga_init2(&ga, 1, 0x400);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7080
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7081 if (cmd[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7082 end_pattern = (char *)skipwhite(cmd + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7083 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7084 end_pattern = dot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7085
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7086 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7087 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7088 theline = eap->getline(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7089 #ifdef FEAT_EVAL
75
388f285bda1b updated for version 7.0031
vimboss
parents: 42
diff changeset
7090 eap->cstack->cs_looplevel > 0 ? -1 :
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7091 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7092 NUL, eap->cookie, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7093
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7094 if (theline == NULL || STRCMP(end_pattern, theline) == 0)
1694
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7095 {
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7096 vim_free(theline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7097 break;
1694
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7098 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7099
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7100 ga_concat(&ga, theline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7101 ga_append(&ga, '\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7102 vim_free(theline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7103 }
21
db5102f7e29f updated for version 7.0013
vimboss
parents: 15
diff changeset
7104 ga_append(&ga, NUL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7106 return (char_u *)ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7107 }
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7108
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7109 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7110 static void
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7111 set_search_match(pos_T *t)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7112 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7113 /*
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7114 * First move cursor to end of match, then to the start. This
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7115 * moves the whole match onto the screen when 'nowrap' is set.
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7116 */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7117 t->lnum += search_match_lines;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7118 t->col = search_match_endcol;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7119 if (t->lnum > curbuf->b_ml.ml_line_count)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7120 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7121 t->lnum = curbuf->b_ml.ml_line_count;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7122 coladvance((colnr_T)MAXCOL);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7123 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7124 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7125 #endif