annotate src/ex_getln.c @ 11416:32aed0993813 v8.0.0592

patch 8.0.0592: if a job writes to a buffer screen is not updated commit https://github.com/vim/vim/commit/29ae377ea7039874337bc79ace9ab2b37b9056e5 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 30 19:39:39 2017 +0200 patch 8.0.0592: if a job writes to a buffer screen is not updated Problem: If a job writes to a buffer and the user is typing a command, the screen isn't updated. When a message is displayed the changed buffer may cause it to be cleared. (Ramel Eshed) Solution: Update the screen and then the command line if the screen didn't scroll. Avoid inserting screen lines, as it clears any message. Update the status line when the buffer changed.
author Christian Brabandt <cb@256bit.org>
date Sun, 30 Apr 2017 19:45:03 +0200
parents f57dce6b934b
children 578df034735d
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
11321
f57dce6b934b patch 8.0.0546: swap file exists briefly when opening the command window
Christian Brabandt <cb@256bit.org>
parents: 11285
diff changeset
130 static int open_cmdwin(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;
10861
7d82787b3020 patch 8.0.0320: warning for unused variable with small build
Christian Brabandt <cb@256bit.org>
parents: 10694
diff changeset
215 #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL) || defined(FEAT_SEARCH_EXTRA)
195
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
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 10970
diff changeset
237 CLEAR_POS(&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;
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
261 sb_text_start_cmdline();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
263 /* autoindent for :insert and :append */
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
264 if (firstc <= 0)
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
265 {
6929
e55929fca0cf patch 7.4.783
Bram Moolenaar <bram@vim.org>
parents: 6927
diff changeset
266 vim_memset(ccline.cmdbuff, ' ', indent);
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
267 ccline.cmdbuff[indent] = NUL;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
268 ccline.cmdpos = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
269 ccline.cmdspos = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
270 ccline.cmdlen = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
271 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
272
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 ExpandInit(&xpc);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
274 ccline.xpc = &xpc;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 if (curwin->w_p_rl && *curwin->w_p_rlc == 's'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 && (firstc == '/' || firstc == '?'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 cmdmsg_rl = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 cmdmsg_rl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 redir_off = TRUE; /* don't redirect the typed command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 if (!cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 i = msg_scrolled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 msg_scrolled = 0; /* avoid wait_return message */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 gotocmdline(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 msg_scrolled += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 redrawcmdprompt(); /* draw prompt or indent */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 xpc.xp_backslash = XP_BS_NONE;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
296 #ifndef BACKSLASH_IN_FILENAME
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
297 xpc.xp_shell = FALSE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
298 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
300 #if defined(FEAT_EVAL)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
301 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
302 {
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
303 xpc.xp_context = ccline.xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
304 xpc.xp_pattern = ccline.cmdbuff;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
305 # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
306 xpc.xp_arg = ccline.xp_arg;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
307 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
308 }
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
309 #endif
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
310
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 * Avoid scrolling when called by a recursive do_cmdline(), e.g. when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 * doing ":@0" when register 0 doesn't contain a CR.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 msg_scroll = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 State = CMDLINE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 if (firstc == '/' || firstc == '?' || firstc == '@')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 /* Use ":lmap" mappings for search pattern and input(). */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 if (curbuf->b_p_imsearch == B_IMODE_USE_INSERT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 b_im_ptr = &curbuf->b_p_iminsert;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 b_im_ptr = &curbuf->b_p_imsearch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 if (*b_im_ptr == B_IMODE_LMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 State |= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 im_set_active(*b_im_ptr == B_IMODE_IM);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 else if (p_imcmdline)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 im_set_active(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343
571
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
344 /* When inside an autocommand for writing "exiting" may be set and
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
345 * terminal mode set to cooked. Need to set raw mode here then. */
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
346 settmode(TMODE_RAW);
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
347
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 hiscnt = hislen; /* set hiscnt to impossible history value */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 histype = hist_char2type(firstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 #ifdef FEAT_DIGRAPHS
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
355 do_digraph(-1); /* init digraph typeahead */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357
5993
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
358 /* 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
359 * 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
360 if (did_emsg)
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
361 redrawcmd();
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
362 did_emsg = FALSE;
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
363 got_int = FALSE;
0206ac84ff5f updated for version 7.4.337
Bram Moolenaar <bram@vim.org>
parents: 5966
diff changeset
364
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 * Collect the command string, handling editing keys.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 {
972
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
370 redir_off = TRUE; /* Don't redirect the typed command.
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
371 Repeated, because a ":redir" inside
decce137e7be updated for version 7.0-098
vimboss
parents: 955
diff changeset
372 completion may switch it on. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 dont_scroll = FALSE; /* allow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 quit_more = FALSE; /* reset after CTRL-D which had a more-prompt */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 cursorcmd(); /* set the cursor on the right spot */
1472
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
379
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
380 /* Get a character. Ignore K_IGNORE, it should not do anything, such
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
381 * as stop completion. */
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
382 do
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
383 {
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
384 c = safe_vgetc();
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
385 } while (c == K_IGNORE);
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
386
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 if (KeyTyped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 some_key_typed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 if (cmd_hkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 c = hkmap(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393 # ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 if (cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 c = cmdl_fkmap(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 if (cmdmsg_rl && !KeyStuffed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 /* Invert horizontal movements and operations. Only when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 * typed by the user directly, not when the result of a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
401 * mapping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
403 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 case K_RIGHT: c = K_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405 case K_S_RIGHT: c = K_S_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 case K_C_RIGHT: c = K_C_LEFT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
407 case K_LEFT: c = K_RIGHT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 case K_S_LEFT: c = K_S_RIGHT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 case K_C_LEFT: c = K_C_RIGHT; break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
412 #endif
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
416 * Ignore got_int when CTRL-C was typed here.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
417 * 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
418 * ":g/pat/normal /pat" (without the <CR>).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
419 * Don't ignore it for the input() function.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
420 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
421 if ((c == Ctrl_C
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
422 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
423 || c == intr_char
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
424 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 #if defined(FEAT_EVAL) || defined(FEAT_CRYPT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 && firstc != '@'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 && !break_ctrl_c
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 && !global_busy)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
433 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
434
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
436 /* free old command line when finished moving around in the history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 * list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 if (lookfor != NULL
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
439 && c != K_S_DOWN && c != K_S_UP
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
440 && c != K_DOWN && c != K_UP
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 && c != K_PAGEDOWN && c != K_PAGEUP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 && c != K_KPAGEDOWN && c != K_KPAGEUP
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
443 && c != K_LEFT && c != K_RIGHT
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
444 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
445 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
446 vim_free(lookfor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 lookfor = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 /*
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
452 * When there are matching completions to select <S-Tab> works like
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
453 * CTRL-P (unless 'wc' is <S-Tab>).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 */
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
455 if (c != p_wc && c == K_S_TAB && xpc.xp_numfiles > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456 c = Ctrl_P;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 /* Special translations for 'wildmenu' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 if (did_wild_list && p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461 {
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
462 if (c == K_LEFT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
463 c = Ctrl_P;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
464 else if (c == K_RIGHT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
465 c = Ctrl_N;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
466 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
467 /* Hitting CR after "emenu Name.": complete submenu */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
468 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
469 && ccline.cmdpos > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
470 && ccline.cmdbuff[ccline.cmdpos - 1] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
471 && ccline.cmdbuff[ccline.cmdpos - 2] != '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
472 && (c == '\n' || c == '\r' || c == K_KENTER))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
473 c = K_DOWN;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
474 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
475
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
476 /* free expanded names when finished walking through matches */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
477 if (xpc.xp_numfiles != -1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
478 && !(c == p_wc && KeyTyped) && c != p_wcm
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
479 && c != Ctrl_N && c != Ctrl_P && c != Ctrl_A
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
480 && c != Ctrl_L)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
481 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
482 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
483 did_wild_list = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
484 #ifdef FEAT_WILDMENU
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
485 if (!p_wmnu || (c != K_UP && c != K_DOWN))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
486 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
487 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
488 wim_index = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
489 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
490 if (p_wmnu && wild_menu_showing != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
491 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
492 int skt = KeyTyped;
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
493 int old_RedrawingDisabled = RedrawingDisabled;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
494
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
495 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
496 RedrawingDisabled = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
497
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
498 if (wild_menu_showing == WM_SCROLLED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
499 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
500 /* Entered command line, move it up */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
501 cmdline_row--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
502 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
503 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
504 else if (save_p_ls != -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
505 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
506 /* restore 'laststatus' and 'winminheight' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
507 p_ls = save_p_ls;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
508 p_wmh = save_p_wmh;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
509 last_status(FALSE);
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
510 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
511 update_screen(VALID); /* redraw the screen NOW */
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
512 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
513 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
514 save_p_ls = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
515 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
516 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
517 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
518 win_redraw_last_status(topframe);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
519 redraw_statuslines();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
520 }
532
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
521 KeyTyped = skt;
7052f11a3dc9 updated for version 7.0150
vimboss
parents: 531
diff changeset
522 wild_menu_showing = 0;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
523 if (ccline.input_fn)
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
524 RedrawingDisabled = old_RedrawingDisabled;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
526 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
529 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
530 /* Special translations for 'wildmenu' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
531 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
532 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 /* Hitting <Down> after "emenu Name.": complete submenu */
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
534 if (c == K_DOWN && ccline.cmdpos > 0
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
535 && ccline.cmdbuff[ccline.cmdpos - 1] == '.')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
536 c = p_wc;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
537 else if (c == K_UP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 /* Hitting <Up>: Remove one submenu name in front of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 * cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
541 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 j = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 while (--j > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 /* check for start of menu name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 if (ccline.cmdbuff[j] == ' '
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 && ccline.cmdbuff[j - 1] != '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 /* check for start of submenu name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 if (ccline.cmdbuff[j] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
556 && ccline.cmdbuff[j - 1] != '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
558 if (found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
559 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
560 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
561 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
562 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
563 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
564 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
565 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
567 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
568 cmdline_del(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
569 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
570 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
571 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
572 }
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
573 if ((xpc.xp_context == EXPAND_FILES
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
574 || xpc.xp_context == EXPAND_DIRECTORIES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
575 || xpc.xp_context == EXPAND_SHELLCMD) && p_wmnu)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
577 char_u upseg[5];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
578
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
579 upseg[0] = PATHSEP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
580 upseg[1] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
581 upseg[2] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 upseg[3] = PATHSEP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
583 upseg[4] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
585 if (c == K_DOWN
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
586 && ccline.cmdpos > 0
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
587 && ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
588 && (ccline.cmdpos < 3
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
589 || ccline.cmdbuff[ccline.cmdpos - 2] != '.'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
590 || ccline.cmdbuff[ccline.cmdpos - 3] != '.'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
591 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
592 /* go down a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
594 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
595 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 && c == K_DOWN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
597 /* If in a direct ancestor, strip off one ../ to go down */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
598 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
599
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
601 i = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
602 while (--j > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
603 {
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
604 #ifdef FEAT_MBYTE
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
605 if (has_mbyte)
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
606 j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
410fa1a31baf updated for version 7.0023
vimboss
parents: 33
diff changeset
607 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
608 if (vim_ispathsep(ccline.cmdbuff[j]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
610 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
611 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
613 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
614 if (found
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
615 && ccline.cmdbuff[j - 1] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
616 && ccline.cmdbuff[j - 2] == '.'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
617 && (vim_ispathsep(ccline.cmdbuff[j - 3]) || j == i + 2))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
619 cmdline_del(j - 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
620 c = p_wc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
621 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
622 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
623 else if (c == K_UP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625 /* go up a directory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 j = ccline.cmdpos - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 i = (int)(xpc.xp_pattern - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
630 while (--j > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
636 if (vim_ispathsep(ccline.cmdbuff[j])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
637 #ifdef BACKSLASH_IN_FILENAME
8080
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7856
diff changeset
638 && vim_strchr((char_u *)" *?[{`$%#",
b6cb94ad97a4 commit https://github.com/vim/vim/commit/6aa2cd4be287f35f95f35c2cec6d5a24f53c4d3c
Christian Brabandt <cb@256bit.org>
parents: 7856
diff changeset
639 ccline.cmdbuff[j + 1]) == NULL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
640 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
641 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
642 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
643 if (found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
644 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
645 i = j + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
646 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
647 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
648 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
649 found = TRUE;
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
653 if (!found)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
654 j = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
655 else if (STRNCMP(ccline.cmdbuff + j, upseg, 4) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
656 j += 4;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
657 else if (STRNCMP(ccline.cmdbuff + j, upseg + 1, 3) == 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
658 && j == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
659 j += 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
660 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 j = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 if (j > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 /* TODO this is only for DOS/UNIX systems - need to put in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 * machine-specific stuff here and in upseg init */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
666 cmdline_del(j);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 put_on_cmdline(upseg + 1, 3, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 else if (ccline.cmdpos > i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 cmdline_del(i);
3204
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
671
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
672 /* 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
673 * Up key came from a mapping. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 c = p_wc;
3204
6ff80dd02b51 updated for version 7.3.372
Bram Moolenaar <bram@vim.org>
parents: 3164
diff changeset
675 KeyTyped = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
676 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 #endif /* FEAT_WILDMENU */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
680
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 /* CTRL-\ CTRL-N goes to Normal mode, CTRL-\ CTRL-G goes to Insert
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 * mode when 'insertmode' is set, CTRL-\ e prompts for an expression. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
683 if (c == Ctrl_BSL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
684 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
685 ++no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
686 ++allow_keys;
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
687 c = plain_vgetc();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688 --no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 --allow_keys;
3859
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
690 /* 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
691 * is in a mapping. */
ba9c9d0c4ff4 updated for version 7.3.686
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
692 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
693 || (ccline.cmdfirstc == '=' && KeyTyped)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
694 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
695 vungetc(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
696 c = Ctrl_BSL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
699 else if (c == 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 {
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
701 char_u *p = NULL;
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
702 int len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
704 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 * Replace the command line with the result of an expression.
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
706 * Need to save and restore the current command line, to be
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
707 * able to enter a new one...
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
708 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
709 if (ccline.cmdpos == ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
710 new_cmdpos = 99999; /* keep it at the end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 new_cmdpos = ccline.cmdpos;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
713
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
714 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 c = get_expr_register();
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
716 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 {
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
719 /* Need to save and restore ccline. And set "textlock"
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
720 * to avoid nasty things like going to another buffer when
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
721 * evaluating an expression. */
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
722 save_cmdline(&save_ccline);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
723 ++textlock;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 p = get_expr_line();
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
725 --textlock;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
726 restore_cmdline(&save_ccline);
2617
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
727
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
728 if (p != NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
729 {
2617
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
730 len = (int)STRLEN(p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
731 if (realloc_cmdbuff(len + 1) == OK)
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
732 {
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
733 ccline.cmdlen = len;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
734 STRCPY(ccline.cmdbuff, p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
735 vim_free(p);
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
736
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
737 /* 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
738 * set_cmdline_pos(). */
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
739 if (new_cmdpos > ccline.cmdlen)
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
740 ccline.cmdpos = ccline.cmdlen;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
741 else
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
742 ccline.cmdpos = new_cmdpos;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
743
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
744 KeyTyped = FALSE; /* Don't do p_wc completion. */
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
745 redrawcmd();
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
746 goto cmdline_changed;
f2927225367a updated for version 7.3.039
Bram Moolenaar <bram@vim.org>
parents: 2590
diff changeset
747 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
750 beep_flush();
2636
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
751 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
752 did_emsg = FALSE;
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
753 emsg_on_display = FALSE;
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
754 redrawcmd();
6ee9d7fa5df6 updated for version 7.3.057
Bram Moolenaar <bram@vim.org>
parents: 2630
diff changeset
755 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 if (c == Ctrl_G && p_im && restart_edit == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 restart_edit = 'a';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 gotesc = TRUE; /* will free ccline.cmdbuff after putting it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 goto returncmd; /* back to Normal mode */
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
768 #ifdef FEAT_CMDWIN
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769 if (c == cedit_key || c == K_CMDWIN)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 {
6211
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
771 if (ex_normal_busy == 0 && got_int == FALSE)
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 /*
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
774 * 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
775 */
11321
f57dce6b934b patch 8.0.0546: swap file exists briefly when opening the command window
Christian Brabandt <cb@256bit.org>
parents: 11285
diff changeset
776 c = open_cmdwin();
6211
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
777 some_key_typed = TRUE;
e754b23b7d1c updated for version 7.4.441
Bram Moolenaar <bram@vim.org>
parents: 6145
diff changeset
778 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 # ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785 c = do_digraph(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 if (c == '\n' || c == '\r' || c == K_KENTER || (c == ESC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 && (!KeyTyped || vim_strchr(p_cpo, CPO_ESC) != NULL)))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
791 /* In Ex mode a backslash escapes a newline. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
792 if (exmode_active
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
793 && c != ESC
1318
eb57516376d4 updated for version 7.1-032
vimboss
parents: 1214
diff changeset
794 && ccline.cmdpos == ccline.cmdlen
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
795 && ccline.cmdpos > 0
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
796 && ccline.cmdbuff[ccline.cmdpos - 1] == '\\')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
797 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
798 if (c == K_KENTER)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
799 c = '\n';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
800 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
801 else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
803 gotesc = FALSE; /* Might have typed ESC previously, don't
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
804 truncate the cmdline now. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
805 if (ccheck_abbr(c + ABBR_OFF))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
806 goto cmdline_changed;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
807 if (!cmd_silent)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
808 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
809 windgoto(msg_row, 0);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
810 out_flush();
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
811 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
812 break;
7
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 * Completion for 'wildchar' or 'wildcharm' key.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 * - hitting <ESC> twice means: abandon command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
819 * - wildcard expansion is only done when the 'wildchar' key is really
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 * typed, not when it comes from a macro
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
822 if ((c == p_wc && !gotesc && KeyTyped) || c == p_wcm)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 if (xpc.xp_numfiles > 0) /* typed p_wc at least twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
825 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 /* if 'wildmode' contains "list" may still need to list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827 if (xpc.xp_numfiles > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 && !did_wild_list
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 && (wim_flags[wim_index] & WIM_LIST))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
830 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 (void)showmatches(&xpc, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833 did_wild_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 if (wim_flags[wim_index] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
836 res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
837 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
838 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
839 res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
840 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
841 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
842 res = OK; /* don't insert 'wildchar' now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
843 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
844 else /* typed p_wc first time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
845 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
846 wim_index = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
847 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
848 /* if 'wildmode' first contains "longest", get longest
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
849 * common part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
850 if (wim_flags[0] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
851 res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
852 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
853 else
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
854 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
855 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
856
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
857 /* if interrupted while completing, behave like it failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
858 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
859 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
860 (void)vpeekc(); /* remove <C-C> from input stream */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
861 got_int = FALSE; /* don't abandon the command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
862 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
863 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
864 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
865 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
866 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
867 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
868
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
869 /* when more than one match, and 'wildmode' first contains
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
870 * "list", or no change and 'wildmode' contains "longest,list",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
871 * list all matches */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 if (res == OK && xpc.xp_numfiles > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 /* a "longest" that didn't do anything is skipped (but not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 * "list:longest") */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876 if (wim_flags[0] == WIM_LONGEST && ccline.cmdpos == j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
877 wim_index = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 if ((wim_flags[wim_index] & WIM_LIST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 || (p_wmnu && (wim_flags[wim_index] & WIM_FULL) != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 if (!(wim_flags[0] & WIM_LONGEST))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
886 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887 int p_wmnu_save = p_wmnu;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 p_wmnu = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 #endif
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
890 /* remove match */
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
891 nextwild(&xpc, WILD_PREV, 0, firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 p_wmnu = p_wmnu_save;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 (void)showmatches(&xpc, p_wmnu
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898 && ((wim_flags[wim_index] & WIM_LIST) == 0));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 #else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 (void)showmatches(&xpc, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 did_wild_list = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 if (wim_flags[wim_index] & WIM_LONGEST)
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
905 nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
906 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 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
908 nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
909 firstc != '@');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 else
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
912 vim_beep(BO_WILD);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 else if (xpc.xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 xpc.xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 if (wim_index < 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920 ++wim_index;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 if (c == ESC)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 gotesc = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923 if (res == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
926
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
927 gotesc = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 /* <S-Tab> goes to last match, in a clumsy way */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 if (c == K_S_TAB && KeyTyped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 {
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
932 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
933 && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
934 && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
935 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
936 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
938 if (c == NUL || c == K_ZERO) /* NUL is stored as NL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
939 c = NL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
941 do_abbr = TRUE; /* default: check for abbreviation */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 * Big switch for a typed command line character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 switch (c)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
948 case K_BS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 case Ctrl_H:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 case K_DEL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 case K_KDEL:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 case Ctrl_W:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
954 if (cmd_fkmap && c == K_BS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
955 c = K_DEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
956 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
957 if (c == K_KDEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
958 c = K_DEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 * delete current character is the same as backspace on next
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 * character, except at end of line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 if (c == K_DEL && ccline.cmdpos != ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 if (has_mbyte && c == K_DEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 ccline.cmdpos += mb_off_next(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971 if (ccline.cmdpos > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 p = ccline.cmdbuff + j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 if (c == Ctrl_W)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 while (p > ccline.cmdbuff && vim_isspace(*p))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 i = mb_get_class(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 while (p > ccline.cmdbuff && mb_get_class(p) == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 p = mb_prevptr(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 if (mb_get_class(p) != i)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
989 p += (*mb_ptr2len)(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 if (c == Ctrl_W)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 while (p > ccline.cmdbuff && vim_isspace(p[-1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 i = vim_iswordc(p[-1]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 while (p > ccline.cmdbuff && !vim_isspace(p[-1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 && vim_iswordc(p[-1]) == i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 ccline.cmdpos = (int)(p - ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006 ccline.cmdlen -= j - ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 i = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 while (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 ccline.cmdbuff[i++] = ccline.cmdbuff[j++];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1010
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 /* Truncate at the end, required for multi-byte chars. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 ccline.cmdbuff[ccline.cmdlen] = NUL;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1013 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1014 if (ccline.cmdlen == 0)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1015 {
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1016 search_start = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1017 /* 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
1018 * 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
1019 old_curswant = init_curswant;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1020 old_leftcol = init_leftcol;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1021 old_topline = init_topline;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1022 # ifdef FEAT_DIFF
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1023 old_topfill = init_topfill;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1024 # endif
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1025 old_botline = init_botline;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1026 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1027 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 else if (ccline.cmdlen == 0 && c != Ctrl_W
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031 && ccline.cmdprompt == NULL && indent == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 /* In ex and debug mode it doesn't make sense to return. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 if (exmode_active
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 || ccline.cmdfirstc == '>'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 vim_free(ccline.cmdbuff); /* no commandline to return */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042 ccline.cmdbuff = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 if (!cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1046 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 msg_col = Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1048 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1049 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1051 msg_putchar(' '); /* delete ':' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1052 }
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1053 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1054 if (ccline.cmdlen == 0)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1055 search_start = save_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1056 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1057 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1058 goto returncmd; /* back to cmd mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1059 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1060 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1062 case K_INS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 case K_KINS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 /* if Farsi mode set, we are in reverse insert mode -
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 Do not change the mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 if (cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1068 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 ccline.overstrike = !ccline.overstrike;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1075 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1076
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1077 case Ctrl_HAT:
782
d20041a02ee5 updated for version 7.0228
vimboss
parents: 772
diff changeset
1078 if (map_to_exists_mode((char_u *)"", LANGMAP, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1079 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1080 /* ":lmap" mappings exists, toggle use of mappings. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 State ^= LANGMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 im_set_active(FALSE); /* Disable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 if (State & LANGMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 *b_im_ptr = B_IMODE_LMAP;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 *b_im_ptr = B_IMODE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1093 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1094 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1095 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1096 /* There are no ":lmap" mappings, toggle IM. When
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1097 * 'imdisable' is set don't try getting the status, it's
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1098 * always off. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 if ((p_imdisable && b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1100 ? *b_im_ptr == B_IMODE_IM : im_get_status())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102 im_set_active(FALSE); /* Disable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1103 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104 *b_im_ptr = B_IMODE_NONE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 im_set_active(TRUE); /* Enable input method */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1109 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1110 *b_im_ptr = B_IMODE_IM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 if (b_im_ptr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 if (b_im_ptr == &curbuf->b_p_iminsert)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 set_iminsert_global();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 set_imsearch_global();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 #if defined(FEAT_WINDOWS) && defined(FEAT_KEYMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 /* Show/unshow value of 'keymap' in status lines later. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1126 status_redraw_curbuf();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 /* case '@': only in very old vi */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131 case Ctrl_U:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1132 /* delete all characters left of the cursor */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1133 j = ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1134 ccline.cmdlen -= j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1135 i = ccline.cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1136 while (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 ccline.cmdbuff[i++] = ccline.cmdbuff[j++];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1138 /* Truncate at the end, required for multi-byte chars. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1139 ccline.cmdbuff[ccline.cmdlen] = NUL;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1140 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1141 if (ccline.cmdlen == 0)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1142 search_start = save_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1143 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1144 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1145 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1146
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1147 #ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 case Ctrl_Y:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1149 /* Copy the modeless selection, if there is one. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1150 if (clip_star.state != SELECT_CLEARED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1151 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 if (clip_star.state == SELECT_DONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 clip_copy_modeless_selection(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1158
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1159 case ESC: /* get here if p_wc != ESC or when ESC typed twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1160 case Ctrl_C:
571
0ae54f30d5bc updated for version 7.0162
vimboss
parents: 540
diff changeset
1161 /* In exmode it doesn't make sense to return. Except when
161
6df0106fc595 updated for version 7.0049
vimboss
parents: 95
diff changeset
1162 * ":normal" runs out of characters. */
6df0106fc595 updated for version 7.0049
vimboss
parents: 95
diff changeset
1163 if (exmode_active
7850
10f17a228661 commit https://github.com/vim/vim/commit/e2c3810c2ae290bbc2cba18eb47cc2d44e4b9797
Christian Brabandt <cb@256bit.org>
parents: 7819
diff changeset
1164 && (ex_normal_busy == 0 || typebuf.tb_len > 0))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1165 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1166
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1167 gotesc = TRUE; /* will free ccline.cmdbuff after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1168 putting it in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1169 goto returncmd; /* back to cmd mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1171 case Ctrl_R: /* insert register */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1172 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1173 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1174 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1175 putcmdline('"', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1176 ++no_mapping;
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
1177 i = c = plain_vgetc(); /* CTRL-R <char> */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1178 if (i == Ctrl_O)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1179 i = Ctrl_R; /* CTRL-R CTRL-O == CTRL-R CTRL-R */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1180 if (i == Ctrl_R)
1389
bdcfe793d49f updated for version 7.1-104
vimboss
parents: 1341
diff changeset
1181 c = plain_vgetc(); /* CTRL-R CTRL-R <char> */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1182 --no_mapping;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1183 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1184 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1185 * Insert the result of an expression.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 * Need to save the current command line, to be able to enter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 * a new one...
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 new_cmdpos = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1190 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 if (ccline.cmdfirstc == '=')/* can't do this recursively */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 c = ESC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 {
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
1199 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200 c = get_expr_register();
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
1201 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 if (c != ESC) /* use ESC to cancel inserting register */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 {
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1207 cmdline_paste(c, i == Ctrl_R, FALSE);
606
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1208
613
53114ef7778f updated for version 7.0174
vimboss
parents: 606
diff changeset
1209 #ifdef FEAT_EVAL
606
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1210 /* When there was a serious error abort getting the
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1211 * command line. */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1212 if (aborting())
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1213 {
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1214 gotesc = TRUE; /* will free ccline.cmdbuff after
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1215 putting it in history */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1216 goto returncmd; /* back to cmd mode */
aa08661abaf7 updated for version 7.0172
vimboss
parents: 603
diff changeset
1217 }
613
53114ef7778f updated for version 7.0174
vimboss
parents: 606
diff changeset
1218 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 KeyTyped = FALSE; /* Don't do p_wc completion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221 if (new_cmdpos >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1222 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 /* set_cmdline_pos() was used */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224 if (new_cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 ccline.cmdpos = new_cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1229 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 case Ctrl_D:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 if (showmatches(&xpc, FALSE) == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 break; /* Use ^D as normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 continue; /* don't do incremental search now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 case K_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 case K_S_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 case K_C_RIGHT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246 if (ccline.cmdpos >= ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1247 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 i = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 if (KeyTyped && ccline.cmdspos + i >= Columns * Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 ccline.cmdspos += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
1254 ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255 + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1256 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 }
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1260 while ((c == K_S_RIGHT || c == K_C_RIGHT
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1261 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 && ccline.cmdbuff[ccline.cmdpos] != ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1265 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 case K_LEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1270 case K_S_LEFT:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 case K_C_LEFT:
1456
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1272 if (ccline.cmdpos == 0)
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1273 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 --ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 if (has_mbyte) /* move to first byte of char */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 ccline.cmdpos -= (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1280 ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1282 ccline.cmdspos -= cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1283 }
1456
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1284 while (ccline.cmdpos > 0
a73a117542b8 updated for version 7.1-171
vimboss
parents: 1432
diff changeset
1285 && (c == K_S_LEFT || c == K_C_LEFT
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1286 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1287 && ccline.cmdbuff[ccline.cmdpos - 1] != ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1288 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294 case K_IGNORE:
11321
f57dce6b934b patch 8.0.0546: swap file exists briefly when opening the command window
Christian Brabandt <cb@256bit.org>
parents: 11285
diff changeset
1295 /* Ignore mouse event or open_cmdwin() result. */
1472
32f48534fa0f updated for version 7.1-187
vimboss
parents: 1456
diff changeset
1296 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1297
625
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1298 #ifdef FEAT_GUI_W32
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1299 /* On Win32 ignore <M-F4>, we get it when closing the window was
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1300 * cancelled. */
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1301 case K_F4:
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1302 if (mod_mask == MOD_MASK_ALT)
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1303 {
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1304 redrawcmd(); /* somehow the cmdline is cleared */
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1305 goto cmdline_not_changed;
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1306 }
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1307 break;
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1308 #endif
81fe2ccc1207 updated for version 7.0179
vimboss
parents: 620
diff changeset
1309
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311 case K_MIDDLEDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1312 case K_MIDDLERELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 goto cmdline_not_changed; /* Ignore mouse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315 case K_MIDDLEMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1316 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1317 /* When GUI is active, also paste when 'mouse' is empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1318 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1319 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1320 if (!mouse_has(MOUSE_COMMAND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1321 goto cmdline_not_changed; /* Ignore mouse */
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1322 # ifdef FEAT_CLIPBOARD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1323 if (clip_star.available)
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1324 cmdline_paste('*', TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1325 else
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1326 # endif
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1327 cmdline_paste(0, TRUE, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1328 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1329 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1330
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1331 # ifdef FEAT_DND
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 case K_DROP:
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
1333 cmdline_paste('~', TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 goto cmdline_changed;
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1336 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338 case K_LEFTDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 case K_LEFTRELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 case K_RIGHTDRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 case K_RIGHTRELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 /* Ignore drag and release events when the button-down wasn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 * seen before. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 if (ignore_drag_release)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1345 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1346 /* FALLTHROUGH */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1347 case K_LEFTMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 case K_RIGHTMOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 if (c == K_LEFTRELEASE || c == K_RIGHTRELEASE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 ignore_drag_release = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 # ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354 /* When GUI is active, also move when 'mouse' is empty */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 if (!gui.in_use)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1356 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1357 if (!mouse_has(MOUSE_COMMAND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1358 goto cmdline_not_changed; /* Ignore mouse */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 # ifdef FEAT_CLIPBOARD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 if (mouse_row < cmdline_row && clip_star.available)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1362 int button, is_click, is_drag;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1363
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1364 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1365 * Handle modeless selection.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1366 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 button = get_mouse_button(KEY2TERMCAP1(c),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 &is_click, &is_drag);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 if (mouse_model_popup() && button == MOUSE_LEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 && (mod_mask & MOD_MASK_SHIFT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1372 /* Translate shift-left to right button. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 button = MOUSE_RIGHT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 mod_mask &= ~MOD_MASK_SHIFT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1376 clip_modeless(button, is_click, is_drag);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1377 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1382 for (ccline.cmdpos = 0; ccline.cmdpos < ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1383 ++ccline.cmdpos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1385 i = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 if (mouse_row <= cmdline_row + ccline.cmdspos / Columns
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1387 && mouse_col < ccline.cmdspos % Columns + i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 break;
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1389 # ifdef FEAT_MBYTE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1392 /* Count ">" for double-wide char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1393 correct_cmdspos(ccline.cmdpos, i);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
1394 ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1395 + ccline.cmdpos) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1396 }
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1397 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1398 ccline.cmdspos += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1399 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1400 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1401
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1402 /* Mouse scroll wheel: ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1403 case K_MOUSEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1404 case K_MOUSEUP:
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1405 case K_MOUSELEFT:
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1406 case K_MOUSERIGHT:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 /* Alternate buttons ignored here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 case K_X1MOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1409 case K_X1DRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1410 case K_X1RELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1411 case K_X2MOUSE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1412 case K_X2DRAG:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1413 case K_X2RELEASE:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1414 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1415
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1416 #endif /* FEAT_MOUSE */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1417
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1418 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1419 case K_LEFTMOUSE_NM: /* mousefocus click, ignored */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1420 case K_LEFTRELEASE_NM:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1423 case K_VER_SCROLLBAR:
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
1424 if (msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426 gui_do_scroll();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1427 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 case K_HOR_SCROLLBAR:
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
1432 if (msg_scrolled == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 {
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2311
diff changeset
1434 gui_do_horiz_scroll(scrollbar_value, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1435 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 #endif
692
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1439 #ifdef FEAT_GUI_TABLINE
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1440 case K_TABLINE:
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1441 case K_TABMENU:
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1442 /* Don't want to change any tabs here. Make sure the same tab
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1443 * is still selected. */
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1444 if (gui_use_tabline())
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1445 gui_mch_set_curtab(tabpage_index(curtab));
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1446 goto cmdline_not_changed;
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1447 #endif
a28f83d37113 updated for version 7.0208
vimboss
parents: 683
diff changeset
1448
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1449 case K_SELECT: /* end of Select mode mapping - ignore */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1450 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1451
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1452 case Ctrl_B: /* begin of command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1453 case K_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1454 case K_KHOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1455 case K_S_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1456 case K_C_HOME:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1457 ccline.cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1459 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1460
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1461 case Ctrl_E: /* end of command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1462 case K_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1463 case K_KEND:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1464 case K_S_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1465 case K_C_END:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1466 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1467 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1468 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1469
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1470 case Ctrl_A: /* all matches */
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1471 if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1472 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1473 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1474
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1475 case Ctrl_L:
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1476 #ifdef FEAT_SEARCH_EXTRA
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1477 if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1478 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1479 /* 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
1480 if (did_incsearch)
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1481 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1482 curwin->w_cursor = match_end;
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 10970
diff changeset
1483 if (!EQUAL_POS(curwin->w_cursor, search_start))
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1484 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1485 c = gchar_cursor();
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1486 /* 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
1487 * 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
1488 * the character to lowercase */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1489 if (p_ic && p_scs
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1490 && !pat_has_uppercase(ccline.cmdbuff))
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1491 c = MB_TOLOWER(c);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1492 if (c != NUL)
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1493 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1494 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
1495 p_magic ? "\\^$.*[" : "\\^$"), c)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1496 != NULL)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1497 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1498 /* put a backslash before special
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1499 * characters */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1500 stuffcharReadbuff(c);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1501 c = '\\';
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1502 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1503 break;
1039
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1504 }
04943f311357 updated for version 7.0-165
vimboss
parents: 1015
diff changeset
1505 }
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1506 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1507 goto cmdline_not_changed;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1508 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1509 #endif
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1510
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1511 /* completion: longest common part */
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1512 if (nextwild(&xpc, WILD_LONGEST, 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1513 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1514 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1515
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516 case Ctrl_N: /* next match */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1517 case Ctrl_P: /* previous match */
9976
e448370630b2 commit https://github.com/vim/vim/commit/7df0f6313a46b80d760c9a80241922544333351c
Christian Brabandt <cb@256bit.org>
parents: 9971
diff changeset
1518 if (xpc.xp_numfiles > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1519 {
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
1520 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
1521 0, firstc != '@') == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 break;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1523 goto cmdline_not_changed;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 }
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1525 /* FALLTHROUGH */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 case K_UP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 case K_DOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530 case K_S_UP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1531 case K_S_DOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1532 case K_PAGEUP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1533 case K_KPAGEUP:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1534 case K_PAGEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1535 case K_KPAGEDOWN:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1536 if (hislen == 0 || firstc == NUL) /* no history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1537 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1538
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1539 i = hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1540
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1541 /* save current command string so it can be restored later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1542 if (lookfor == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1543 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1544 if ((lookfor = vim_strsave(ccline.cmdbuff)) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1545 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1546 lookfor[ccline.cmdpos] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1547 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1548
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1549 j = (int)STRLEN(lookfor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1550 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1551 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1552 /* one step backwards */
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
1553 if (c == K_UP|| c == K_S_UP || c == Ctrl_P
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1554 || c == K_PAGEUP || c == K_KPAGEUP)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1555 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1556 if (hiscnt == hislen) /* first time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1557 hiscnt = hisidx[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1558 else if (hiscnt == 0 && hisidx[histype] != hislen - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1559 hiscnt = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1560 else if (hiscnt != hisidx[histype] + 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1561 --hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1562 else /* at top of list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1563 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1564 hiscnt = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1565 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1566 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1567 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1568 else /* one step forwards */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1569 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1570 /* on last entry, clear the line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1571 if (hiscnt == hisidx[histype])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1572 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1573 hiscnt = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1574 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1575 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1576
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1577 /* not on a history line, nothing to do */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1578 if (hiscnt == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1579 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1580 if (hiscnt == hislen - 1) /* wrap around */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1581 hiscnt = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1582 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1583 ++hiscnt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1585 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1586 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1587 hiscnt = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1588 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1589 }
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 195
diff changeset
1590 if ((c != K_UP && c != K_DOWN)
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 168
diff changeset
1591 || hiscnt == i
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1592 || STRNCMP(history[histype][hiscnt].hisstr,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1593 lookfor, (size_t)j) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1594 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1595 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1596
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1597 if (hiscnt != i) /* jumped to other entry */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1598 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1599 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1600 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1601 int old_firstc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 vim_free(ccline.cmdbuff);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
1604 xpc.xp_context = EXPAND_NOTHING;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1605 if (hiscnt == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1606 p = lookfor; /* back to the old one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1607 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 p = history[histype][hiscnt].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1610 if (histype == HIST_SEARCH
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 && p != lookfor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 && (old_firstc = p[STRLEN(p) + 1]) != firstc)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1614 /* Correct for the separator character used when
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1615 * adding the history entry vs the one used now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 * First loop: count length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 * Second loop: copy the characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 for (i = 0; i <= 1; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1621 for (j = 0; p[j] != NUL; ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1622 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1623 /* Replace old sep with new sep, unless it is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1624 * escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1625 if (p[j] == old_firstc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1626 && (j == 0 || p[j - 1] != '\\'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1628 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1629 ccline.cmdbuff[len] = firstc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1630 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1631 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1633 /* Escape new sep, unless it is already
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1634 * escaped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 if (p[j] == firstc
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 && (j == 0 || p[j - 1] != '\\'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1638 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1639 ccline.cmdbuff[len] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1641 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1642 if (i > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 ccline.cmdbuff[len] = p[j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1645 ++len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1646 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 if (i == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1649 alloc_cmdbuff(len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1650 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 goto returncmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1653 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1654 ccline.cmdbuff[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1655 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 alloc_cmdbuff((int)STRLEN(p));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 goto returncmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661 STRCPY(ccline.cmdbuff, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 ccline.cmdpos = ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 beep_flush();
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1669 #endif
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1670 goto cmdline_not_changed;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1671
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1672 #ifdef FEAT_SEARCH_EXTRA
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1673 case Ctrl_G: /* next match */
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1674 case Ctrl_T: /* previous match */
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1675 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
1676 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1677 pos_T t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1678 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
1679 + SEARCH_PEEK;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1680
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1681 if (char_avail())
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1682 continue;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1683 cursor_off();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1684 out_flush();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1685 if (c == Ctrl_G)
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1686 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1687 t = match_end;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1688 search_flags += SEARCH_COL;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1689 }
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1690 else
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1691 t = match_start;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1692 ++emsg_off;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1693 i = searchit(curwin, curbuf, &t,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1694 c == Ctrl_G ? FORWARD : BACKWARD,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1695 ccline.cmdbuff, count, search_flags,
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1696 RE_SEARCH, 0, NULL);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1697 --emsg_off;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1698 if (i)
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1699 {
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1700 search_start = match_start;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1701 match_end = t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1702 match_start = t;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1703 if (c == Ctrl_T && firstc == '/')
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1704 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1705 /* 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
1706 * 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
1707 * put back on the match */
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1708 search_start = t;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1709 (void)decl(&search_start);
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1710 }
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 10970
diff changeset
1711 if (LT_POS(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
1712 {
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1713 /* wrap around */
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1714 search_start = t;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1715 if (firstc == '?')
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1716 (void)incl(&search_start);
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1717 else
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1718 (void)decl(&search_start);
9990
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
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1721 set_search_match(&match_end);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1722 curwin->w_cursor = match_start;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1723 changed_cline_bef_curs();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1724 update_topline();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1725 validate_cursor();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1726 highlight_match = TRUE;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1727 old_curswant = curwin->w_curswant;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1728 old_leftcol = curwin->w_leftcol;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1729 old_topline = curwin->w_topline;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1730 # ifdef FEAT_DIFF
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1731 old_topfill = curwin->w_topfill;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1732 # endif
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1733 old_botline = curwin->w_botline;
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1734 update_screen(NOT_VALID);
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1735 redrawcmdline();
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1736 }
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1737 else
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1738 vim_beep(BO_ERROR);
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1739 goto cmdline_not_changed;
9990
6a1793d9c895 commit https://github.com/vim/vim/commit/1195669f9e434fa9ab8b57ee9470bf951e4990b8
Christian Brabandt <cb@256bit.org>
parents: 9976
diff changeset
1740 }
10094
61dc69646af6 commit https://github.com/vim/vim/commit/349e7d94e6bbb253bb87adad9039f095128ab543
Christian Brabandt <cb@256bit.org>
parents: 10082
diff changeset
1741 break;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 case Ctrl_V:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1745 case Ctrl_Q:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1746 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1747 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 putcmdline('^', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750 c = get_literal(); /* get next (two) character(s) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 do_abbr = FALSE; /* don't do abbreviation now */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1752 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 /* may need to remove ^ when composing char was typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 if (enc_utf8 && utf_iscomposing(c) && !cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 #ifdef FEAT_DIGRAPHS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 case Ctrl_K:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766 ignore_drag_release = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 putcmdline('?', TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 #ifdef USE_ON_FLY_SCROLL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 dont_scroll = TRUE; /* disallow scrolling here */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 c = get_digraph(TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1773 if (c != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1774 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1775
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778 #endif /* FEAT_DIGRAPHS */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 case Ctrl__: /* CTRL-_: switch language mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 if (!p_ari)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 break;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1784 # ifdef FEAT_FKMAP
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 if (p_altkeymap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 cmd_fkmap = !cmd_fkmap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 if (cmd_fkmap) /* in Farsi always in Insert mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 ccline.overstrike = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 else /* Hebrew is default */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
1792 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 cmd_hkmap = !cmd_hkmap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 goto cmdline_not_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1796
10676
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
1797 case K_PS:
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
1798 bracketed_paste(PASTE_CMDLINE, FALSE, NULL);
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
1799 goto cmdline_changed;
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
1800
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1801 default:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 #ifdef UNIX
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803 if (c == intr_char)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 gotesc = TRUE; /* will free ccline.cmdbuff after
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 putting it in history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 goto returncmd; /* back to Normal mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 * Normal character with no special meaning. Just set mod_mask
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 * to 0x0 so that typing Shift-Space in the GUI doesn't enter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 * the string <S-Space>. This should only happen after ^V.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 if (!IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 mod_mask = 0x0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 * End of switch on command line character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 * We come here if we have a normal character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1822 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823
4980
9ae0fe467776 updated for version 7.3.1235
Bram Moolenaar <bram@vim.org>
parents: 4903
diff changeset
1824 if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && (ccheck_abbr(
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1826 /* Add ABBR_OFF for characters above 0x100, this is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1827 * what check_abbr() expects. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1828 (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829 #endif
4980
9ae0fe467776 updated for version 7.3.1235
Bram Moolenaar <bram@vim.org>
parents: 4903
diff changeset
1830 c) || c == Ctrl_RSB))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1832
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1833 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1834 * put the character in the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1836 if (IS_SPECIAL(c) || mod_mask != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 put_on_cmdline(get_special_key_name(c, mod_mask), -1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1839 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1840 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1841 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1842 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1843 j = (*mb_char2bytes)(c, IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 IObuff[j] = NUL; /* exclude composing chars */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 put_on_cmdline(IObuff, j, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1846 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 IObuff[0] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 put_on_cmdline(IObuff, 1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1852 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 goto cmdline_changed;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 * This part implements incremental searches for "/" and "?"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1858 * Jump to cmdline_not_changed when a character has been read but the command
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 * line did not change. Then we only search and redraw if something changed in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860 * the past.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1861 * Jump to cmdline_changed when the command line did change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 * (Sorry for the goto's, I know it is ugly).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 cmdline_not_changed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1865 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1866 if (!incsearch_postponed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1867 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1868 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1869
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1870 cmdline_changed:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1871 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1872 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1873 * 'incsearch' highlighting.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 {
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1877 pos_T end_pos;
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1878 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1879 proftime_T tm;
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1880 #endif
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1881
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1882 /* if there is a character waiting, search and redraw later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 if (char_avail())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 incsearch_postponed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1888 incsearch_postponed = FALSE;
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
1889 curwin->w_cursor = search_start; /* start at old position */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 /* If there is no command line, don't do anything */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 if (ccline.cmdlen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 cursor_off(); /* so the user knows we're busy */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 ++emsg_off; /* So it doesn't beep if bad expr */
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1899 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1900 /* Set the time limit to half a second. */
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1901 profile_setlimit(500L, &tm);
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1902 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1903 i = do_search(NULL, firstc, ccline.cmdbuff, count,
1521
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1904 SEARCH_KEEP + SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK,
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1905 #ifdef FEAT_RELTIME
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1906 &tm
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1907 #else
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1908 NULL
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1909 #endif
cc4fe241baa3 updated for version 7.1-236
vimboss
parents: 1518
diff changeset
1910 );
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911 --emsg_off;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 /* if interrupted while searching, behave like it failed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1913 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1914 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1915 (void)vpeekc(); /* remove <C-C> from input stream */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 got_int = FALSE; /* don't abandon the command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 else if (char_avail())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1920 /* cancelled searching because a char was typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 incsearch_postponed = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 }
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1923 if (i != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1924 highlight_match = TRUE; /* highlight position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1925 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1926 highlight_match = FALSE; /* remove highlight */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1927
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1928 /* first restore the old curwin values, so the screen is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1929 * positioned in the same way as the actual search command */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 curwin->w_leftcol = old_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 curwin->w_topline = old_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933 curwin->w_topfill = old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1934 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1935 curwin->w_botline = old_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1936 changed_cline_bef_curs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1937 update_topline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1938
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1939 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1940 {
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1941 pos_T save_pos = curwin->w_cursor;
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1942
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1943 match_start = curwin->w_cursor;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1944 set_search_match(&curwin->w_cursor);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1945 validate_cursor();
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1946 end_pos = curwin->w_cursor;
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
1947 match_end = end_pos;
481
66080ac5dab7 updated for version 7.0130
vimboss
parents: 480
diff changeset
1948 curwin->w_cursor = save_pos;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1949 }
798
95dac6af3b3a updated for version 7.0232
vimboss
parents: 782
diff changeset
1950 else
95dac6af3b3a updated for version 7.0232
vimboss
parents: 782
diff changeset
1951 end_pos = curwin->w_cursor; /* shutup gcc 4 */
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1952
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1953 validate_cursor();
979
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1954 # ifdef FEAT_WINDOWS
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1955 /* May redraw the status line to show the cursor position. */
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1956 if (p_ru && curwin->w_status_height > 0)
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1957 curwin->w_redr_status = TRUE;
32e19278c1ad updated for version 7.0-105
vimboss
parents: 976
diff changeset
1958 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1959
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1960 save_cmdline(&save_ccline);
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
1961 update_screen(SOME_VALID);
195
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1962 restore_cmdline(&save_ccline);
49748afd794b updated for version 7.0058
vimboss
parents: 180
diff changeset
1963
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1964 /* Leave it at the end to make CTRL-R CTRL-W work. */
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1965 if (i != 0)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1966 curwin->w_cursor = end_pos;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
1967
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1968 msg_starthere();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1969 redrawcmdline();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1970 did_incsearch = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 #else /* FEAT_SEARCH_EXTRA */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 ;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 if (cmdmsg_rl
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1978 # ifdef FEAT_ARABIC
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
1979 || (p_arshape && !p_tbidi && enc_utf8)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1980 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1981 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1982 /* 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
1983 * right-left typing. Not efficient, but it works.
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1984 * 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
1985 * to avoid useless intermediate redraws. */
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1986 if (vpeekc() == NUL)
791baa7b35e1 updated for version 7.3.453
Bram Moolenaar <bram@vim.org>
parents: 3365
diff changeset
1987 redrawcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1988 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1990
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1991 returncmd:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1992
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1993 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1994 cmdmsg_rl = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1995 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1996
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1997 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1998 cmd_fkmap = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1999 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2000
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2001 ExpandCleanup(&xpc);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2002 ccline.xpc = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 #ifdef FEAT_SEARCH_EXTRA
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005 if (did_incsearch)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 {
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
2007 if (gotesc)
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2008 curwin->w_cursor = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2009 else
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2010 {
11121
778c10516955 patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 10970
diff changeset
2011 if (!EQUAL_POS(save_cursor, search_start))
10098
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2012 {
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2013 /* 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
2014 curwin->w_cursor = save_cursor;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2015 setpcmark();
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2016 }
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2017 curwin->w_cursor = search_start;
72e4b7f90465 commit https://github.com/vim/vim/commit/dda933d06c06c2792bd686d059f6ad19191ad30b
Christian Brabandt <cb@256bit.org>
parents: 10094
diff changeset
2018 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 curwin->w_curswant = old_curswant;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2020 curwin->w_leftcol = old_leftcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 curwin->w_topline = old_topline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 # ifdef FEAT_DIFF
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2023 curwin->w_topfill = old_topfill;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2024 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2025 curwin->w_botline = old_botline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2026 highlight_match = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2027 validate_cursor(); /* needed for TAB */
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
2028 redraw_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2029 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2030 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2032 if (ccline.cmdbuff != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2033 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035 * Put line in history buffer (":" and "=" only when it was typed).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037 #ifdef FEAT_CMDHIST
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 if (ccline.cmdlen && firstc != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 && (some_key_typed || histype == HIST_SEARCH))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041 add_to_history(histype, ccline.cmdbuff, TRUE,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 histype == HIST_SEARCH ? firstc : NUL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 if (firstc == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2045 vim_free(new_last_cmdline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2046 new_last_cmdline = vim_strsave(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 if (gotesc) /* abandon command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 vim_free(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 ccline.cmdbuff = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 if (msg_scrolled == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 compute_cmdrow();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 MSG("");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 redraw_cmdline = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 * If the screen was shifted up, redraw the whole screen (later).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 * If the line is too long, clear it, so ruler and shown command do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065 * not get printed in the middle of it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2066 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 msg_scroll = save_msg_scroll;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 redir_off = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2071 /* When the command line was typed, no need for a wait-return prompt. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 if (some_key_typed)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2073 need_wait_return = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2074
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 State = save_State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 #ifdef USE_IM_CONTROL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 if (b_im_ptr != NULL && *b_im_ptr != B_IMODE_LMAP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 im_save_status(b_im_ptr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 im_set_active(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 #ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 #ifdef CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 ui_cursor_shape(); /* may show different cursor shape */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 #endif
11163
f4d1fad4ac00 patch 8.0.0468: after aborting an Ex command g< does not work
Christian Brabandt <cb@256bit.org>
parents: 11158
diff changeset
2087 sb_text_end_cmdline();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2089 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2090 char_u *p = ccline.cmdbuff;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2091
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2092 /* Make ccline empty, getcmdline() may try to use it. */
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2093 ccline.cmdbuff = NULL;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2094 return p;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2095 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 #if (defined(FEAT_CRYPT) || defined(FEAT_EVAL)) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2100 * Get a command line with a prompt.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2101 * This is prepared to be called recursively from getcmdline() (e.g. by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 * f_input() when evaluating an expression from CTRL-R =).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 * Returns the command line in allocated memory, or NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2106 getcmdline_prompt(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2107 int firstc,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2108 char_u *prompt, /* command line prompt */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2109 int attr, /* attributes for prompt */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2110 int xp_context, /* type of expansion */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2111 char_u *xp_arg) /* user-defined expansion argument */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2113 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 struct cmdline_info save_ccline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115 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
2116 int msg_silent_save = msg_silent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2118 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 ccline.cmdprompt = prompt;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 ccline.cmdattr = attr;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2121 # ifdef FEAT_EVAL
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2122 ccline.xp_context = xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2123 ccline.xp_arg = xp_arg;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2124 ccline.input_fn = (firstc == '@');
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2125 # endif
8694
f2e81ae5ab48 commit https://github.com/vim/vim/commit/6135d0d803084f6c2dd8672df1bef4c6e58f9e19
Christian Brabandt <cb@256bit.org>
parents: 8647
diff changeset
2126 msg_silent = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 s = getcmdline(firstc, 1L, 0);
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
2128 restore_cmdline(&save_ccline);
8694
f2e81ae5ab48 commit https://github.com/vim/vim/commit/6135d0d803084f6c2dd8672df1bef4c6e58f9e19
Christian Brabandt <cb@256bit.org>
parents: 8647
diff changeset
2129 msg_silent = msg_silent_save;
3020
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2130 /* 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
2131 * 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
2132 * 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
2133 * 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
2134 if (ccline.cmdbuff != NULL)
92167bb91c95 updated for version 7.3.282
Bram Moolenaar <bram@vim.org>
parents: 2986
diff changeset
2135 msg_col = msg_col_save;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 return s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2138 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2141 /*
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2142 * 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
2143 * another window or buffer. Used when editing the command line, evaluating
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2144 * 'balloonexpr', etc.
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2145 */
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2146 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2147 text_locked(void)
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 #ifdef FEAT_CMDWIN
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2150 if (cmdwin_type != 0)
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2151 return TRUE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2152 #endif
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
2153 return textlock != 0;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2154 }
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2155
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2156 /*
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2157 * 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
2158 * window is open or editing the cmdline in another way.
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2159 */
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2160 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2161 text_locked_msg(void)
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2162 {
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2163 EMSG(_(get_text_locked_msg()));
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2164 }
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2165
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2166 char_u *
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2167 get_text_locked_msg(void)
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2168 {
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2169 #ifdef FEAT_CMDWIN
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2170 if (cmdwin_type != 0)
10082
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2171 return e_cmdwin;
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2172 #endif
7fc6103c6651 commit https://github.com/vim/vim/commit/5a49789a9b1f6447aeafbbbdd5b235dd10c471d5
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
2173 return e_secure;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2174 }
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
2175
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2176 #if defined(FEAT_AUTOCMD) || defined(PROTO)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2177 /*
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2178 * 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
2179 * and give an error message.
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2180 */
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2181 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2182 curbuf_locked(void)
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2183 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2184 if (curbuf_lock > 0)
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2185 {
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2186 EMSG(_("E788: Not allowed to edit another buffer now"));
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2187 return TRUE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2188 }
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2189 return allbuf_locked();
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2190 }
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2191
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 * 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
2194 * message.
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2195 */
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2196 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2197 allbuf_locked(void)
1834
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2198 {
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2199 if (allbuf_lock > 0)
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2200 {
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2201 EMSG(_("E811: Not allowed to change buffer information now"));
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2202 return TRUE;
ccbd8177e1f4 updated for version 7.2-132
vimboss
parents: 1831
diff changeset
2203 }
819
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2204 return FALSE;
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2205 }
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2206 #endif
23f82b5d2814 updated for version 7.0c10
vimboss
parents: 798
diff changeset
2207
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2209 cmdline_charsize(int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 if (cmdline_star > 0) /* showing '*', always 1 position */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 return ptr2cells(ccline.cmdbuff + idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 * Compute the offset of the cursor on the command line for the prompt and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 * indent.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2221 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2223 set_cmdspos(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 {
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2225 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 ccline.cmdspos = 1 + ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 ccline.cmdspos = 0 + ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 * Compute the screen position for the cursor on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2235 set_cmdspos_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 int i, m, c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 set_cmdspos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 if (KeyTyped)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2241 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 m = Columns * Rows;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2243 if (m < 0) /* overflow, Columns or Rows at weird value */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2244 m = MAXCOL;
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
2245 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 m = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2248 for (i = 0; i < ccline.cmdlen && i < ccline.cmdpos; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 c = cmdline_charsize(i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 /* Count ">" for double-wide multi-byte char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 correct_cmdspos(i, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 #endif
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
2256 /* If the cmdline doesn't fit, show cursor on last visible char.
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
2257 * Don't move the cursor itself, so we can still append. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 if ((ccline.cmdspos += c) >= m)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 ccline.cmdspos -= c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2265 i += (*mb_ptr2len)(ccline.cmdbuff + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 * Check if the character at "idx", which is "cells" wide, is a multi-byte
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 * character that doesn't fit, so that a ">" must be displayed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2274 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2276 correct_cmdspos(int idx, int cells)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2277 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2278 if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 && (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2280 && ccline.cmdspos % Columns + cells > Columns)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 ccline.cmdspos++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 * Get an Ex command line for the ":" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2287 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2289 getexline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2290 int c, /* normally ':', NUL for ":append" */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2291 void *cookie UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2292 int indent) /* indent for inside conditionals */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 /* When executing a register, remove ':' that's in front of each line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 if (exec_from_reg && vpeekc() == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 (void)vgetc();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 return getcmdline(c, 1L, indent);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2301 * Get an Ex command line for Ex mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302 * In Ex mode we only use the OS supplied line editing features and no
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 * mappings or abbreviations.
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2304 * Returns a string in allocated memory or NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2307 getexmodeline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2308 int promptc, /* normally ':', NUL for ":append" and '?' for
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2309 :s prompt */
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2310 void *cookie UNUSED,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2311 int indent) /* indent for inside conditionals */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2313 garray_T line_ga;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2314 char_u *pend;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2315 int startcol = 0;
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2316 int c1 = 0;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2317 int escaped = FALSE; /* CTRL-V typed */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2318 int vcol = 0;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2319 char_u *p;
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2320 int prev_char;
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2321 int len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 /* Switch cursor on now. This avoids that it happens after the "\n", which
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 * confuses the system function that computes tabstops. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 cursor_on();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 /* always start in column 0; write a newline if necessary */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2328 compute_cmdrow();
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2329 if ((msg_col || msg_didout) && promptc != '?')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2330 msg_putchar('\n');
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2331 if (promptc == ':')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 {
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2333 /* indent that is only displayed, not in the line itself */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2334 if (p_prompt)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2335 msg_putchar(':');
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 while (indent-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2337 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 startcol = msg_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2341 ga_init2(&line_ga, 1, 30);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2342
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2343 /* autoindent for :insert and :append is in the line itself */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2344 if (promptc <= 0)
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2345 {
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2346 vcol = indent;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2347 while (indent >= 8)
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, TAB);
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2350 msg_puts((char_u *)" ");
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2351 indent -= 8;
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2352 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2353 while (indent-- > 0)
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2354 {
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2355 ga_append(&line_ga, ' ');
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2356 msg_putchar(' ');
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2357 }
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2358 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2359 ++no_mapping;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2360 ++allow_keys;
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2361
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 * Get the line, one character at a time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 got_int = FALSE;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2366 while (!got_int)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 {
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
2368 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
2369 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
2370
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 if (ga_grow(&line_ga, 40) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2372 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373
10970
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2374 /*
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2375 * Get one character at a time.
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2376 */
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2377 prev_char = c1;
10970
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2378
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2379 /* Check for a ":normal" command and no more characters left. */
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2380 if (ex_normal_busy > 0 && typebuf.tb_len == 0)
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2381 c1 = '\n';
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2382 else
ab9f7bbe4439 patch 8.0.0374: invalid memory access when using :sc in Ex mode
Christian Brabandt <cb@256bit.org>
parents: 10942
diff changeset
2383 c1 = vgetc();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 /*
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2386 * Handle line editing.
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2387 * Previously this was left to the system, putting the terminal in
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2388 * 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
2389 */
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2390 if (got_int)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2391 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2392 msg_putchar('\n');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2393 break;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2394 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2395
10676
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2396 if (c1 == K_PS)
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2397 {
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2398 bracketed_paste(PASTE_EX, FALSE, &line_ga);
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2399 goto redraw;
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2400 }
b8c04c007d39 patch 8.0.0228: pasting in xterm on the command line has PasteStart
Christian Brabandt <cb@256bit.org>
parents: 10565
diff changeset
2401
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2402 if (!escaped)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2404 /* CR typed means "enter", which is NL */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2405 if (c1 == '\r')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2406 c1 = '\n';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2407
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2408 if (c1 == BS || c1 == K_BS
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2409 || c1 == DEL || c1 == K_DEL || c1 == K_KDEL)
7
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 (line_ga.ga_len > 0)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2412 {
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2413 #ifdef FEAT_MBYTE
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2414 if (has_mbyte)
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2415 {
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2416 p = (char_u *)line_ga.ga_data;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2417 p[line_ga.ga_len] = NUL;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2418 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
2419 line_ga.ga_len -= len;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2420 }
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2421 else
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2422 #endif
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2423 --line_ga.ga_len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2424 goto redraw;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2425 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2426 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2427 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2428
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2429 if (c1 == Ctrl_U)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2430 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2431 msg_col = startcol;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2432 msg_clr_eos();
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2433 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
2434 goto redraw;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2435 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2436
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2437 if (c1 == Ctrl_T)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2438 {
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
2439 sw = get_sw_value(curbuf);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2440 p = (char_u *)line_ga.ga_data;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2441 p[line_ga.ga_len] = NUL;
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2442 indent = get_indent_str(p, 8, FALSE);
3740
7de7ef01288d updated for version 7.3.629
Bram Moolenaar <bram@vim.org>
parents: 3628
diff changeset
2443 indent += sw - indent % sw;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2444 add_indent:
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2445 while (get_indent_str(p, 8, FALSE) < indent)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446 {
7009
286fd54c7ae3 patch 7.4.822
Bram Moolenaar <bram@vim.org>
parents: 6949
diff changeset
2447 (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
2448 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
2449 s = skipwhite(p);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2450 mch_memmove(s + 1, s, line_ga.ga_len - (s - p) + 1);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2451 *s = ' ';
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2452 ++line_ga.ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2453 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2454 redraw:
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2455 /* redraw the line */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2456 msg_col = startcol;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2457 vcol = 0;
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2458 p = (char_u *)line_ga.ga_data;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2459 p[line_ga.ga_len] = NUL;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2460 while (p < (char_u *)line_ga.ga_data + line_ga.ga_len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2461 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2462 if (*p == TAB)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2463 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2464 do
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2465 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2466 msg_putchar(' ');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2467 } while (++vcol % 8);
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2468 ++p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2470 else
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2471 {
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2472 len = MB_PTR2LEN(p);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2473 msg_outtrans_len(p, len);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2474 vcol += ptr2cells(p);
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2475 p += len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2478 msg_clr_eos();
1329
417c4d78a09c updated for version 7.1-043
vimboss
parents: 1322
diff changeset
2479 windgoto(msg_row, msg_col);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2480 continue;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2481 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2482
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2483 if (c1 == Ctrl_D)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2484 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2485 /* Delete one shiftwidth. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2486 p = (char_u *)line_ga.ga_data;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2487 if (prev_char == '0' || prev_char == '^')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2489 if (prev_char == '^')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2490 ex_keep_indent = TRUE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2491 indent = 0;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2492 p[--line_ga.ga_len] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2493 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2495 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2496 p[line_ga.ga_len] = NUL;
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2497 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
2498 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
2499 {
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
2500 --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
2501 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
2502 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2503 }
5995
ef83b423ebf7 updated for version 7.4.338
Bram Moolenaar <bram@vim.org>
parents: 5993
diff changeset
2504 while (get_indent_str(p, 8, FALSE) > indent)
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2505 {
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
2506 s = skipwhite(p);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2507 mch_memmove(s - 1, s, line_ga.ga_len - (s - p) + 1);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2508 --line_ga.ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2509 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2510 goto add_indent;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2511 }
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2512
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2513 if (c1 == Ctrl_V || c1 == Ctrl_Q)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2514 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2515 escaped = TRUE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2516 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2517 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2518
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2519 /* Ignore special key codes: mouse movement, K_IGNORE, etc. */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2520 if (IS_SPECIAL(c1))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2521 continue;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2522 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2523
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2524 if (IS_SPECIAL(c1))
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2525 c1 = '?';
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2526 #ifdef FEAT_MBYTE
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2527 if (has_mbyte)
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2528 len = (*mb_char2bytes)(c1,
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2529 (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
2530 else
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2531 #endif
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2532 {
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2533 len = 1;
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2534 ((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
2535 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2536 if (c1 == '\n')
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2537 msg_putchar('\n');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2538 else if (c1 == TAB)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2539 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2540 /* Don't use chartabsize(), 'ts' can be different */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2541 do
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2542 {
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2543 msg_putchar(' ');
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2544 } while (++vcol % 8);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2545 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2548 msg_outtrans_len(
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2549 ((char_u *)line_ga.ga_data) + line_ga.ga_len, len);
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2550 vcol += char2cells(c1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 }
5966
c476e0ac8b40 updated for version 7.4.324
Bram Moolenaar <bram@vim.org>
parents: 5950
diff changeset
2552 line_ga.ga_len += len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2553 escaped = FALSE;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2554
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2555 windgoto(msg_row, msg_col);
164
8b0ee9d57d7f updated for version 7.0050
vimboss
parents: 161
diff changeset
2556 pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2557
2590
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2558 /* 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
2559 * 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
2560 if (line_ga.ga_len > 0 && pend[-1] == '\n')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 {
2590
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2562 int bcount = 0;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2563
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2564 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
2565 ++bcount;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2566
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2567 if (bcount > 0)
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2568 {
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2569 /* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2570 * "\NL", etc. */
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2571 line_ga.ga_len -= (bcount + 1) / 2;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2572 pend -= (bcount + 1) / 2;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2573 pend[-1] = '\n';
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2574 }
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2575
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2576 if ((bcount & 1) == 0)
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2577 {
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2578 --line_ga.ga_len;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2579 --pend;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2580 *pend = NUL;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2581 break;
b57f2617965f updated for version 7.3.014
Bram Moolenaar <bram@vim.org>
parents: 2583
diff changeset
2582 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2586 --no_mapping;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2587 --allow_keys;
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
2588
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 /* make following messages go to the next line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590 msg_didout = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 msg_col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592 if (msg_row < Rows - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2593 ++msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2594 emsg_on_display = FALSE; /* don't want ui_delay() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2595
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2596 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2597 ga_clear(&line_ga);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2598
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2599 return (char_u *)line_ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2600 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601
502
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 481
diff changeset
2602 # if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \
52e76e2b5b65 updated for version 7.0140
vimboss
parents: 481
diff changeset
2603 || defined(FEAT_MOUSESHAPE) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 * Return TRUE if ccline.overstrike is on.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2608 cmdline_overstrike(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2610 return ccline.overstrike;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2614 * Return TRUE if the cursor is at the end of the cmdline.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2617 cmdline_at_end(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 return (ccline.cmdpos >= ccline.cmdlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2620 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622
574
25a70b1cd2da updated for version 7.0163
vimboss
parents: 571
diff changeset
2623 #if (defined(FEAT_XIM) && (defined(FEAT_GUI_GTK))) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2624 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2625 * Return the virtual column number at the current cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 * 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
2627 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 colnr_T
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2629 cmdline_getvcol_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 if (ccline.cmdbuff == NULL || ccline.cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 return MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2635 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 int i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640 for (col = 0; i < ccline.cmdpos; ++col)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2641 i += (*mb_ptr2len)(ccline.cmdbuff + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2642
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 return col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 return ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 * If part of the command line is an IM preedit string, redraw it with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 * IM feedback attributes. The cursor position is restored after drawing.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2657 redrawcmd_preedit(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 if ((State & CMDLINE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 && xic != NULL
976
727ab557c58a updated for version 7.0-102
vimboss
parents: 972
diff changeset
2661 /* && im_get_status() doesn't work when using SCIM */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 && !p_imdisable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2663 && im_is_preediting())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 int cmdpos = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 int cmdspos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667 int old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 int old_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 colnr_T col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2670
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 old_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2672 old_col = msg_col;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
2673 cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2678 for (col = 0; col < preedit_start_col
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 && 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 cmdspos += (*mb_ptr2cells)(ccline.cmdbuff + cmdpos);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2682 cmdpos += (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 cmdspos += preedit_start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 cmdpos += preedit_start_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2692 msg_row = cmdline_row + (cmdspos / (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 msg_col = cmdspos % (int)Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 for (col = 0; cmdpos < ccline.cmdlen; ++col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2698 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 int char_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 int char_attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 char_attr = im_get_feedback_attr(col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 if (char_attr < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 break; /* end of preedit string */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2707 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2708 char_len = (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2709 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2711 char_len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 msg_outtrans_len_attr(ccline.cmdbuff + cmdpos, char_len, char_attr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 cmdpos += char_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 msg_row = old_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718 msg_col = old_col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 #endif /* FEAT_XIM && FEAT_GUI_GTK */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 * Allocate a new command line buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 * Assigns the new buffer to ccline.cmdbuff and ccline.cmdbufflen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 * Returns the new value of ccline.cmdbuff and ccline.cmdbufflen.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2729 alloc_cmdbuff(int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2731 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2732 * give some extra space to avoid having to allocate all the time
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2733 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2734 if (len < 80)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2735 len = 100;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2736 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2737 len += 20;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2739 ccline.cmdbuff = alloc(len); /* caller should check for out-of-memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2740 ccline.cmdbufflen = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2741 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2742
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2743 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2744 * Re-allocate the command line to length len + something extra.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2745 * return FAIL for failure, OK otherwise
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2746 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2747 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2748 realloc_cmdbuff(int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2749 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2750 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2751
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2752 if (len < ccline.cmdbufflen)
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
2753 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
2754
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2755 p = ccline.cmdbuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2756 alloc_cmdbuff(len); /* will get some more */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2757 if (ccline.cmdbuff == NULL) /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2758 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2759 ccline.cmdbuff = p; /* keep the old one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2760 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2761 }
2556
e065501c703a Fix illegal memory access when using expressions in the command line.
Bram Moolenaar <bram@vim.org>
parents: 2534
diff changeset
2762 /* 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
2763 * 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
2764 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
2765 ccline.cmdbuff[ccline.cmdlen] = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2766 vim_free(p);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2767
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2768 if (ccline.xpc != NULL
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2769 && ccline.xpc->xp_pattern != NULL
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2770 && ccline.xpc->xp_context != EXPAND_NOTHING
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2771 && ccline.xpc->xp_context != EXPAND_UNSUCCESSFUL)
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2772 {
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
2773 int i = (int)(ccline.xpc->xp_pattern - p);
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2774
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2775 /* 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
2776 * to point into the newly allocated memory. */
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2777 if (i >= 0 && i <= ccline.cmdlen)
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2778 ccline.xpc->xp_pattern = ccline.cmdbuff + i;
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2779 }
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
2780
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2781 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2783
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2784 #if defined(FEAT_ARABIC) || defined(PROTO)
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2785 static char_u *arshape_buf = NULL;
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2786
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2787 # if defined(EXITFREE) || defined(PROTO)
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2788 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2789 free_cmdline_buf(void)
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2790 {
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2791 vim_free(arshape_buf);
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2792 }
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2793 # endif
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2794 #endif
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2795
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2796 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2797 * Draw part of the cmdline at the current cursor position. But draw stars
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2798 * when cmdline_star is TRUE.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2799 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2800 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2801 draw_cmdline(int start, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2802 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2803 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2804 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2805
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2806 if (cmdline_star > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2807 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2808 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2809 msg_putchar('*');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2810 # ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2811 if (has_mbyte)
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2812 i += (*mb_ptr2len)(ccline.cmdbuff + start + i) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2813 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2815 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2816 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2817 #ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2818 if (p_arshape && !p_tbidi && enc_utf8 && len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2819 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2820 static int buflen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2821 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2822 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2823 int newlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2824 int mb_l;
719
82ef0c58b012 updated for version 7.0219
vimboss
parents: 716
diff changeset
2825 int pc, pc1 = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2826 int prev_c = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2827 int prev_c1 = 0;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2828 int u8c;
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2829 int u8cc[MAX_MCO];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2830 int nc = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2831
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2832 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2833 * Do arabic shaping into a temporary buffer. This is very
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2834 * inefficient!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2835 */
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2836 if (len * 2 + 2 > buflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2837 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2838 /* Re-allocate the buffer. We keep it around to avoid a lot of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2839 * alloc()/free() calls. */
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2840 vim_free(arshape_buf);
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2841 buflen = len * 2 + 2;
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2842 arshape_buf = alloc(buflen);
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2843 if (arshape_buf == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2844 return; /* out of memory */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2845 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2846
507
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2847 if (utf_iscomposing(utf_ptr2char(ccline.cmdbuff + start)))
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2848 {
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2849 /* Prepend a space to draw the leading composing char on. */
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2850 arshape_buf[0] = ' ';
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2851 newlen = 1;
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2852 }
a1059cda45f2 updated for version 7.0142
vimboss
parents: 502
diff changeset
2853
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2854 for (j = start; j < start + len; j += mb_l)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2855 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2856 p = ccline.cmdbuff + j;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2857 u8c = utfc_ptr2char_len(p, u8cc, start + len - j);
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2858 mb_l = utfc_ptr2len_len(p, start + len - j);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2859 if (ARABIC_CHAR(u8c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2860 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2861 /* Do Arabic shaping. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2862 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2863 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2864 /* displaying from right to left */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2865 pc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2866 pc1 = prev_c1;
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2867 prev_c1 = u8cc[0];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2868 if (j + mb_l >= start + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2869 nc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2870 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2871 nc = utf_ptr2char(p + mb_l);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2873 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2874 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2875 /* displaying from left to right */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2876 if (j + mb_l >= start + len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2877 pc = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2878 else
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2879 {
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2880 int pcc[MAX_MCO];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2881
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2882 pc = utfc_ptr2char_len(p + mb_l, pcc,
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2883 start + len - j - mb_l);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2884 pc1 = pcc[0];
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2885 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2886 nc = prev_c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2887 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2888 prev_c = u8c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2889
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2890 u8c = arabic_shape(u8c, NULL, &u8cc[0], pc, pc1, nc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2891
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2892 newlen += (*mb_char2bytes)(u8c, arshape_buf + newlen);
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2893 if (u8cc[0] != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2894 {
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2895 newlen += (*mb_char2bytes)(u8cc[0], arshape_buf + newlen);
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2896 if (u8cc[1] != 0)
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
2897 newlen += (*mb_char2bytes)(u8cc[1],
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2898 arshape_buf + newlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2900 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2901 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2902 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2903 prev_c = u8c;
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2904 mch_memmove(arshape_buf + newlen, p, mb_l);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2905 newlen += mb_l;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2906 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2907 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2908
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2909 msg_outtrans_len(arshape_buf, newlen);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2910 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2911 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2912 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2913 msg_outtrans_len(ccline.cmdbuff + start, len);
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 * Put a character on the command line. Shifts the following text to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2918 * right when "shift" is TRUE. Used for CTRL-V, CTRL-K, etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2919 * "c" must be printable (fit in one display cell)!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2920 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2921 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2922 putcmdline(int c, int shift)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2923 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2924 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2925 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2926 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2927 msg_putchar(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2928 if (shift)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2929 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2930 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2931 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2932 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2933
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2934 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2935 * Undo a putcmdline(c, FALSE).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2936 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2937 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2938 unputcmdline(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2939 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2940 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2941 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2942 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2943 if (ccline.cmdlen == ccline.cmdpos)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2944 msg_putchar(' ');
3558
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2945 #ifdef FEAT_MBYTE
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2946 else if (has_mbyte)
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2947 draw_cmdline(ccline.cmdpos,
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2948 (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
7a710cf51d73 updated for version 7.3.539
Bram Moolenaar <bram@vim.org>
parents: 3529
diff changeset
2949 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2950 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2951 draw_cmdline(ccline.cmdpos, 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2952 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2953 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2954 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2955
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2956 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2957 * Put the given string, of the given length, onto the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2958 * If len is -1, then STRLEN() is used to calculate the length.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2959 * 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
2960 * part will be redrawn, otherwise it will not. If this function is called
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2961 * twice in a row, then 'redraw' should be FALSE and redrawcmd() should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2962 * called afterwards.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2963 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2964 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
2965 put_on_cmdline(char_u *str, int len, int redraw)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2967 int retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2968 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2969 int m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2970 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2972 if (len < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2973 len = (int)STRLEN(str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2974
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2975 /* Check if ccline.cmdbuff needs to be longer */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2976 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
2977 retval = realloc_cmdbuff(ccline.cmdlen + len + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2978 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2979 retval = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2980 if (retval == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2981 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2982 if (!ccline.overstrike)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2983 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2984 mch_memmove(ccline.cmdbuff + ccline.cmdpos + len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2985 ccline.cmdbuff + ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2986 (size_t)(ccline.cmdlen - ccline.cmdpos));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2987 ccline.cmdlen += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2989 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2990 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2991 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2992 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2993 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2994 /* Count nr of characters in the new string. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2995 m = 0;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
2996 for (i = 0; i < len; i += (*mb_ptr2len)(str + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2997 ++m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2998 /* Count nr of bytes in cmdline that are overwritten by these
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2999 * characters. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3000 for (i = ccline.cmdpos; i < ccline.cmdlen && m > 0;
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
3001 i += (*mb_ptr2len)(ccline.cmdbuff + i))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3002 --m;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3003 if (i < ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3004 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3005 mch_memmove(ccline.cmdbuff + ccline.cmdpos + len,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3006 ccline.cmdbuff + i, (size_t)(ccline.cmdlen - i));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3007 ccline.cmdlen += ccline.cmdpos + len - i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3008 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3009 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3010 ccline.cmdlen = ccline.cmdpos + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3011 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3012 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3013 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3014 if (ccline.cmdpos + len > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3015 ccline.cmdlen = ccline.cmdpos + len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3016 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3017 mch_memmove(ccline.cmdbuff + ccline.cmdpos, str, (size_t)len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3018 ccline.cmdbuff[ccline.cmdlen] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3019
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3020 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3021 if (enc_utf8)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3022 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3023 /* When the inserted text starts with a composing character,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3024 * backup to the character before it. There could be two of them.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3025 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3026 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3027 c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3028 while (ccline.cmdpos > 0 && utf_iscomposing(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3029 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3030 i = (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3031 ccline.cmdbuff + ccline.cmdpos - 1) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3032 ccline.cmdpos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3033 len += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3034 c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3035 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3036 # ifdef FEAT_ARABIC
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3037 if (i == 0 && ccline.cmdpos > 0 && arabic_maycombine(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3038 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3039 /* Check the previous character for Arabic combining pair. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3040 i = (*mb_head_off)(ccline.cmdbuff,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3041 ccline.cmdbuff + ccline.cmdpos - 1) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3042 if (arabic_combine(utf_ptr2char(ccline.cmdbuff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3043 + ccline.cmdpos - i), c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3044 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3045 ccline.cmdpos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3046 len += i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3047 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3048 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3049 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3050 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3051 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3052 if (i != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3053 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3054 /* Also backup the cursor position. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3055 i = ptr2cells(ccline.cmdbuff + ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3056 ccline.cmdspos -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3057 msg_col -= i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3058 if (msg_col < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3059 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3060 msg_col += Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3061 --msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3062 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3063 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3064 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3065 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3066
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3067 if (redraw && !cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3068 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3069 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3070 i = cmdline_row;
3114
5b53cea62e5d updated for version 7.3.328
Bram Moolenaar <bram@vim.org>
parents: 3106
diff changeset
3071 cursorcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3072 draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3073 /* Avoid clearing the rest of the line too often. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3074 if (cmdline_row != i || ccline.overstrike)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3075 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3076 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3077 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3078 #ifdef FEAT_FKMAP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3079 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3080 * If we are in Farsi command mode, the character input must be in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3081 * Insert mode. So do not advance the cmdpos.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3082 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3083 if (!cmd_fkmap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3084 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3085 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3086 if (KeyTyped)
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3087 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3088 m = Columns * Rows;
534
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3089 if (m < 0) /* overflow, Columns or Rows at weird value */
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3090 m = MAXCOL;
c6296b0ad9ea updated for version 7.0151
vimboss
parents: 532
diff changeset
3091 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3092 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3093 m = MAXCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3094 for (i = 0; i < len; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3095 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3096 c = cmdline_charsize(ccline.cmdpos);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3097 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3098 /* count ">" for a double-wide char that doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3099 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3100 correct_cmdspos(ccline.cmdpos, c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3101 #endif
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3102 /* Stop cursor at the end of the screen, but do increment the
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3103 * insert position, so that entering a very long command
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3104 * works, even though you can't see it. */
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3105 if (ccline.cmdspos + c < m)
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
3106 ccline.cmdspos += c;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3107 #ifdef FEAT_MBYTE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3108 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3109 {
474
a5fcf36ef512 updated for version 7.0127
vimboss
parents: 435
diff changeset
3110 c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3111 if (c > len - i - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3112 c = len - i - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3113 ccline.cmdpos += c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3114 i += c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3115 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3116 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3117 ++ccline.cmdpos;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3118 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3120 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3121 if (redraw)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3122 msg_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3123 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3124 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3125
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3126 static struct cmdline_info prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3127 static int prev_ccline_used = FALSE;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3128
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3129 /*
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3130 * Save ccline, because obtaining the "=" register may execute "normal :cmd"
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3131 * and overwrite it. But get_cmdline_str() may need it, thus make it
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3132 * available globally in prev_ccline.
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 save_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 if (!prev_ccline_used)
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3138 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3139 vim_memset(&prev_ccline, 0, sizeof(struct cmdline_info));
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3140 prev_ccline_used = TRUE;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3141 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3142 *ccp = prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3143 prev_ccline = ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3144 ccline.cmdbuff = NULL;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3145 ccline.cmdprompt = NULL;
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
3146 ccline.xpc = NULL;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3147 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3148
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3149 /*
1214
a91a2e0c4108 updated for version 7.1b
vimboss
parents: 1039
diff changeset
3150 * Restore ccline after it has been saved with save_cmdline().
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3151 */
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3152 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3153 restore_cmdline(struct cmdline_info *ccp)
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3154 {
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3155 ccline = prev_ccline;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3156 prev_ccline = *ccp;
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3157 }
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3158
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3159 #if defined(FEAT_EVAL) || defined(PROTO)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3160 /*
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3161 * Save the command line into allocated memory. Returns a pointer to be
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3162 * passed to restore_cmdline_alloc() later.
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3163 * Returns NULL when failed.
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3164 */
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3165 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3166 save_cmdline_alloc(void)
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3167 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3168 struct cmdline_info *p;
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3169
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3170 p = (struct cmdline_info *)alloc((unsigned)sizeof(struct cmdline_info));
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3171 if (p != NULL)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3172 save_cmdline(p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3173 return (char_u *)p;
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3174 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3175
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3176 /*
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3177 * Restore the command line from the return value of save_cmdline_alloc().
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3178 */
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3179 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3180 restore_cmdline_alloc(char_u *p)
849
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3181 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3182 if (p != NULL)
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3183 {
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3184 restore_cmdline((struct cmdline_info *)p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3185 vim_free(p);
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3186 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3187 }
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3188 #endif
eac1cd7f1eff updated for version 7.0f04
vimboss
parents: 838
diff changeset
3189
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3190 /*
7336
4c5f53a60543 commit https://github.com/vim/vim/commit/6f62fed349bf829da2adb02619dc9acba13c8ab6
Christian Brabandt <cb@256bit.org>
parents: 7250
diff changeset
3191 * 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
3192 * Used by CTRL-R command in command-line mode.
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3193 * insert_reg() can't be used here, because special characters from the
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3194 * register contents will be interpreted as commands.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3195 *
7336
4c5f53a60543 commit https://github.com/vim/vim/commit/6f62fed349bf829da2adb02619dc9acba13c8ab6
Christian Brabandt <cb@256bit.org>
parents: 7250
diff changeset
3196 * Return FAIL for failure, OK otherwise.
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3197 */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3198 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3199 cmdline_paste(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3200 int regname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3201 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
3202 int remcr) /* remove trailing CR */
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3203 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3204 long i;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3205 char_u *arg;
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3206 char_u *p;
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3207 int allocated;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3208 struct cmdline_info save_ccline;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3209
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3210 /* check for valid regname; also accept special characters for CTRL-R in
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3211 * the command line */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3212 if (regname != Ctrl_F && regname != Ctrl_P && regname != Ctrl_W
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3213 && regname != Ctrl_A && !valid_yank_reg(regname, FALSE))
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3214 return FAIL;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3215
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3216 /* A register containing CTRL-R can cause an endless loop. Allow using
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3217 * CTRL-C to break the loop. */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3218 line_breakcheck();
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3219 if (got_int)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3220 return FAIL;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3221
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3222 #ifdef FEAT_CLIPBOARD
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3223 regname = may_get_selection(regname);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3224 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3225
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3226 /* Need to save and restore ccline. And set "textlock" to avoid nasty
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3227 * things like going to another buffer when evaluating an expression. */
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3228 save_cmdline(&save_ccline);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3229 ++textlock;
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3230 i = get_spec_reg(regname, &arg, &allocated, TRUE);
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
3231 --textlock;
95
a2081e6febb8 updated for version 7.0037
vimboss
parents: 75
diff changeset
3232 restore_cmdline(&save_ccline);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3233
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3234 if (i)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3235 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3236 /* Got the value of a special register in "arg". */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3237 if (arg == NULL)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3238 return FAIL;
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3239
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3240 /* When 'incsearch' is set and CTRL-R CTRL-W used: skip the duplicate
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3241 * part of the word. */
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3242 p = arg;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3243 if (p_is && regname == Ctrl_W)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3244 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3245 char_u *w;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3246 int len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3247
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3248 /* 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
3249 for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3250 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3251 #ifdef FEAT_MBYTE
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3252 if (has_mbyte)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3253 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3254 len = (*mb_head_off)(ccline.cmdbuff, w - 1) + 1;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3255 if (!vim_iswordc(mb_ptr2char(w - len)))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3256 break;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3257 w -= len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3258 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3259 else
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3260 #endif
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3261 {
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3262 if (!vim_iswordc(w[-1]))
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3263 break;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3264 --w;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3265 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3266 }
2937
0a650db02653 updated for version 7.3.241
Bram Moolenaar <bram@vim.org>
parents: 2931
diff changeset
3267 len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3268 if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3269 p += len;
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3270 }
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3271
aaaca5077255 updated for version 7.0226
vimboss
parents: 743
diff changeset
3272 cmdline_paste_str(p, literally);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3273 if (allocated)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3274 vim_free(arg);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3275 return OK;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3276 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3277
1015
64e2b75e1615 updated for version 7.0-141
vimboss
parents: 979
diff changeset
3278 return cmdline_paste_reg(regname, literally, remcr);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3279 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3280
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3281 /*
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3282 * Put a string on the command line.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3283 * When "literally" is TRUE, insert literally.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3284 * When "literally" is FALSE, insert as typed, but don't leave the command
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3285 * line.
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3286 */
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3287 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3288 cmdline_paste_str(char_u *s, int literally)
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3289 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3290 int c, cv;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3291
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3292 if (literally)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3293 put_on_cmdline(s, -1, TRUE);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3294 else
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3295 while (*s != NUL)
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3296 {
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3297 cv = *s;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3298 if (cv == Ctrl_V && s[1])
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3299 ++s;
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3300 #ifdef FEAT_MBYTE
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3301 if (has_mbyte)
1606
9dd62cb57ed5 updated for version 7.1-319
vimboss
parents: 1590
diff changeset
3302 c = mb_cptr2char_adv(&s);
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3303 else
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3304 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3305 c = *s++;
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
3306 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
3307 || c == CAR || c == NL || c == Ctrl_L
15
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3308 #ifdef UNIX
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3309 || c == intr_char
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3310 #endif
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3311 || (c == Ctrl_BSL && *s == Ctrl_N))
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3312 stuffcharReadbuff(Ctrl_V);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3313 stuffcharReadbuff(c);
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3314 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3315 }
631143ac4a01 updated for version 7.0007
vimboss
parents: 13
diff changeset
3316
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3317 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3318 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3319 * Delete characters on the command line, from "from" to the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3320 * position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3321 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3322 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3323 cmdline_del(int from)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3324 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3325 mch_memmove(ccline.cmdbuff + from, ccline.cmdbuff + ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3326 (size_t)(ccline.cmdlen - ccline.cmdpos + 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3327 ccline.cmdlen -= ccline.cmdpos - from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3328 ccline.cmdpos = from;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3329 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3330 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3332 /*
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
3333 * 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
3334 * 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
3335 * overwritten.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3336 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3337 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3338 redrawcmdline(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3339 {
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3340 redrawcmdline_ex(TRUE);
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3341 }
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3342
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3343 void
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3344 redrawcmdline_ex(int do_compute_cmdrow)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3345 {
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3346 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3347 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3348 need_wait_return = FALSE;
11416
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3349 if (do_compute_cmdrow)
32aed0993813 patch 8.0.0592: if a job writes to a buffer screen is not updated
Christian Brabandt <cb@256bit.org>
parents: 11321
diff changeset
3350 compute_cmdrow();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3351 redrawcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3352 cursorcmd();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3353 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3355 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3356 redrawcmdprompt(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3357 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3358 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3359
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3360 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3361 return;
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
3362 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3363 msg_putchar(ccline.cmdfirstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3364 if (ccline.cmdprompt != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3366 msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3367 ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3368 /* do the reverse of set_cmdspos() */
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
3369 if (ccline.cmdfirstc != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3370 --ccline.cmdindent;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3371 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3372 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3373 for (i = ccline.cmdindent; i > 0; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3374 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3375 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3376
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3377 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3378 * Redraw what is currently on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3379 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3380 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3381 redrawcmd(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3382 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3383 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3384 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3385
683
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3386 /* when 'incsearch' is set there may be no command line while redrawing */
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3387 if (ccline.cmdbuff == NULL)
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3388 {
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3389 windgoto(cmdline_row, 0);
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3390 msg_clr_eos();
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3391 return;
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3392 }
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
3393
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3394 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3395 redrawcmdprompt();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3397 /* Don't use more prompt, truncate the cmdline if it doesn't fit. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3398 msg_no_more = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3399 draw_cmdline(0, ccline.cmdlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3400 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3401 msg_no_more = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3402
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3403 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3404
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3405 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3406 * An emsg() before may have set msg_scroll. This is used in normal mode,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3407 * in cmdline mode we can reset them now.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3408 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3409 msg_scroll = FALSE; /* next message overwrites cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3410
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3411 /* Typing ':' at the more prompt may set skip_redraw. We don't want this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3412 * in cmdline mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3413 skip_redraw = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3414 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3415
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3416 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3417 compute_cmdrow(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3418 {
540
2df7f3a5eb96 updated for version 7.0153
vimboss
parents: 534
diff changeset
3419 if (exmode_active || msg_scrolled != 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3420 cmdline_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3421 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3422 cmdline_row = W_WINROW(lastwin) + lastwin->w_height
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3423 + W_STATUS_HEIGHT(lastwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3424 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3425
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3426 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3427 cursorcmd(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3428 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3429 if (cmd_silent)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3430 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3431
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3432 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3433 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3434 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3435 msg_row = cmdline_row + (ccline.cmdspos / (int)(Columns - 1));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3436 msg_col = (int)Columns - (ccline.cmdspos % (int)(Columns - 1)) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3437 if (msg_row <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3438 msg_row = Rows - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3439 }
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 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3443 msg_row = cmdline_row + (ccline.cmdspos / (int)Columns);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3444 msg_col = ccline.cmdspos % (int)Columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3445 if (msg_row >= Rows)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3446 msg_row = Rows - 1;
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 windgoto(msg_row, msg_col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3450 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3451 redrawcmd_preedit();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3452 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3453 #ifdef MCH_CURSOR_SHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3454 mch_update_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3455 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3456 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3457
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3458 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3459 gotocmdline(int clr)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3460 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3461 msg_start();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3462 #ifdef FEAT_RIGHTLEFT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3463 if (cmdmsg_rl)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3464 msg_col = Columns - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3465 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3466 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3467 msg_col = 0; /* always start in column 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3468 if (clr) /* clear the bottom line(s) */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3469 msg_clr_eos(); /* will reset clear_cmdline */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3470 windgoto(cmdline_row, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3471 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3472
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3473 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3474 * Check the word in front of the cursor for an abbreviation.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3475 * Called when the non-id character "c" has been entered.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3476 * When an abbreviation is recognized it is removed from the text with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3477 * backspaces and the replacement string is inserted, followed by "c".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3478 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3479 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3480 ccheck_abbr(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3481 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3482 if (p_paste || no_abbr) /* no abbreviations or in paste mode */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3483 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3484
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3485 return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3486 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3487
3164
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3488 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3489 static int
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3490 #ifdef __BORLANDC__
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3491 _RTLENTRYF
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3492 #endif
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3493 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
3494 {
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3495 char_u *p1 = *(char_u **)s1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3496 char_u *p2 = *(char_u **)s2;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3497
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3498 if (*p1 != '<' && *p2 == '<') return -1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3499 if (*p1 == '<' && *p2 != '<') return 1;
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3500 return STRCMP(p1, p2);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3501 }
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3502 #endif
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
3503
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3504 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3505 * Return FAIL if this is not an appropriate context in which to do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3506 * completion of anything, return OK if it is (even if there are no matches).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3507 * For the caller, this means that the character is just passed through like a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3508 * normal character (instead of being expanded). This allows :s/^I^D etc.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3509 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3510 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3511 nextwild(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3512 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3513 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3514 int options, /* extra options for ExpandOne() */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3515 int escape) /* if TRUE, escape the returned matches */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3516 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3517 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3518 char_u *p1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3519 char_u *p2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3520 int difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3521 int v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3523 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3524 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3525 set_expand_context(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3526 cmd_showtail = expand_showtail(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3529 if (xp->xp_context == EXPAND_UNSUCCESSFUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3530 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3531 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3532 return OK; /* Something illegal on command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3533 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3534 if (xp->xp_context == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3536 /* Caller can use the character as a normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3537 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3538 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3539
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3540 MSG_PUTS("..."); /* show that we are busy */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3541 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3542
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3543 i = (int)(xp->xp_pattern - ccline.cmdbuff);
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3544 xp->xp_pattern_len = ccline.cmdpos - i;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3545
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3546 if (type == WILD_NEXT || type == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3547 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3548 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3549 * Get next/previous match for a previous expanded pattern.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3550 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3551 p2 = ExpandOne(xp, NULL, NULL, 0, type);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3552 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3553 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3554 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3555 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3556 * Translate string into pattern and expand it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3557 */
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3558 if ((p1 = addstar(xp->xp_pattern, xp->xp_pattern_len,
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3559 xp->xp_context)) == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3560 p2 = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3561 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3562 {
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3563 int use_options = options |
3961
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3564 WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT;
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3565 if (escape)
b1536bbbda10 updated for version 7.3.736
Bram Moolenaar <bram@vim.org>
parents: 3859
diff changeset
3566 use_options |= WILD_ESCAPE;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3567
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3568 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
3569 use_options += WILD_ICASE;
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3570 p2 = ExpandOne(xp, p1,
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3571 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
3572 use_options, type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3573 vim_free(p1);
2047
85da03763130 updated for version 7.2.333
Bram Moolenaar <bram@zimbu.org>
parents: 2016
diff changeset
3574 /* longest match: make sure it is not shorter, happens with :help */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3575 if (p2 != NULL && type == WILD_LONGEST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3576 {
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3577 for (j = 0; j < xp->xp_pattern_len; ++j)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3578 if (ccline.cmdbuff[i + j] == '*'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3579 || ccline.cmdbuff[i + j] == '?')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3580 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3581 if ((int)STRLEN(p2) < j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3582 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3583 vim_free(p2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3584 p2 = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3585 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3586 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3587 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3588 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3589
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3590 if (p2 != NULL && !got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3591 {
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3592 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
3593 if (ccline.cmdlen + difflen + 4 > ccline.cmdbufflen)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3594 {
2557
029ace8dff7d Now really fix using expressions in the command line (hopefully).
Bram Moolenaar <bram@vim.org>
parents: 2556
diff changeset
3595 v = realloc_cmdbuff(ccline.cmdlen + difflen + 4);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3596 xp->xp_pattern = ccline.cmdbuff + i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3597 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3598 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3599 v = OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3600 if (v == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3601 {
323
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3602 mch_memmove(&ccline.cmdbuff[ccline.cmdpos + difflen],
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3603 &ccline.cmdbuff[ccline.cmdpos],
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3604 (size_t)(ccline.cmdlen - ccline.cmdpos + 1));
03b3684919e3 updated for version 7.0084
vimboss
parents: 301
diff changeset
3605 mch_memmove(&ccline.cmdbuff[i], p2, STRLEN(p2));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3606 ccline.cmdlen += difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3607 ccline.cmdpos += difflen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3608 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3609 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3610 vim_free(p2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3611
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3612 redrawcmd();
33
f6033dcbaf31 updated for version 7.0020
vimboss
parents: 21
diff changeset
3613 cursorcmd();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3614
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3615 /* When expanding a ":map" command and no matches are found, assume that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3616 * the key is supposed to be inserted literally */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3617 if (xp->xp_context == EXPAND_MAPPINGS && p2 == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3618 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3619
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3620 if (xp->xp_numfiles <= 0 && p2 == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3621 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3622 else if (xp->xp_numfiles == 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3623 /* free expanded pattern */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3624 (void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3626 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3627 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3628
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3629 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3630 * Do wildcard expansion on the string 'str'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3631 * 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
3632 * Return a pointer to allocated memory containing the new string.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3633 * Return NULL for failure.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3634 *
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3635 * "orig" is the originally expanded string, copied to allocated memory. It
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3636 * 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
3637 * WILD_PREV "orig" should be NULL.
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3638 *
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 835
diff changeset
3639 * 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
3640 * is WILD_EXPAND_FREE or WILD_ALL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3641 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3642 * mode = WILD_FREE: just free previously expanded matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3643 * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3644 * mode = WILD_EXPAND_KEEP: normal expansion, keep matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3645 * mode = WILD_NEXT: use next match in multiple match, wrap to first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3646 * mode = WILD_PREV: use previous match in multiple match, wrap to first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3647 * mode = WILD_ALL: return all matches concatenated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3648 * mode = WILD_LONGEST: return longest matched part
3398
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3649 * mode = WILD_ALL_KEEP: get all matches, keep matches
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3650 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3651 * options = WILD_LIST_NOTFOUND: list entries without a match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3652 * options = WILD_HOME_REPLACE: do home_replace() for buffer names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3653 * options = WILD_USE_NL: Use '\n' for WILD_ALL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3654 * options = WILD_NO_BEEP: Don't beep for multiple matches
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3655 * options = WILD_ADD_SLASH: add a slash after directory names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3656 * options = WILD_KEEP_ALL: don't remove 'wildignore' entries
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3657 * options = WILD_SILENT: don't print warning messages
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3658 * 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
3659 * options = WILD_ICASE: ignore case for files
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3660 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3661 * The variables xp->xp_context and xp->xp_backslash must have been set!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3662 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3663 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3664 ExpandOne(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3665 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3666 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3667 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
3668 int options,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3669 int mode)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3670 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3671 char_u *ss = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3672 static int findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3673 static char_u *orig_save = NULL; /* kept value of orig */
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3674 int orig_saved = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3675 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3676 long_u len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3677 int non_suf_match; /* number without matching suffix */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3679 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3680 * first handle the case of using an old match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3681 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3682 if (mode == WILD_NEXT || mode == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3683 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3684 if (xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3685 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3686 if (mode == WILD_PREV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3687 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3688 if (findex == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3689 findex = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3690 --findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3691 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3692 else /* mode == WILD_NEXT */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3693 ++findex;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3695 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3696 * When wrapping around, return the original string, set findex to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3697 * -1.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3698 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3699 if (findex < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3700 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3701 if (orig_save == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3702 findex = xp->xp_numfiles - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3703 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3704 findex = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3706 if (findex >= xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3707 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3708 if (orig_save == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3709 findex = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3710 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3711 findex = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3712 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3713 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3714 if (p_wmnu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3715 win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3716 findex, cmd_showtail);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3717 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3718 if (findex == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3719 return vim_strsave(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3720 return vim_strsave(xp->xp_files[findex]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3721 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3722 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3723 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3724 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3725
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3726 /* free old names */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3727 if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3728 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3729 FreeWild(xp->xp_numfiles, xp->xp_files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3730 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3731 vim_free(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3732 orig_save = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3733 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3734 findex = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3735
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3736 if (mode == WILD_FREE) /* only release file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3737 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3738
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3739 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3740 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3741 vim_free(orig_save);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3742 orig_save = orig;
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3743 orig_saved = TRUE;
7
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 * Do the expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3747 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3748 if (ExpandFromContext(xp, str, &xp->xp_numfiles, &xp->xp_files,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3749 options) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3750 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3751 #ifdef FNAME_ILLEGAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3752 /* Illegal file name has been silently skipped. But when there
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3753 * are wildcards, the real problem is that there was no match,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3754 * causing the pattern to be added, which has illegal characters.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3755 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3756 if (!(options & WILD_SILENT) && (options & WILD_LIST_NOTFOUND))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3757 EMSG2(_(e_nomatch2), str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3758 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3760 else if (xp->xp_numfiles == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3761 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3762 if (!(options & WILD_SILENT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3763 EMSG2(_(e_nomatch2), str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3765 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3766 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3767 /* Escape the matches for use on the command line. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3768 ExpandEscape(xp, str, xp->xp_numfiles, xp->xp_files, options);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3769
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3770 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3771 * Check for matching suffixes in file names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3772 */
3398
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3773 if (mode != WILD_ALL && mode != WILD_ALL_KEEP
d1096a4e96bd updated for version 7.3.465
Bram Moolenaar <bram@vim.org>
parents: 3374
diff changeset
3774 && mode != WILD_LONGEST)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3775 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3776 if (xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3777 non_suf_match = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3778 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3779 non_suf_match = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3780 if ((xp->xp_context == EXPAND_FILES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3781 || xp->xp_context == EXPAND_DIRECTORIES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3782 && xp->xp_numfiles > 1)
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 * More than one match; check suffix.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3786 * The files will have been sorted on matching suffix in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3787 * expand_wildcards, only need to check the first two.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3788 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3789 non_suf_match = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3790 for (i = 0; i < 2; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3791 if (match_suffix(xp->xp_files[i]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3792 ++non_suf_match;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3794 if (non_suf_match != 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3795 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3796 /* Can we ever get here unless it's while expanding
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3797 * interactively? If not, we can get rid of this all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3798 * together. Don't really want to wait for this message
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3799 * (and possibly have to hit return to continue!).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3800 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3801 if (!(options & WILD_SILENT))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3802 EMSG(_(e_toomany));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3803 else if (!(options & WILD_NO_BEEP))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3804 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3805 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3806 if (!(non_suf_match != 1 && mode == WILD_EXPAND_FREE))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3807 ss = vim_strsave(xp->xp_files[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3808 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3809 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3810 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3811
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3812 /* Find longest common part */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3813 if (mode == WILD_LONGEST && xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3814 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3815 int mb_len = 1;
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3816 int c0, ci;
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3817
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3818 for (len = 0; xp->xp_files[0][len]; len += mb_len)
7
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 #ifdef FEAT_MBYTE
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3821 if (has_mbyte)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3822 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3823 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
3824 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
3825 }
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3826 else
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3827 #endif
7250
99476f1aaacd commit https://github.com/vim/vim/commit/e4eda3bc7157932b0bf380fd3fdc1ba8f4438b60
Christian Brabandt <cb@256bit.org>
parents: 7235
diff changeset
3828 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
3829 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
3830 {
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3831 #ifdef FEAT_MBYTE
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3832 if (has_mbyte)
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3833 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
3834 else
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3835 #endif
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3836 ci = xp->xp_files[i][len];
4242
edd0bc1f26bd updated for version 7.3.872
Bram Moolenaar <bram@vim.org>
parents: 3961
diff changeset
3837 if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3838 || xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
3839 || xp->xp_context == EXPAND_SHELLCMD
4242
edd0bc1f26bd updated for version 7.3.872
Bram Moolenaar <bram@vim.org>
parents: 3961
diff changeset
3840 || xp->xp_context == EXPAND_BUFFERS))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3841 {
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3842 if (MB_TOLOWER(c0) != MB_TOLOWER(ci))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3843 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3844 }
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3845 else if (c0 != ci)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3846 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3847 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3848 if (i < xp->xp_numfiles)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3849 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3850 if (!(options & WILD_NO_BEEP))
6949
1e621b31948b patch 7.4.793
Bram Moolenaar <bram@vim.org>
parents: 6929
diff changeset
3851 vim_beep(BO_WILD);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3852 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3853 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3854 }
7235
e45271250496 commit https://github.com/vim/vim/commit/4f8fa1633cdfbd09a41160c8480fe67c198067e9
Christian Brabandt <cb@256bit.org>
parents: 7009
diff changeset
3855
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3856 ss = alloc((unsigned)len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3857 if (ss)
419
f713fc55bf7b updated for version 7.0109
vimboss
parents: 410
diff changeset
3858 vim_strncpy(ss, xp->xp_files[0], (size_t)len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3859 findex = -1; /* next p_wc gets first one */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3860 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3861
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3862 /* Concatenate all matching names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3863 if (mode == WILD_ALL && xp->xp_numfiles > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3864 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3865 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3866 for (i = 0; i < xp->xp_numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3867 len += (long_u)STRLEN(xp->xp_files[i]) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3868 ss = lalloc(len, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3869 if (ss != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3870 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3871 *ss = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3872 for (i = 0; i < xp->xp_numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3873 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3874 STRCAT(ss, xp->xp_files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3875 if (i != xp->xp_numfiles - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3876 STRCAT(ss, (options & WILD_USE_NL) ? "\n" : " ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3877 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3878 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3879 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3880
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3881 if (mode == WILD_EXPAND_FREE || mode == WILD_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3882 ExpandCleanup(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3883
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3884 /* Free "orig" if it wasn't stored in "orig_save". */
1432
bca50c9e1374 updated for version 7.1-147
vimboss
parents: 1412
diff changeset
3885 if (!orig_saved)
1412
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3886 vim_free(orig);
45ba31f9ba0c updated for version 7.1-127
vimboss
parents: 1410
diff changeset
3887
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3888 return ss;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3889 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3890
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3891 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3892 * Prepare an expand structure for use.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3893 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3894 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3895 ExpandInit(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3896 {
1718
a27c581d2618 updated for version 7.2-016
vimboss
parents: 1700
diff changeset
3897 xp->xp_pattern = NULL;
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
3898 xp->xp_pattern_len = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3899 xp->xp_backslash = XP_BS_NONE;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3900 #ifndef BACKSLASH_IN_FILENAME
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3901 xp->xp_shell = FALSE;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3902 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3903 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3904 xp->xp_files = NULL;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3905 #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3906 xp->xp_arg = NULL;
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
3907 #endif
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
3908 xp->xp_line = NULL;
7
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3912 * Cleanup an expand structure after use.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3913 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3914 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3915 ExpandCleanup(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3916 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3917 if (xp->xp_numfiles >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3918 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3919 FreeWild(xp->xp_numfiles, xp->xp_files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3920 xp->xp_numfiles = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3921 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3924 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3925 ExpandEscape(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3926 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3927 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3928 int numfiles,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3929 char_u **files,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
3930 int options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3931 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3932 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3933 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3934
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3935 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3936 * May change home directory back to "~"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3937 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3938 if (options & WILD_HOME_REPLACE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3939 tilde_replace(str, numfiles, files);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3940
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3941 if (options & WILD_ESCAPE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3942 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3943 if (xp->xp_context == EXPAND_FILES
2778
e92a4b9b4484 updated for version 7.3.165
Bram Moolenaar <bram@vim.org>
parents: 2652
diff changeset
3944 || xp->xp_context == EXPAND_FILES_IN_PATH
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
3945 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3946 || xp->xp_context == EXPAND_BUFFERS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3947 || xp->xp_context == EXPAND_DIRECTORIES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3948 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3949 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3950 * Insert a backslash into a file name before a space, \, %, #
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3951 * and wildmatch characters, except '~'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3952 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3953 for (i = 0; i < numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3955 /* for ":set path=" we need to escape spaces twice */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3956 if (xp->xp_backslash == XP_BS_THREE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3957 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3958 p = vim_strsave_escaped(files[i], (char_u *)" ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3959 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3960 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3961 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3962 files[i] = p;
719
82ef0c58b012 updated for version 7.0219
vimboss
parents: 716
diff changeset
3963 #if defined(BACKSLASH_IN_FILENAME)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3964 p = vim_strsave_escaped(files[i], (char_u *)" ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3965 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3966 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3967 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3968 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3969 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3970 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3971 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3972 }
1589
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3973 #ifdef BACKSLASH_IN_FILENAME
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3974 p = vim_strsave_fnameescape(files[i], FALSE);
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3975 #else
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
3976 p = vim_strsave_fnameescape(files[i], xp->xp_shell);
1589
3a6ba07b3b9f updated for version 7.1-302
vimboss
parents: 1586
diff changeset
3977 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3978 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3979 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3980 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3981 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3982 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3983
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3984 /* If 'str' starts with "\~", replace "~" at start of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3985 * files[i] with "\~". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3986 if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~')
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3987 escape_fname(&files[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3988 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3989 xp->xp_backslash = XP_BS_NONE;
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3990
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3991 /* If the first file starts with a '+' escape it. Otherwise it
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3992 * could be seen as "+cmd". */
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3993 if (*files[0] == '+')
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
3994 escape_fname(&files[0]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3995 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3996 else if (xp->xp_context == EXPAND_TAGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3997 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3998 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3999 * Insert a backslash before characters in a tag name that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4000 * would terminate the ":tag" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4001 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4002 for (i = 0; i < numfiles; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4003 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4004 p = vim_strsave_escaped(files[i], (char_u *)"\\|\"");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4005 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4006 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4007 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4008 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4009 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4010 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4011 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4013 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4014
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4015 /*
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4016 * 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
4017 * 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
4018 * Returns the result in allocated memory.
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4019 */
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4020 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4021 vim_strsave_fnameescape(char_u *fname, int shell)
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4022 {
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4023 char_u *p;
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4024 #ifdef BACKSLASH_IN_FILENAME
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4025 char_u buf[20];
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4026 int j = 0;
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4027
5481
31217cc48e7d updated for version 7.4.090
Bram Moolenaar <bram@vim.org>
parents: 5467
diff changeset
4028 /* Don't escape '[', '{' and '!' if they are in 'isfname'. */
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4029 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
4030 if ((*p != '[' && *p != '{' && *p != '!') || !vim_isfilec(*p))
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4031 buf[j++] = *p;
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4032 buf[j] = NUL;
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4033 p = vim_strsave_escaped(fname, buf);
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4034 #else
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4035 p = vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4036 if (shell && csh_like_shell() && p != NULL)
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4037 {
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4038 char_u *s;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4039
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4040 /* For csh and similar shells need to put two backslashes before '!'.
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4041 * One is taken by Vim, one by the shell. */
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4042 s = vim_strsave_escaped(p, (char_u *)"!");
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4043 vim_free(p);
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4044 p = s;
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4045 }
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4046 #endif
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4047
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4048 /* '>' 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
4049 * ":write". "cd -" has a special meaning. */
2445
04dae202d316 Fixes for coverity warnings.
Bram Moolenaar <bram@vim.org>
parents: 2433
diff changeset
4050 if (p != NULL && (*p == '>' || *p == '+' || (*p == '-' && p[1] == NUL)))
1700
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4051 escape_fname(&p);
9e1cefec84dd updated for version 7.2c-002
vimboss
parents: 1696
diff changeset
4052
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
4053 return p;
1586
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4054 }
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4055
fe7db192c7cc updated for version 7.1-299
vimboss
parents: 1524
diff changeset
4056 /*
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4057 * 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
4058 */
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4059 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4060 escape_fname(char_u **pp)
435
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4061 {
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4062 char_u *p;
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4063
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4064 p = alloc((unsigned)(STRLEN(*pp) + 2));
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4065 if (p != NULL)
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4066 {
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4067 p[0] = '\\';
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4068 STRCPY(p + 1, *pp);
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4069 vim_free(*pp);
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4070 *pp = p;
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4071 }
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4072 }
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4073
73f016dbb279 updated for version 7.0112
vimboss
parents: 419
diff changeset
4074 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4075 * For each file name in files[num_files]:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4076 * If 'orig_pat' starts with "~/", replace the home directory with "~".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4077 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4078 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4079 tilde_replace(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4080 char_u *orig_pat,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4081 int num_files,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4082 char_u **files)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4083 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4084 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4085 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4086
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4087 if (orig_pat[0] == '~' && vim_ispathsep(orig_pat[1]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4088 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4089 for (i = 0; i < num_files; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4090 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4091 p = home_replace_save(NULL, files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4092 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4093 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4094 vim_free(files[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4095 files[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4096 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4097 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4098 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4099 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4100
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4101 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4102 * Show all matches for completion on the command line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4103 * Returns EXPAND_NOTHING when the character that triggered expansion should
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4104 * be inserted like a normal character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4105 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4106 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4107 showmatches(expand_T *xp, int wildmenu UNUSED)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4108 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4109 #define L_SHOWFILE(m) (showtail ? sm_gettail(files_found[m]) : files_found[m])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4110 int num_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4111 char_u **files_found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4112 int i, j, k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4113 int maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4114 int lines;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4115 int columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4116 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4117 int lastlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4118 int attr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4119 int showtail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4121 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4122 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4123 set_expand_context(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4124 i = expand_cmdline(xp, ccline.cmdbuff, ccline.cmdpos,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4125 &num_files, &files_found);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4126 showtail = expand_showtail(xp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4127 if (i != EXPAND_OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4128 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4130 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4131 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4132 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4133 num_files = xp->xp_numfiles;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4134 files_found = xp->xp_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4135 showtail = cmd_showtail;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4136 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4137
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4138 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4139 if (!wildmenu)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4140 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4141 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4142 msg_didany = FALSE; /* lines_left will be set */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4143 msg_start(); /* prepare for paging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4144 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4145 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4146 cmdline_row = msg_row;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4147 msg_didany = FALSE; /* lines_left will be set again */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4148 msg_start(); /* prepare for paging */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4149 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4150 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4151 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4153 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4154 got_int = FALSE; /* only int. the completion, not the cmd line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4155 #ifdef FEAT_WILDMENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4156 else if (wildmenu)
11285
0b4adcfb7b25 patch 8.0.0528: highlight wrong text when 'wim' includes "longest"
Christian Brabandt <cb@256bit.org>
parents: 11163
diff changeset
4157 win_redr_status_matches(xp, num_files, files_found, -1, showtail);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4158 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4159 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4160 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4161 /* find the length of the longest file name */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4162 maxlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4163 for (i = 0; i < num_files; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4164 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4165 if (!showtail && (xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4166 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4167 || xp->xp_context == EXPAND_BUFFERS))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4168 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4169 home_replace(NULL, files_found[i], NameBuff, MAXPATHL, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4170 j = vim_strsize(NameBuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4171 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4172 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4173 j = vim_strsize(L_SHOWFILE(i));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4174 if (j > maxlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4175 maxlen = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4176 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4178 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4179 lines = num_files;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4180 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4181 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4182 /* compute the number of columns and lines for the listing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4183 maxlen += 2; /* two spaces between file names */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4184 columns = ((int)Columns + 2) / maxlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4185 if (columns < 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4186 columns = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4187 lines = (num_files + columns - 1) / columns;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4188 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4189
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4190 attr = HL_ATTR(HLF_D); /* find out highlighting for directories */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4191
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4192 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4193 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4194 MSG_PUTS_ATTR(_("tagname"), HL_ATTR(HLF_T));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4195 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4196 msg_advance(maxlen - 3);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4197 MSG_PUTS_ATTR(_(" kind file\n"), HL_ATTR(HLF_T));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4198 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4199
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4200 /* list the files line by line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4201 for (i = 0; i < lines; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4202 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4203 lastlen = 999;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4204 for (k = i; k < num_files; k += lines)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4205 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4206 if (xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4207 {
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4208 msg_outtrans_attr(files_found[k], HL_ATTR(HLF_D));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4209 p = files_found[k] + STRLEN(files_found[k]) + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4210 msg_advance(maxlen + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4211 msg_puts(p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4212 msg_advance(maxlen + 3);
11158
501f46f7644c patch 8.0.0466: still macros that should be all-caps
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
4213 msg_puts_long_attr(p + 2, HL_ATTR(HLF_D));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4214 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4215 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4216 for (j = maxlen - lastlen; --j >= 0; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4217 msg_putchar(' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4218 if (xp->xp_context == EXPAND_FILES
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4219 || xp->xp_context == EXPAND_SHELLCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4220 || xp->xp_context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4221 {
2118
63bf37c1e7a2 updated for version 7.2.401
Bram Moolenaar <bram@zimbu.org>
parents: 2099
diff changeset
4222 /* highlight directories */
2128
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4223 if (xp->xp_numfiles != -1)
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4224 {
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4225 char_u *halved_slash;
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4226 char_u *exp_path;
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4227
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4228 /* Expansion was done before and special characters
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4229 * were escaped, need to halve backslashes. Also
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4230 * $HOME has been replaced with ~/. */
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4231 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
4232 halved_slash = backslash_halve_save(
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4233 exp_path != NULL ? exp_path : files_found[k]);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4234 j = mch_isdir(halved_slash != NULL ? halved_slash
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4235 : files_found[k]);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4236 vim_free(exp_path);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4237 vim_free(halved_slash);
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4238 }
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4239 else
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4240 /* Expansion was done here, file names are literal. */
a16af0072ea8 updated for version 7.2.410
Bram Moolenaar <bram@zimbu.org>
parents: 2118
diff changeset
4241 j = mch_isdir(files_found[k]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4242 if (showtail)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4243 p = L_SHOWFILE(k);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4244 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4245 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4246 home_replace(NULL, files_found[k], NameBuff, MAXPATHL,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4247 TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4248 p = NameBuff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4249 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4250 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4251 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4252 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4253 j = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4254 p = L_SHOWFILE(k);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4255 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4256 lastlen = msg_outtrans_attr(p, j ? attr : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4257 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4258 if (msg_col > 0) /* when not wrapped around */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4260 msg_clr_eos();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4261 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4262 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4263 out_flush(); /* show one line at a time */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4264 if (got_int)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4265 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4266 got_int = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4267 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4268 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4269 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4271 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4272 * we redraw the command below the lines that we have just listed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4273 * This is a bit tricky, but it saves a lot of screen updating.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4274 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4275 cmdline_row = msg_row; /* will put it back later */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4276 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4277
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4278 if (xp->xp_numfiles == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4279 FreeWild(num_files, files_found);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4280
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4281 return EXPAND_OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4283
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4284 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4285 * Private gettail for showmatches() (and win_redr_status_matches()):
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4286 * Find tail of file name path, but ignore trailing "/".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4287 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4288 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4289 sm_gettail(char_u *s)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4290 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4291 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4292 char_u *t = s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4293 int had_sep = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4294
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4295 for (p = s; *p != NUL; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4296 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4297 if (vim_ispathsep(*p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4298 #ifdef BACKSLASH_IN_FILENAME
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4299 && !rem_backslash(p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4300 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4301 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4302 had_sep = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4303 else if (had_sep)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4304 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4305 t = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4306 had_sep = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4307 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
4308 MB_PTR_ADV(p);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4310 return t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4313 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4314 * Return TRUE if we only need to show the tail of completion matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4315 * 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
4316 * returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4317 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4318 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4319 expand_showtail(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4320 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4321 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4322 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4323
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4324 /* When not completing file names a "/" may mean something different. */
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4325 if (xp->xp_context != EXPAND_FILES
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4326 && xp->xp_context != EXPAND_SHELLCMD
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4327 && xp->xp_context != EXPAND_DIRECTORIES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4328 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4329
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4330 end = gettail(xp->xp_pattern);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4331 if (end == xp->xp_pattern) /* there is no path separator */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4332 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4333
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4334 for (s = xp->xp_pattern; s < end; s++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4335 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4336 /* Skip escaped wildcards. Only when the backslash is not a path
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4337 * separator, on DOS the '*' "path\*\file" must not be skipped. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4338 if (rem_backslash(s))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4339 ++s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4340 else if (vim_strchr((char_u *)"*?[", *s) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4341 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4342 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4343 return TRUE;
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 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4347 * Prepare a string for expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4348 * 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
4349 * Copy "fname[len]" into allocated memory and add a '*' at the end.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4350 * When expanding other names: The string will be used with regcomp(). Copy
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4351 * the name into allocated memory and prepend "^".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4352 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4353 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4354 addstar(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4355 char_u *fname,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4356 int len,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4357 int context) /* EXPAND_FILES etc. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4358 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4359 char_u *retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4360 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4361 int new_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4362 char_u *tail;
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4363 int ends_in_star;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4364
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4365 if (context != EXPAND_FILES
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4366 && context != EXPAND_FILES_IN_PATH
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4367 && context != EXPAND_SHELLCMD
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4368 && context != EXPAND_DIRECTORIES)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4369 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4370 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4371 * Matching will be done internally (on something other than files).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4372 * So we convert the file-matching-type wildcards into our kind for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4373 * use with vim_regcomp(). First work out how long it will be:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4374 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4375
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4376 /* For help tags the translation is done in find_help_tags().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4377 * For a tag pattern starting with "/" no translation is needed. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4378 if (context == EXPAND_HELP
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4379 || context == EXPAND_COLORS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4380 || context == EXPAND_COMPILER
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
4381 || context == EXPAND_OWNSYNTAX
2268
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2243
diff changeset
4382 || context == EXPAND_FILETYPE
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4383 || context == EXPAND_PACKADD
10694
fa6c4825a1c4 patch 8.0.0237: when 'wildoptions' is "tagfile" completion may not work
Christian Brabandt <cb@256bit.org>
parents: 10676
diff changeset
4384 || ((context == EXPAND_TAGS_LISTFILES
fa6c4825a1c4 patch 8.0.0237: when 'wildoptions' is "tagfile" completion may not work
Christian Brabandt <cb@256bit.org>
parents: 10676
diff changeset
4385 || context == EXPAND_TAGS)
fa6c4825a1c4 patch 8.0.0237: when 'wildoptions' is "tagfile" completion may not work
Christian Brabandt <cb@256bit.org>
parents: 10676
diff changeset
4386 && fname[0] == '/'))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4387 retval = vim_strnsave(fname, len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4388 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4389 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4390 new_len = len + 2; /* +2 for '^' at start, NUL at end */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4391 for (i = 0; i < len; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4392 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4393 if (fname[i] == '*' || fname[i] == '~')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4394 new_len++; /* '*' needs to be replaced by ".*"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4395 '~' needs to be replaced by "\~" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4396
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4397 /* Buffer names are like file names. "." should be literal */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4398 if (context == EXPAND_BUFFERS && fname[i] == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4399 new_len++; /* "." becomes "\." */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4400
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4401 /* Custom expansion takes care of special things, match
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4402 * backslashes literally (perhaps also for other types?) */
634
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
4403 if ((context == EXPAND_USER_DEFINED
1c586ee8dd45 updated for version 7.0183
vimboss
parents: 632
diff changeset
4404 || context == EXPAND_USER_LIST) && fname[i] == '\\')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4405 new_len++; /* '\' becomes "\\" */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4406 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4407 retval = alloc(new_len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4408 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4409 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4410 retval[0] = '^';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4411 j = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4412 for (i = 0; i < len; i++, j++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4413 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4414 /* Skip backslash. But why? At least keep it for custom
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4415 * expansion. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4416 if (context != EXPAND_USER_DEFINED
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4417 && context != EXPAND_USER_LIST
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4418 && fname[i] == '\\'
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4419 && ++i == len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4420 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4421
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4422 switch (fname[i])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4423 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4424 case '*': retval[j++] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4425 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4426 case '~': retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4427 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4428 case '?': retval[j] = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4429 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4430 case '.': if (context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4431 retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4432 break;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4433 case '\\': if (context == EXPAND_USER_DEFINED
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4434 || context == EXPAND_USER_LIST)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4435 retval[j++] = '\\';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4436 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4437 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4438 retval[j] = fname[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4439 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4440 retval[j] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4441 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4443 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4444 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4445 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4446 retval = alloc(len + 4);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4447 if (retval != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4448 {
419
f713fc55bf7b updated for version 7.0109
vimboss
parents: 410
diff changeset
4449 vim_strncpy(retval, fname, len);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4450
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4451 /*
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents: 828
diff changeset
4452 * Don't add a star to *, ~, ~user, $var or `cmd`.
f24a95dae8ee updated for version 7.0d05
vimboss
parents: 828
diff changeset
4453 * * would become **, which walks the whole tree.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4454 * ~ would be at the start of the file name, but not the tail.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4455 * $ could be anywhere in the tail.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4456 * ` could be anywhere in the file name.
1484
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4457 * When the name ends in '$' don't add a star, remove the '$'.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4458 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4459 tail = gettail(retval);
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4460 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
4461 #ifndef BACKSLASH_IN_FILENAME
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4462 for (i = len - 2; i >= 0; --i)
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4463 {
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4464 if (retval[i] != '\\')
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4465 break;
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4466 ends_in_star = !ends_in_star;
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4467 }
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4468 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4469 if ((*retval != '~' || tail != retval)
2243
03a5f2897db3 Fix completion of file names with '%' and '*'.
Bram Moolenaar <bram@vim.org>
parents: 2128
diff changeset
4470 && !ends_in_star
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4471 && vim_strchr(tail, '$') == NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4472 && vim_strchr(retval, '`') == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4473 retval[len++] = '*';
1484
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4474 else if (len > 0 && retval[len - 1] == '$')
fd68db1a72b5 updated for version 7.1-199
vimboss
parents: 1472
diff changeset
4475 --len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4476 retval[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4477 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4478 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4479 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4480 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4481
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4482 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4483 * 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
4484 * Completion can then be done based on that context.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4485 * This routine sets the variables:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4486 * xp->xp_pattern The start of the pattern to be expanded within
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4487 * the command line (ends at the cursor).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4488 * xp->xp_context The type of thing to expand. Will be one of:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4489 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4490 * EXPAND_UNSUCCESSFUL Used sometimes when there is something illegal on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4491 * the command line, like an unknown command. Caller
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4492 * should beep.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4493 * EXPAND_NOTHING Unrecognised context for completion, use char like
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4494 * a normal char, rather than for completion. eg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4495 * :s/^I/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4496 * EXPAND_COMMANDS Cursor is still touching the command, so complete
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4497 * it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4498 * EXPAND_BUFFERS Complete file names for :buf and :sbuf commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4499 * EXPAND_FILES After command with XFILE set, or after setting
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4500 * with P_EXPAND set. eg :e ^I, :w>>^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4501 * EXPAND_DIRECTORIES In some cases this is used instead of the latter
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4502 * when we know only directories are of interest. eg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4503 * :set dir=^I
714
0f9f4761ad9c updated for version 7.0216
vimboss
parents: 692
diff changeset
4504 * EXPAND_SHELLCMD After ":!cmd", ":r !cmd" or ":w !cmd".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4505 * EXPAND_SETTINGS Complete variable names. eg :set d^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4506 * EXPAND_BOOL_SETTINGS Complete boolean variables only, eg :set no^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4507 * EXPAND_TAGS Complete tags from the files in p_tags. eg :ta a^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4508 * EXPAND_TAGS_LISTFILES As above, but list filenames on ^D, after :tselect
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4509 * EXPAND_HELP Complete tags from the file 'helpfile'/tags
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4510 * EXPAND_EVENTS Complete event names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4511 * EXPAND_SYNTAX Complete :syntax command arguments
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4512 * EXPAND_HIGHLIGHT Complete highlight (syntax) group names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4513 * EXPAND_AUGROUP Complete autocommand group names
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4514 * EXPAND_USER_VARS Complete user defined variable names, eg :unlet a^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4515 * EXPAND_MAPPINGS Complete mapping and abbreviation names,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4516 * eg :unmap a^I , :cunab x^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4517 * EXPAND_FUNCTIONS Complete internal or user defined function names,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4518 * eg :call sub^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4519 * EXPAND_USER_FUNC Complete user defined function names, eg :delf F^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4520 * EXPAND_EXPRESSION Complete internal or user defined function/variable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4521 * names in expressions, eg :while s^I
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4522 * EXPAND_ENV_VARS Complete environment variable names
3744
99f076ca8d84 updated for version 7.3.631
Bram Moolenaar <bram@vim.org>
parents: 3740
diff changeset
4523 * EXPAND_USER Complete user names
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4524 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4525 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4526 set_expand_context(expand_T *xp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4527 {
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4528 /* only expansion for ':', '>' and '=' command-lines */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4529 if (ccline.cmdfirstc != ':'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4530 #ifdef FEAT_EVAL
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4531 && ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4532 && !ccline.input_fn
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4533 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4534 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4536 xp->xp_context = EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4537 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4538 }
10120
fb040c9d8ce9 commit https://github.com/vim/vim/commit/33a80eeb859a78ba93432da6fa585786cfd77249
Christian Brabandt <cb@256bit.org>
parents: 10098
diff changeset
4539 set_cmd_context(xp, ccline.cmdbuff, ccline.cmdlen, ccline.cmdpos, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4540 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4541
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4542 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4543 set_cmd_context(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4544 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4545 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
4546 int len, /* length of command line (excl. NUL) */
10120
fb040c9d8ce9 commit https://github.com/vim/vim/commit/33a80eeb859a78ba93432da6fa585786cfd77249
Christian Brabandt <cb@256bit.org>
parents: 10098
diff changeset
4547 int col, /* position of cursor */
fb040c9d8ce9 commit https://github.com/vim/vim/commit/33a80eeb859a78ba93432da6fa585786cfd77249
Christian Brabandt <cb@256bit.org>
parents: 10098
diff changeset
4548 int use_ccline UNUSED) /* use ccline for info */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4549 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4550 int old_char = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4551 char_u *nextcomm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4552
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4553 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4554 * Avoid a UMR warning from Purify, only save the character if it has been
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4555 * written before.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4556 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4557 if (col < len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4558 old_char = str[col];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4559 str[col] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4560 nextcomm = str;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4561
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4562 #ifdef FEAT_EVAL
10120
fb040c9d8ce9 commit https://github.com/vim/vim/commit/33a80eeb859a78ba93432da6fa585786cfd77249
Christian Brabandt <cb@256bit.org>
parents: 10098
diff changeset
4563 if (use_ccline && ccline.cmdfirstc == '=')
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4564 {
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4565 # ifdef FEAT_CMDL_COMPL
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4566 /* pass CMD_SIZE because there is no real command */
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4567 set_context_for_expression(xp, str, CMD_SIZE);
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4568 # endif
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4569 }
10120
fb040c9d8ce9 commit https://github.com/vim/vim/commit/33a80eeb859a78ba93432da6fa585786cfd77249
Christian Brabandt <cb@256bit.org>
parents: 10098
diff changeset
4570 else if (use_ccline && ccline.input_fn)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4571 {
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4572 xp->xp_context = ccline.xp_context;
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4573 xp->xp_pattern = ccline.cmdbuff;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4574 # if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4575 xp->xp_arg = ccline.xp_arg;
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
4576 # endif
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
4577 }
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4578 else
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4579 #endif
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4580 while (nextcomm != NULL)
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4581 nextcomm = set_one_cmd_context(xp, nextcomm);
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
4582
5056
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4583 /* 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
4584 * easily. */
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4585 xp->xp_line = str;
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4586 xp->xp_col = col;
034abed357a1 updated for version 7.3.1271
Bram Moolenaar <bram@vim.org>
parents: 5033
diff changeset
4587
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4588 str[col] = old_char;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4589 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4591 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4592 * Expand the command line "str" from context "xp".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4593 * "xp" must have been set by set_cmd_context().
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4594 * 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
4595 * starts.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4596 * Returns EXPAND_UNSUCCESSFUL when there is something illegal before the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4597 * cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4598 * Returns EXPAND_NOTHING when there is nothing to expand, might insert the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4599 * key that triggered expansion literally.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4600 * Returns EXPAND_OK otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4601 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4602 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4603 expand_cmdline(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4604 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4605 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
4606 int col, /* position of cursor */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4607 int *matchcount, /* return: nr of matches */
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4608 char_u ***matches) /* return: array of pointers to matches */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4609 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4610 char_u *file_str = NULL;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4611 int options = WILD_ADD_SLASH|WILD_SILENT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4612
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4613 if (xp->xp_context == EXPAND_UNSUCCESSFUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4614 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4615 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4616 return EXPAND_UNSUCCESSFUL; /* Something illegal on command line */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4617 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4618 if (xp->xp_context == EXPAND_NOTHING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4619 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4620 /* Caller can use the character as a normal char instead */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4621 return EXPAND_NOTHING;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4622 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4623
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4624 /* 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
4625 xp->xp_pattern_len = (int)(str + col - xp->xp_pattern);
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
4626 file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4627 if (file_str == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4628 return EXPAND_UNSUCCESSFUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4629
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4630 if (p_wic)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4631 options += WILD_ICASE;
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4632
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4633 /* find all files that match the description */
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4634 if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4635 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4636 *matchcount = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4637 *matches = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4639 vim_free(file_str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4640
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4641 return EXPAND_OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4642 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4643
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4644 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4645 /*
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4646 * Cleanup matches for help tags:
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4647 * 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
4648 * tag matches it. Otherwise remove "@en" if "en" is the only language.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4649 */
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
4650 static void cleanup_help_tags(int num_file, char_u **file);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4651
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4652 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4653 cleanup_help_tags(int num_file, char_u **file)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4654 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4655 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4656 int len;
8765
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4657 char_u buf[4];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4658 char_u *p = buf;
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4659
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
4660 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
4661 {
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4662 *p++ = '@';
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4663 *p++ = p_hlg[0];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4664 *p++ = p_hlg[1];
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4665 }
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4666 *p = NUL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4667
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4668 for (i = 0; i < num_file; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4669 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4670 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
4671 if (len <= 0)
3daf70d22168 commit https://github.com/vim/vim/commit/61264d99692803eec76a171916ab9720c75536b0
Christian Brabandt <cb@256bit.org>
parents: 8694
diff changeset
4672 continue;
9070
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4673 if (STRCMP(file[i] + len, "@en") == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4674 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4675 /* Sorting on priority means the same item in another language may
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4676 * be anywhere. Search all items for a match up to the "@en". */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4677 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
4678 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
4679 && STRNCMP(file[i], file[j], len + 1) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4680 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4681 if (j == num_file)
9066
c7bdd383275d commit https://github.com/vim/vim/commit/89c79b99328b66f77f1d12dc8c6701dfe2c57f15
Christian Brabandt <cb@256bit.org>
parents: 8765
diff changeset
4682 /* item only exists with @en, remove it */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4683 file[i][len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4684 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4685 }
9070
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4686
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4687 if (*buf != NUL)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4688 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
4689 {
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4690 len = (int)STRLEN(file[i]) - 3;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4691 if (len <= 0)
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4692 continue;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4693 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
4694 {
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4695 /* remove the default language */
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4696 file[i][len] = NUL;
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4697 }
0bb25b026fc9 commit https://github.com/vim/vim/commit/9ccaae04c6f263e6db14fc403bca2404a7871114
Christian Brabandt <cb@256bit.org>
parents: 9066
diff changeset
4698 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4699 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4700 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4701
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4702 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4703 * Do the expansion based on xp->xp_context and "pat".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4704 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4705 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4706 ExpandFromContext(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4707 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4708 char_u *pat,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4709 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4710 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4711 int options) /* EW_ flags */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4712 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4713 #ifdef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4714 regmatch_T regmatch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4715 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4716 int ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4717 int flags;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4719 flags = EW_DIR; /* include directories */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4720 if (options & WILD_LIST_NOTFOUND)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4721 flags |= EW_NOTFOUND;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4722 if (options & WILD_ADD_SLASH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4723 flags |= EW_ADDSLASH;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4724 if (options & WILD_KEEP_ALL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4725 flags |= EW_KEEPALL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4726 if (options & WILD_SILENT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4727 flags |= EW_SILENT;
6659
6f1e4b7942c3 updated for version 7.4.654
Bram Moolenaar <bram@vim.org>
parents: 6424
diff changeset
4728 if (options & WILD_ALLLINKS)
6f1e4b7942c3 updated for version 7.4.654
Bram Moolenaar <bram@vim.org>
parents: 6424
diff changeset
4729 flags |= EW_ALLLINKS;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4730
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4731 if (xp->xp_context == EXPAND_FILES
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4732 || xp->xp_context == EXPAND_DIRECTORIES
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4733 || xp->xp_context == EXPAND_FILES_IN_PATH)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4734 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4735 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4736 * Expand file or directory names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4737 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4738 int free_pat = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4739 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4740
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4741 /* for ":set path=" and ":set tags=" halve backslashes for escaped
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4742 * space */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4743 if (xp->xp_backslash != XP_BS_NONE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4744 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4745 free_pat = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4746 pat = vim_strsave(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4747 for (i = 0; pat[i]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4748 if (pat[i] == '\\')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4749 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4750 if (xp->xp_backslash == XP_BS_THREE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4751 && pat[i + 1] == '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4752 && pat[i + 2] == '\\'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4753 && pat[i + 3] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
4754 STRMOVE(pat + i, pat + i + 3);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4755 if (xp->xp_backslash == XP_BS_ONE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4756 && pat[i + 1] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
4757 STRMOVE(pat + i, pat + i + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4758 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4760
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4761 if (xp->xp_context == EXPAND_FILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4762 flags |= EW_FILE;
2311
ccda151dde4e Support completion for ":find". (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2302
diff changeset
4763 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
4764 flags |= (EW_FILE | EW_PATH);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4765 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4766 flags = (flags | EW_DIR) & ~EW_FILE;
2652
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4767 if (options & WILD_ICASE)
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4768 flags |= EW_ICASE;
b2a7d143abe2 updated for version 7.3.072
Bram Moolenaar <bram@vim.org>
parents: 2636
diff changeset
4769
2016
03c191181749 updated for version 7.2-313
vimboss
parents: 1965
diff changeset
4770 /* Expand wildcards, supporting %:h and the like. */
03c191181749 updated for version 7.2-313
vimboss
parents: 1965
diff changeset
4771 ret = expand_wildcards_eval(&pat, num_file, file, flags);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4772 if (free_pat)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4773 vim_free(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4774 return ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4775 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4776
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4777 *file = (char_u **)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4778 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4779 if (xp->xp_context == EXPAND_HELP)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4780 {
1696
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4781 /* 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
4782 * very slow. Get matches for "help" instead. */
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4783 if (find_help_tags(*pat == NUL ? (char_u *)"help" : pat,
0c4a465bd741 updated for version 7.2b-029
vimboss
parents: 1694
diff changeset
4784 num_file, file, FALSE) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4785 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4786 #ifdef FEAT_MULTI_LANG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4787 cleanup_help_tags(*num_file, *file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4788 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4789 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4790 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4791 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4792 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4793
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4794 #ifndef FEAT_CMDL_COMPL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4795 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4796 #else
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
4797 if (xp->xp_context == EXPAND_SHELLCMD)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
4798 return expand_shellcmd(pat, num_file, file, flags);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4799 if (xp->xp_context == EXPAND_OLD_SETTING)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4800 return ExpandOldSetting(num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4801 if (xp->xp_context == EXPAND_BUFFERS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4802 return ExpandBufnames(pat, num_file, file, options);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4803 if (xp->xp_context == EXPAND_TAGS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4804 || xp->xp_context == EXPAND_TAGS_LISTFILES)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4805 return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4806 if (xp->xp_context == EXPAND_COLORS)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4807 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4808 char *directories[] = {"colors", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4809 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
4810 directories);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4811 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4812 if (xp->xp_context == EXPAND_COMPILER)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4813 {
3106
f04619f1fc16 updated for version 7.3.324
Bram Moolenaar <bram@vim.org>
parents: 3020
diff changeset
4814 char *directories[] = {"compiler", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4815 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
4816 }
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
4817 if (xp->xp_context == EXPAND_OWNSYNTAX)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4818 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4819 char *directories[] = {"syntax", NULL};
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
4820 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
4821 }
2268
aafed4a4866f Command line completion for :ownsyntax. (Dominique Pelle)
Bram Moolenaar <bram@vim.org>
parents: 2243
diff changeset
4822 if (xp->xp_context == EXPAND_FILETYPE)
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4823 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
4824 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
4825 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
4826 }
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4827 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4828 if (xp->xp_context == EXPAND_USER_LIST)
856
8cd729851562 updated for version 7.0g
vimboss
parents: 849
diff changeset
4829 return ExpandUserList(xp, num_file, file);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
4830 # endif
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4831 if (xp->xp_context == EXPAND_PACKADD)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
4832 return ExpandPackAddDir(pat, num_file, file);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4834 regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4835 if (regmatch.regprog == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4836 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4837
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4838 /* set ignore-case according to p_ic, p_scs and pat */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4839 regmatch.rm_ic = ignorecase(pat);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4840
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4841 if (xp->xp_context == EXPAND_SETTINGS
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4842 || xp->xp_context == EXPAND_BOOL_SETTINGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4843 ret = ExpandSettings(xp, &regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4844 else if (xp->xp_context == EXPAND_MAPPINGS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4845 ret = ExpandMappings(&regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4846 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4847 else if (xp->xp_context == EXPAND_USER_DEFINED)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4848 ret = ExpandUserDefined(xp, &regmatch, num_file, file);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4849 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4850 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4851 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4852 static struct expgen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4853 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4854 int context;
7807
1a5d34492798 commit https://github.com/vim/vim/commit/d99df423c559d85c17779b3685426c489554908c
Christian Brabandt <cb@256bit.org>
parents: 7801
diff changeset
4855 char_u *((*func)(expand_T *, int));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4856 int ic;
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4857 int escaped;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4858 } tab[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4859 {
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4860 {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4861 {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
10275
6d8b2da002e9 commit https://github.com/vim/vim/commit/9e507ca8a3e1535e62de4bd86374b0fcd18ef5b8
Christian Brabandt <cb@256bit.org>
parents: 10174
diff changeset
4862 {EXPAND_MESSAGES, get_messages_arg, TRUE, TRUE},
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4863 #ifdef FEAT_CMDHIST
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4864 {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
4865 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4866 #ifdef FEAT_USR_CMDS
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4867 {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
4868 {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
4869 {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
4870 {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
4871 {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4872 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4873 #ifdef FEAT_EVAL
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4874 {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
4875 {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4876 {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
4877 {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4878 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4879 #ifdef FEAT_MENU
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4880 {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4881 {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4882 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4883 #ifdef FEAT_SYN_HL
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4884 {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4885 #endif
4803
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4886 #ifdef FEAT_PROFILE
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4887 {EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE},
220bdea4f579 updated for version 7.3.1148
Bram Moolenaar <bram@vim.org>
parents: 4327
diff changeset
4888 #endif
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4889 {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4890 #ifdef FEAT_AUTOCMD
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4891 {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4892 {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4893 #endif
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1834
diff changeset
4894 #ifdef FEAT_CSCOPE
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4895 {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
1845
dc81a4fc6318 updated for version 7.2-143
vimboss
parents: 1834
diff changeset
4896 #endif
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
4897 #ifdef FEAT_SIGNS
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4898 {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
1868
954947a70580 updated for version 7.2-166
vimboss
parents: 1865
diff changeset
4899 #endif
2068
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
4900 #ifdef FEAT_PROFILE
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4901 {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
2068
98a2a6e6b966 updated for version 7.2.353
Bram Moolenaar <bram@zimbu.org>
parents: 2047
diff changeset
4902 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4903 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4904 && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4905 {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4906 {EXPAND_LOCALES, get_locales, TRUE, FALSE},
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4907 #endif
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4908 {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
4909 {EXPAND_USER, get_users, TRUE, FALSE},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4910 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4911 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4912
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4913 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4914 * Find a context in the table and call the ExpandGeneric() with the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4915 * right function to do the expansion.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4916 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4917 ret = FAIL;
1880
e5602d92da8c updated for version 7.2-177
vimboss
parents: 1877
diff changeset
4918 for (i = 0; i < (int)(sizeof(tab) / sizeof(struct expgen)); ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4919 if (xp->xp_context == tab[i].context)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4920 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4921 if (tab[i].ic)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4922 regmatch.rm_ic = TRUE;
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4923 ret = ExpandGeneric(xp, &regmatch, num_file, file,
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
4924 tab[i].func, tab[i].escaped);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4925 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4926 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4927 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4928
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
4929 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4930
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4931 return ret;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4932 #endif /* FEAT_CMDL_COMPL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4933 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4934
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4935 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4936 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4937 * Expand a list of names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4938 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4939 * Generic function for command line completion. It calls a function to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4940 * obtain strings, one by one. The strings are matched against a regexp
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4941 * program. Matching strings are copied into an array, which is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4942 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4943 * Returns OK when no problems encountered, FAIL for error (out of memory).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4944 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4945 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4946 ExpandGeneric(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4947 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4948 regmatch_T *regmatch,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4949 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4950 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
4951 char_u *((*func)(expand_T *, int)),
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4952 /* 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
4953 int escaped)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4954 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4955 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4956 int count = 0;
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4957 int round;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4958 char_u *str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4959
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4960 /* do this loop twice:
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4961 * round == 0: count the number of matching names
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4962 * round == 1: copy the matching names into allocated memory
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4963 */
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4964 for (round = 0; round <= 1; ++round)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4965 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4966 for (i = 0; ; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4967 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4968 str = (*func)(xp, i);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4969 if (str == NULL) /* end of list */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4970 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4971 if (*str == NUL) /* skip empty strings */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4972 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4973
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4974 if (vim_regexec(regmatch, str, (colnr_T)0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4975 {
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4976 if (round)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4977 {
2849
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4978 if (escaped)
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4979 str = vim_strsave_escaped(str, (char_u *)" \t\\.");
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4980 else
b0190e93e601 updated for version 7.3.198
Bram Moolenaar <bram@vim.org>
parents: 2839
diff changeset
4981 str = vim_strsave(str);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4982 (*file)[count] = str;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4983 #ifdef FEAT_MENU
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4984 if (func == get_menu_names && str != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4985 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4986 /* test for separator added by get_menu_names() */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4987 str += STRLEN(str) - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4988 if (*str == '\001')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4989 *str = '.';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4990 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4991 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4992 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4993 ++count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4994 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4995 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
4996 if (round == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4997 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4998 if (count == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4999 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5000 *num_file = count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5001 *file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5002 if (*file == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5003 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5004 *file = (char_u **)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5005 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5006 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5007 count = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5008 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5009 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
5010
828
01583c79d5f4 updated for version 7.0d03
vimboss
parents: 819
diff changeset
5011 /* Sort the results. Keep menu's in the specified order. */
01583c79d5f4 updated for version 7.0d03
vimboss
parents: 819
diff changeset
5012 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
5013 {
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5014 if (xp->xp_context == EXPAND_EXPRESSION
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5015 || xp->xp_context == EXPAND_FUNCTIONS
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5016 || xp->xp_context == EXPAND_USER_FUNC)
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5017 /* <SNR> functions should be sorted to the end. */
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5018 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
5019 sort_func_compare);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5020 else
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5021 sort_strings(*file, *num_file);
ca65249eb34b updated for version 7.3.352
Bram Moolenaar <bram@vim.org>
parents: 3114
diff changeset
5022 }
480
bf5ba8a0cdee updated for version 7.0129
vimboss
parents: 474
diff changeset
5023
1322
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5024 #ifdef FEAT_CMDL_COMPL
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5025 /* Reset the variables used for special highlight names expansion, so that
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5026 * they don't show up when getting normal highlight names by ID. */
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5027 reset_expand_highlight();
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5028 #endif
4ce0a7e4c6b3 updated for version 7.1-036
vimboss
parents: 1318
diff changeset
5029
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5030 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5031 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5032
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5033 /*
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5034 * Complete a shell command.
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5035 * Returns FAIL or OK;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5036 */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5037 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5038 expand_shellcmd(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5039 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
5040 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
5041 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
5042 int flagsarg) /* EW_ flags */
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5043 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5044 char_u *pat;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5045 int i;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5046 char_u *path;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5047 int mustfree = FALSE;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5048 garray_T ga;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5049 char_u *buf = alloc(MAXPATHL);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5050 size_t l;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5051 char_u *s, *e;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5052 int flags = flagsarg;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5053 int ret;
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5054 int did_curdir = FALSE;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5055
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5056 if (buf == NULL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5057 return FAIL;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5058
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5059 /* for ":set path=" and ":set tags=" halve backslashes for escaped
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5060 * space */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5061 pat = vim_strsave(filepat);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5062 for (i = 0; pat[i]; ++i)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5063 if (pat[i] == '\\' && pat[i + 1] == ' ')
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
5064 STRMOVE(pat + i, pat + i + 1);
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5065
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5066 flags |= EW_FILE | EW_EXEC | EW_SHELLCMD;
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5067
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5068 /* For an absolute name we don't use $PATH. */
955
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5069 if (mch_isFullName(pat))
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5070 path = (char_u *)" ";
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5071 else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5072 || (pat[1] == '.' && vim_ispathsep(pat[2])))))
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5073 path = (char_u *)".";
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5074 else
2630
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5075 {
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5076 path = vim_getenv((char_u *)"PATH", &mustfree);
2630
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5077 if (path == NULL)
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5078 path = (char_u *)"";
0de47f0d731e updated for version 7.3.051
Bram Moolenaar <bram@vim.org>
parents: 2617
diff changeset
5079 }
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5080
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5081 /*
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5082 * 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
5083 * 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
5084 * current directory, to find "subdir/cmd".
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5085 */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5086 ga_init2(&ga, (int)sizeof(char *), 10);
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5087 for (s = path; ; s = e)
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5088 {
6695
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5089 if (*s == NUL)
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5090 {
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5091 if (did_curdir)
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5092 break;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5093 /* 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
5094 did_curdir = TRUE;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5095 }
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5096 else if (*s == '.')
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5097 did_curdir = TRUE;
6529590f6c43 updated for version 7.4.672
Bram Moolenaar <bram@vim.org>
parents: 6659
diff changeset
5098
955
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5099 if (*s == ' ')
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5100 ++s; /* Skip space used for absolute path name. */
e1070b3b03e9 updated for version 7.0-081
vimboss
parents: 929
diff changeset
5101
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
5102 #if defined(MSWIN)
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5103 e = vim_strchr(s, ';');
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5104 #else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5105 e = vim_strchr(s, ':');
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5106 #endif
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5107 if (e == NULL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5108 e = s + STRLEN(s);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5109
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5110 l = e - s;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5111 if (l > MAXPATHL - 5)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5112 break;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5113 vim_strncpy(buf, s, l);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5114 add_pathsep(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5115 l = STRLEN(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5116 vim_strncpy(buf + l, pat, MAXPATHL - 1 - l);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5117
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5118 /* Expand matches in one directory of $PATH. */
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5119 ret = expand_wildcards(1, &buf, num_file, file, flags);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5120 if (ret == OK)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5121 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5122 if (ga_grow(&ga, *num_file) == FAIL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5123 FreeWild(*num_file, *file);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5124 else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5125 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5126 for (i = 0; i < *num_file; ++i)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5127 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5128 s = (*file)[i];
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5129 if (STRLEN(s) > l)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5130 {
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5131 /* Remove the path again. */
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
5132 STRMOVE(s, s + l);
716
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5133 ((char_u **)ga.ga_data)[ga.ga_len++] = s;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5134 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5135 else
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5136 vim_free(s);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5137 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5138 vim_free(*file);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5139 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5140 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5141 if (*e != NUL)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5142 ++e;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5143 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5144 *file = ga.ga_data;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5145 *num_file = ga.ga_len;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5146
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5147 vim_free(buf);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5148 vim_free(pat);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5149 if (mustfree)
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5150 vim_free(path);
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5151 return OK;
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5152 }
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5153
8ae24f338cab updated for version 7.0217
vimboss
parents: 714
diff changeset
5154
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5155 # 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
5156 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
5157
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5158 /*
10942
e05695e59f6d patch 8.0.0360: sometimes VimL is used instead of "Vim script"
Christian Brabandt <cb@256bit.org>
parents: 10861
diff changeset
5159 * Call "user_expand_func()" to invoke a user defined Vim script function and
e05695e59f6d patch 8.0.0360: sometimes VimL is used instead of "Vim script"
Christian Brabandt <cb@256bit.org>
parents: 10861
diff changeset
5160 * return the result (either a string or a List).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5161 */
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5162 static void *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5163 call_user_expand_func(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5164 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
5165 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5166 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5167 char_u ***file)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5168 {
5072
cca600e60928 updated for version 7.3.1279
Bram Moolenaar <bram@vim.org>
parents: 5056
diff changeset
5169 int keep = 0;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5170 char_u num[50];
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5171 char_u *args[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5172 int save_current_SID = current_SID;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5173 void *ret;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5174 struct cmdline_info save_ccline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5175
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5176 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
5177 return NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5178 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5179 *file = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5180
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5181 if (ccline.cmdbuff != NULL)
1518
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5182 {
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5183 keep = ccline.cmdbuff[ccline.cmdlen];
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5184 ccline.cmdbuff[ccline.cmdlen] = 0;
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5185 }
5033
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5186
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
5187 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
5188 args[1] = xp->xp_line;
7aa4e0822dec updated for version 7.3.1260
Bram Moolenaar <bram@vim.org>
parents: 4980
diff changeset
5189 sprintf((char *)num, "%d", xp->xp_col);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5190 args[2] = num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5191
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5192 /* Save the cmdline, we don't know what the function may do. */
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5193 save_ccline = ccline;
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5194 ccline.cmdbuff = NULL;
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5195 ccline.cmdprompt = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5196 current_SID = xp->xp_scriptID;
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5197
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5198 ret = user_expand_func(xp->xp_arg, 3, args, FALSE);
13
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5199
24d5189d3956 updated for version 7.0005
vimboss
parents: 10
diff changeset
5200 ccline = save_ccline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5201 current_SID = save_current_SID;
1518
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5202 if (ccline.cmdbuff != NULL)
75ab683fdb50 updated for version 7.1-233
vimboss
parents: 1484
diff changeset
5203 ccline.cmdbuff[ccline.cmdlen] = keep;
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5204
1965
8d1db3e3ac5f updated for version 7.2-262
vimboss
parents: 1917
diff changeset
5205 vim_free(args[0]);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5206 return ret;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5207 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5208
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5209 /*
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5210 * Expand names with a function defined by the user.
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5211 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5212 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5213 ExpandUserDefined(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5214 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5215 regmatch_T *regmatch,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5216 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5217 char_u ***file)
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5218 {
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5219 char_u *retstr;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5220 char_u *s;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5221 char_u *e;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5222 char_u keep;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5223 garray_T ga;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5224
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5225 retstr = call_user_expand_func(call_func_retstr, xp, num_file, file);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5226 if (retstr == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5227 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5228
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5229 ga_init2(&ga, (int)sizeof(char *), 3);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5230 for (s = retstr; *s != NUL; s = e)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5231 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5232 e = vim_strchr(s, '\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5233 if (e == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5234 e = s + STRLEN(s);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5235 keep = *e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5236 *e = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5238 if (xp->xp_pattern[0] && vim_regexec(regmatch, s, (colnr_T)0) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5239 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5240 *e = keep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5241 if (*e != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5242 ++e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5243 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5246 if (ga_grow(&ga, 1) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5247 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5248
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5249 ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, (int)(e - s));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5250 ++ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5251
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5252 *e = keep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5253 if (*e != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5254 ++e;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5255 }
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5256 vim_free(retstr);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5257 *file = ga.ga_data;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5258 *num_file = ga.ga_len;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5259 return OK;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5260 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5261
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5262 /*
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5263 * Expand names with a list returned by a function defined by the user.
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5264 */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5265 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5266 ExpandUserList(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5267 expand_T *xp,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5268 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5269 char_u ***file)
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5270 {
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5271 list_T *retlist;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5272 listitem_T *li;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5273 garray_T ga;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5274
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5275 retlist = call_user_expand_func(call_func_retlist, xp, num_file, file);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5276 if (retlist == NULL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5277 return FAIL;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5278
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5279 ga_init2(&ga, (int)sizeof(char *), 3);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5280 /* Loop over the items in the list. */
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5281 for (li = retlist->lv_first; li != NULL; li = li->li_next)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5282 {
1917
802898d3afd1 updated for version 7.2-214
vimboss
parents: 1880
diff changeset
5283 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
5284 continue; /* Skip non-string items and empty strings */
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5285
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5286 if (ga_grow(&ga, 1) == FAIL)
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5287 break;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5288
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5289 ((char_u **)ga.ga_data)[ga.ga_len] =
1917
802898d3afd1 updated for version 7.2-214
vimboss
parents: 1880
diff changeset
5290 vim_strsave(li->li_tv.vval.v_string);
407
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5291 ++ga.ga_len;
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5292 }
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5293 list_unref(retlist);
0f6afaf1b8d1 updated for version 7.0106
vimboss
parents: 359
diff changeset
5294
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5295 *file = ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5296 *num_file = ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5297 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5299 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5300
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5301 /*
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5302 * 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
5303 * Search from 'runtimepath':
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5304 * 'runtimepath'/{dirnames}/{pat}.vim
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5305 * 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
5306 * 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5307 * 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
5308 * 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5309 * "dirnames" is an array with one or more directory names.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5310 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5311 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5312 ExpandRTDir(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5313 char_u *pat,
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5314 int flags,
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5315 int *num_file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5316 char_u ***file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5317 char *dirnames[])
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5318 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5319 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5320 char_u *e;
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5321 char_u *match;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5322 garray_T ga;
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5323 int i;
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5324 int pat_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5325
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5326 *num_file = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5327 *file = NULL;
2931
f2c108f44f41 updated for version 7.3.238
Bram Moolenaar <bram@vim.org>
parents: 2929
diff changeset
5328 pat_len = (int)STRLEN(pat);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5329 ga_init2(&ga, (int)sizeof(char *), 10);
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5330
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5331 for (i = 0; dirnames[i] != NULL; ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5332 {
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5333 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
5334 if (s == NULL)
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5335 {
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5336 ga_clear_strings(&ga);
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5337 return FAIL;
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5338 }
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5339 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
5340 globpath(p_rtp, s, &ga, 0);
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5341 vim_free(s);
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5342 }
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5343
8528
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5344 if (flags & DIP_START) {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5345 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
5346 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5347 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
5348 if (s == NULL)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5349 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5350 ga_clear_strings(&ga);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5351 return FAIL;
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5352 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5353 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
5354 globpath(p_pp, s, &ga, 0);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5355 vim_free(s);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5356 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5357 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5358
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5359 if (flags & DIP_OPT) {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5360 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
5361 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5362 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
5363 if (s == NULL)
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5364 {
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5365 ga_clear_strings(&ga);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5366 return FAIL;
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5367 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5368 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
5369 globpath(p_pp, s, &ga, 0);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5370 vim_free(s);
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5371 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5372 }
630300c7a26c commit https://github.com/vim/vim/commit/52f9c19015df5ee1ee8592b6f3f15b8a57c8f5be
Christian Brabandt <cb@256bit.org>
parents: 8406
diff changeset
5373
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5374 for (i = 0; i < ga.ga_len; ++i)
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5375 {
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5376 match = ((char_u **)ga.ga_data)[i];
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5377 s = match;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5378 e = s + STRLEN(s);
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5379 if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5380 {
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5381 e -= 4;
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11121
diff changeset
5382 for (s = e; s > match; MB_PTR_BACK(match, s))
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5383 if (s < match || vim_ispathsep(*s))
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5384 break;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5385 ++s;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5386 *e = NUL;
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5387 mch_memmove(match, s, e - s + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5388 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5389 }
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5390
2929
e3bb93df6c34 updated for version 7.3.237
Bram Moolenaar <bram@vim.org>
parents: 2849
diff changeset
5391 if (ga.ga_len == 0)
3628
3ac005f02cf0 updated for version 7.3.574
Bram Moolenaar <bram@vim.org>
parents: 3558
diff changeset
5392 return FAIL;
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5393
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5394 /* 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
5395 * directories in dirnames. */
2433
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5396 remove_duplicates(&ga);
98b9a6b9e7d5 Add completion for ":ownsyntax" and improve completion for ":filetype".
Bram Moolenaar <bram@vim.org>
parents: 2429
diff changeset
5397
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5398 *file = ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5399 *num_file = ga.ga_len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5400 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5401 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5402
8402
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5403 /*
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5404 * Expand loadplugin names:
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5405 * 'packpath'/pack/ * /opt/{pat}
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5406 */
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5407 static int
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5408 ExpandPackAddDir(
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5409 char_u *pat,
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5410 int *num_file,
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5411 char_u ***file)
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 char_u *s;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5414 char_u *e;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5415 char_u *match;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5416 garray_T ga;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5417 int i;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5418 int pat_len;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5419
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5420 *num_file = 0;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5421 *file = NULL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5422 pat_len = (int)STRLEN(pat);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5423 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
5424
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5425 s = alloc((unsigned)(pat_len + 26));
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5426 if (s == NULL)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5427 {
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5428 ga_clear_strings(&ga);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5429 return FAIL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5430 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5431 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
5432 globpath(p_pp, s, &ga, 0);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5433 vim_free(s);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5434
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5435 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
5436 {
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5437 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
5438 s = gettail(match);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5439 e = s + STRLEN(s);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5440 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
5441 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5442
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5443 if (ga.ga_len == 0)
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5444 return FAIL;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5445
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5446 /* 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
5447 * directories in dirnames. */
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5448 remove_duplicates(&ga);
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5449
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5450 *file = ga.ga_data;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5451 *num_file = ga.ga_len;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5452 return OK;
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5453 }
eed1ca42f9aa commit https://github.com/vim/vim/commit/35ca0e7a1cb6e6daef8e0052a8437801226cef19
Christian Brabandt <cb@256bit.org>
parents: 8281
diff changeset
5454
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5455 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5457 #if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5458 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5459 * 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
5460 * Adds the matches to "ga". Caller must init "ga".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5461 */
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5462 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5463 globpath(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5464 char_u *path,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5465 char_u *file,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5466 garray_T *ga,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5467 int expand_options)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5468 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5469 expand_T xpc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5470 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5471 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5472 int num_p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5473 char_u **p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5474
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5475 buf = alloc(MAXPATHL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5476 if (buf == NULL)
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5477 return;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5478
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
5479 ExpandInit(&xpc);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5480 xpc.xp_context = EXPAND_FILES;
632
b6632d553df3 updated for version 7.0182
vimboss
parents: 625
diff changeset
5481
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5482 /* Loop over all entries in {path}. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5483 while (*path != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5485 /* Copy one item of the path to buf[] and concatenate the file name. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5486 copy_option_part(&path, buf, MAXPATHL, ",");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5487 if (STRLEN(buf) + STRLEN(file) + 2 < MAXPATHL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5488 {
8212
05b88224cea1 commit https://github.com/vim/vim/commit/48e330aff911be1c798c88a973af6437a8141fce
Christian Brabandt <cb@256bit.org>
parents: 8080
diff changeset
5489 # 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
5490 /* 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
5491 * 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
5492 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
5493 STRCAT(buf, "/");
a847363bf06e Fix a few problems for :find completion. Test much more. (Nazri Ramliy)
Bram Moolenaar <bram@vim.org>
parents: 2445
diff changeset
5494 # else
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5495 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
5496 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5497 STRCAT(buf, file);
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5498 if (ExpandFromContext(&xpc, buf, &num_p, &p,
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5499 WILD_SILENT|expand_options) != FAIL && num_p > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5500 {
1754
28d0c20ad8a0 updated for version 7.2-051
vimboss
parents: 1743
diff changeset
5501 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
5502
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5503 if (ga_grow(ga, num_p) == OK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5504 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5505 for (i = 0; i < num_p; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5506 {
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5507 ((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
5508 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
5509 ++ga->ga_len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5510 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5511 }
5873
8e9db1f27a00 updated for version 7.4.279
Bram Moolenaar <bram@vim.org>
parents: 5481
diff changeset
5512
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5513 FreeWild(num_p, p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5514 }
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 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5519 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5520
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5521 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5522
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5523 #if defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5524
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5525 /*********************************
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5526 * Command line history stuff *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5527 *********************************/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5528
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5529 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5530 * Translate a history character to the associated type number.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5531 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5532 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5533 hist_char2type(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5534 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5535 if (c == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5536 return HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5537 if (c == '=')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5538 return HIST_EXPR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5539 if (c == '@')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5540 return HIST_INPUT;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5541 if (c == '>')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5542 return HIST_DEBUG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5543 return HIST_SEARCH; /* must be '?' or '/' */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5544 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5545
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5546 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5547 * Table of history names.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5548 * These names are used in :history and various hist...() functions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5549 * It is sufficient to give the significant prefix of a history name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5550 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5551
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5552 static char *(history_names[]) =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5553 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5554 "cmd",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5555 "search",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5556 "expr",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5557 "input",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5558 "debug",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5559 NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5560 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5561
3503
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5562 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5563 /*
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5564 * 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
5565 * arguments of the ":history command.
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5566 */
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5567 static char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5568 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
5569 {
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5570 static char_u compl[2] = { NUL, NUL };
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5571 char *short_names = ":=@>?/";
3529
ac2e00f917df updated for version 7.3.525
Bram Moolenaar <bram@vim.org>
parents: 3503
diff changeset
5572 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
5573 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
5574
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5575 if (idx < short_names_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5576 {
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5577 compl[0] = (char_u)short_names[idx];
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5578 return compl;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5579 }
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5580 if (idx < short_names_count + history_name_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5581 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
5582 if (idx == short_names_count + history_name_count)
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5583 return (char_u *)"all";
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5584 return NULL;
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5585 }
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5586 #endif
7e4428115d2c updated for version 7.3.514
Bram Moolenaar <bram@vim.org>
parents: 3398
diff changeset
5587
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5588 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5589 * init_history() - Initialize the command line history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5590 * Also used to re-allocate the history when the size changes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5591 */
356
0f2b5d1b8117 updated for version 7.0092
vimboss
parents: 323
diff changeset
5592 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5593 init_history(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5594 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5595 int newlen; /* new length of history table */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5596 histentry_T *temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5597 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5598 int j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5599 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5600
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5601 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5602 * If size of history table changed, reallocate it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5603 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5604 newlen = (int)p_hi;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5605 if (newlen != hislen) /* history length changed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5606 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5607 for (type = 0; type < HIST_COUNT; ++type) /* adjust the tables */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5608 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5609 if (newlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5610 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5611 temp = (histentry_T *)lalloc(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5612 (long_u)(newlen * sizeof(histentry_T)), TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5613 if (temp == NULL) /* out of memory! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5614 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5615 if (type == 0) /* first one: just keep the old length */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5616 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5617 newlen = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5618 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5619 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5620 /* Already changed one table, now we can only have zero
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5621 * length for all tables. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5622 newlen = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5623 type = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5624 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5625 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5626 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5627 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5628 temp = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5629 if (newlen == 0 || temp != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5630 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5631 if (hisidx[type] < 0) /* there are no entries yet */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5632 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5633 for (i = 0; i < newlen; ++i)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5634 clear_hist_entry(&temp[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5635 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5636 else if (newlen > hislen) /* array becomes bigger */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5637 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5638 for (i = 0; i <= hisidx[type]; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5639 temp[i] = history[type][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5640 j = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5641 for ( ; i <= newlen - (hislen - hisidx[type]); ++i)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5642 clear_hist_entry(&temp[i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5643 for ( ; j < hislen; ++i, ++j)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5644 temp[i] = history[type][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5645 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5646 else /* array becomes smaller or 0 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5647 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5648 j = hisidx[type];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5649 for (i = newlen - 1; ; --i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5650 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5651 if (i >= 0) /* copy newest entries */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5652 temp[i] = history[type][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5653 else /* remove older entries */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5654 vim_free(history[type][j].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5655 if (--j < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5656 j = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5657 if (j == hisidx[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5658 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5659 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5660 hisidx[type] = newlen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5661 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5662 vim_free(history[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5663 history[type] = temp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5664 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5665 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5666 hislen = newlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5667 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5668 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5669
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5670 static void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5671 clear_hist_entry(histentry_T *hisptr)
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5672 {
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5673 hisptr->hisnum = 0;
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5674 hisptr->viminfo = FALSE;
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5675 hisptr->hisstr = NULL;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
5676 hisptr->time_set = 0;
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5677 }
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5678
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5679 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5680 * Check if command line 'str' is already in history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5681 * If 'move_to_front' is TRUE, matching entry is moved to end of history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5682 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5683 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5684 in_history(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5685 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5686 char_u *str,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5687 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
5688 int sep,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5689 int writing) /* ignore entries read from viminfo */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5690 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5691 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5692 int last_i = -1;
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5693 char_u *p;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5694
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5695 if (hisidx[type] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5696 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5697 i = hisidx[type];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5698 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5699 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5700 if (history[type][i].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5701 return FALSE;
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5702
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5703 /* 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
5704 * well. */
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5705 p = history[type][i].hisstr;
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5706 if (STRCMP(str, p) == 0
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
5707 && !(writing && history[type][i].viminfo)
2986
eff686fb8de6 updated for version 7.3.265
Bram Moolenaar <bram@vim.org>
parents: 2937
diff changeset
5708 && (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5709 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5710 if (!move_to_front)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5711 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5712 last_i = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5713 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5714 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5715 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5716 i = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5717 } while (i != hisidx[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5719 if (last_i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5720 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5721 str = history[type][i].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5722 while (i != hisidx[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5723 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5724 if (++i >= hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5725 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5726 history[type][last_i] = history[type][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5727 last_i = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5728 }
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5729 history[type][i].hisnum = ++hisnum[type];
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5730 history[type][i].viminfo = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5731 history[type][i].hisstr = str;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
5732 history[type][i].time_set = vim_time();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5733 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5734 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5735 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5736 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5737
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5738 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5739 * Convert history name (from table above) to its HIST_ equivalent.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5740 * When "name" is empty, return "cmd" history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5741 * Returns -1 for unknown history name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5742 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5743 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5744 get_histtype(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5745 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5746 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5747 int len = (int)STRLEN(name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5748
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5749 /* No argument: use current history. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5750 if (len == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5751 return hist_char2type(ccline.cmdfirstc);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5752
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5753 for (i = 0; history_names[i] != NULL; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5754 if (STRNICMP(name, history_names[i], len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5755 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5756
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5757 if (vim_strchr((char_u *)":=@>?/", name[0]) != NULL && name[1] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5758 return hist_char2type(name[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5759
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5760 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5761 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5762
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5763 static int last_maptick = -1; /* last seen maptick */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5764
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5765 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5766 * 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
5767 * 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
5768 * values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5769 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5770 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5771 add_to_history(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5772 int histype,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5773 char_u *new_entry,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5774 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
5775 int sep) /* separator character used (search hist) */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5777 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5778 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5780 if (hislen == 0) /* no history */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5781 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5782
5467
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5783 if (cmdmod.keeppatterns && histype == HIST_SEARCH)
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5784 return;
6367a766027d updated for version 7.4.083
Bram Moolenaar <bram@vim.org>
parents: 5438
diff changeset
5785
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5786 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5787 * Searches inside the same mapping overwrite each other, so that only
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5788 * 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
5789 * down, only lines that were added.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5790 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5791 if (histype == HIST_SEARCH && in_map)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5792 {
10174
b17c82587755 commit https://github.com/vim/vim/commit/46643713dc6bb04b4e84986b1763ef309e960161
Christian Brabandt <cb@256bit.org>
parents: 10120
diff changeset
5793 if (maptick == last_maptick && hisidx[HIST_SEARCH] >= 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5794 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5795 /* Current line is from the same mapping, remove it */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5796 hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5797 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5798 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5799 --hisnum[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5800 if (--hisidx[HIST_SEARCH] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5801 hisidx[HIST_SEARCH] = hislen - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5803 last_maptick = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5804 }
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
5805 if (!in_history(histype, new_entry, TRUE, sep, FALSE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5806 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5807 if (++hisidx[histype] == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5808 hisidx[histype] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5809 hisptr = &history[histype][hisidx[histype]];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5810 vim_free(hisptr->hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5811
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5812 /* Store the separator after the NUL of the string. */
835
8bebcabccc2c updated for version 7.0e01
vimboss
parents: 831
diff changeset
5813 len = (int)STRLEN(new_entry);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5814 hisptr->hisstr = vim_strnsave(new_entry, len + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5815 if (hisptr->hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5816 hisptr->hisstr[len + 1] = sep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5818 hisptr->hisnum = ++hisnum[histype];
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5819 hisptr->viminfo = FALSE;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
5820 hisptr->time_set = vim_time();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5821 if (histype == HIST_SEARCH && in_map)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5822 last_maptick = maptick;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5823 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5824 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5825
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5826 #if defined(FEAT_EVAL) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5828 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5829 * Get identifier of newest history entry.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5830 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5831 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5832 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5833 get_history_idx(int histype)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5834 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5835 if (hislen == 0 || histype < 0 || histype >= HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5836 || hisidx[histype] < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5837 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5838
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5839 return history[histype][hisidx[histype]].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5840 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5841
531
da9142bd190a updated for version 7.0149
vimboss
parents: 510
diff changeset
5842 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5843 * Calculate history index from a number:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5844 * num > 0: seen as identifying number of a history entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5845 * num < 0: relative position in history wrt newest entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5846 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5847 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5848 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5849 calc_hist_idx(int histype, int num)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5851 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5852 histentry_T *hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5853 int wrapped = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5854
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5855 if (hislen == 0 || histype < 0 || histype >= HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5856 || (i = hisidx[histype]) < 0 || num == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5857 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5858
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5859 hist = history[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5860 if (num > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5861 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5862 while (hist[i].hisnum > num)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5863 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5864 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5865 if (wrapped)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5866 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5867 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5868 wrapped = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5869 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5870 if (hist[i].hisnum == num && hist[i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5871 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5872 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5873 else if (-num <= hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5874 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5875 i += num + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5876 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5877 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5878 if (hist[i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5879 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5880 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5881 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5882 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5883
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5884 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5885 * Get a history entry by its index.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5886 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5887 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5888 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5889 get_history_entry(int histype, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5891 idx = calc_hist_idx(histype, idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5892 if (idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5893 return history[histype][idx].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5894 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5895 return (char_u *)"";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5896 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5897
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5898 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5899 * Clear all entries of a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5900 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5901 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5902 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5903 clr_history(int histype)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5904 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5905 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5906 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5907
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5908 if (hislen != 0 && histype >= 0 && histype < HIST_COUNT)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5909 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5910 hisptr = history[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5911 for (i = hislen; i--;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5912 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5913 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5914 clear_hist_entry(hisptr);
8406
5d926807c19c commit https://github.com/vim/vim/commit/119d4693e06e68d4f099aa7287e375ae3d265fd0
Christian Brabandt <cb@256bit.org>
parents: 8402
diff changeset
5915 hisptr++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5916 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5917 hisidx[histype] = -1; /* mark history as cleared */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5918 hisnum[histype] = 0; /* reset identifier counter */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5919 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5920 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5921 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5922 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5924 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5925 * Remove all entries matching {str} from a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5926 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5927 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5928 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5929 del_history_entry(int histype, char_u *str)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5930 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5931 regmatch_T regmatch;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5932 histentry_T *hisptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5933 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5934 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5935 int last;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5936 int found = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5937
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5938 regmatch.regprog = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5939 regmatch.rm_ic = FALSE; /* always match case */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5940 if (hislen != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5941 && histype >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5942 && histype < HIST_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5943 && *str != NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5944 && (idx = hisidx[histype]) >= 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5945 && (regmatch.regprog = vim_regcomp(str, RE_MAGIC + RE_STRING))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5946 != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5947 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5948 i = last = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5949 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5950 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5951 hisptr = &history[histype][i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5952 if (hisptr->hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5953 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5954 if (vim_regexec(&regmatch, hisptr->hisstr, (colnr_T)0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5955 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5956 found = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5957 vim_free(hisptr->hisstr);
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5958 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5959 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5960 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5961 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5962 if (i != last)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5963 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5964 history[histype][last] = *hisptr;
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
5965 clear_hist_entry(hisptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5966 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5967 if (--last < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5968 last += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5969 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5970 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5971 i += hislen;
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 if (history[histype][idx].hisstr == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5974 hisidx[histype] = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5975 }
4805
66803af09906 updated for version 7.3.1149
Bram Moolenaar <bram@vim.org>
parents: 4803
diff changeset
5976 vim_regfree(regmatch.regprog);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5977 return found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5978 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5979
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5980 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5981 * Remove an indexed entry from a history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5982 * "histype" may be one of the HIST_ values.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5983 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5984 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
5985 del_history_idx(int histype, int idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5987 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5988
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5989 i = calc_hist_idx(histype, idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5990 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5991 return FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5992 idx = hisidx[histype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5993 vim_free(history[histype][i].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5994
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5995 /* When deleting the last added search string in a mapping, reset
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5996 * last_maptick, so that the last added search string isn't deleted again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5997 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5998 if (histype == HIST_SEARCH && maptick == last_maptick && i == idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5999 last_maptick = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6000
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6001 while (i != idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6002 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6003 j = (i + 1) % hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6004 history[histype][i] = history[histype][j];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6005 i = j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6006 }
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6007 clear_hist_entry(&history[histype][i]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6008 if (--i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6009 i += hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6010 hisidx[histype] = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6011 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6012 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6013
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6014 #endif /* FEAT_EVAL */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6015
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6016 #if defined(FEAT_CRYPT) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6017 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6018 * Very specific function to remove the value in ":set key=val" from the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6019 * history.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6020 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6021 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6022 remove_key_from_history(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6023 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6024 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6025 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6026
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6027 i = hisidx[HIST_CMD];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6028 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6029 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6030 p = history[HIST_CMD][i].hisstr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6031 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6032 for ( ; *p; ++p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6033 if (STRNCMP(p, "key", 3) == 0 && !isalpha(p[3]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6035 p = vim_strchr(p + 3, '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6036 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6037 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6038 ++p;
11129
f4ea50924c6d patch 8.0.0452: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11127
diff changeset
6039 for (i = 0; p[i] && !VIM_ISWHITE(p[i]); ++i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6040 if (p[i] == '\\' && p[i + 1])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6041 ++i;
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
6042 STRMOVE(p, p + i);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6043 --p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6044 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6045 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6046 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6047
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6048 #endif /* FEAT_CMDHIST */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6049
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6050 #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
6051 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6052 * 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
6053 * 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
6054 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6055 static struct cmdline_info *
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6056 get_ccline_ptr(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6057 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6058 if ((State & CMDLINE) == 0)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6059 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6060 if (ccline.cmdbuff != NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6061 return &ccline;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6062 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
6063 return &prev_ccline;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6064 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6065 }
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6066 #endif
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6067
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6068 #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
6069 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6070 * 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
6071 * 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
6072 * Returns NULL when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6073 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6074 char_u *
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6075 get_cmdline_str(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6076 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6077 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
6078
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6079 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6080 return NULL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6081 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
6082 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6083
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 * 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
6086 * Zero is the first position.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6087 * 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
6088 * Returns -1 when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6089 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6090 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6091 get_cmdline_pos(void)
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 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
6094
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6095 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6096 return -1;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6097 return p->cmdpos;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6098 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6099
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6100 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6101 * 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
6102 * 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
6103 * 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
6104 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6105 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6106 set_cmdline_pos(
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6107 int pos)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6108 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6109 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
6110
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6111 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6112 return 1;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6113
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6114 /* 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
6115 * changed the command line. */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6116 if (pos < 0)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6117 new_cmdpos = 0;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6118 else
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6119 new_cmdpos = pos;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6120 return 0;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6121 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6122 #endif
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6123
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6124 #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
6125 /*
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6126 * Get the current command-line type.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6127 * Returns ':' or '/' or '?' or '@' or '>' or '-'
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6128 * 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
6129 * Returns NUL when something is wrong.
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6130 */
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6131 int
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6132 get_cmdline_type(void)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6133 {
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6134 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
6135
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6136 if (p == NULL)
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6137 return NUL;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6138 if (p->cmdfirstc == NUL)
8647
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6139 return
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6140 # ifdef FEAT_EVAL
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6141 (p->input_fn) ? '@' :
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6142 # endif
59866aabe737 commit https://github.com/vim/vim/commit/064154c3fedd6a46ca2f61463d7e5567bd22d9f1
Christian Brabandt <cb@256bit.org>
parents: 8645
diff changeset
6143 '-';
8645
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6144 return p->cmdfirstc;
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6145 }
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6146 #endif
f4819f0fc5ad commit https://github.com/vim/vim/commit/d293b2b9d43ee4b7b48ca6974202cbf319438975
Christian Brabandt <cb@256bit.org>
parents: 8643
diff changeset
6147
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6148 #if defined(FEAT_QUICKFIX) || defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6149 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6150 * 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
6151 * text lines in a buffer!) from a string. Used for ":history" and ":clist".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6152 * Returns OK if parsed successfully, otherwise FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6153 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6154 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6155 get_list_range(char_u **str, int *num1, int *num2)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6156 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6157 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6158 int first = FALSE;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9301
diff changeset
6159 varnumber_T num;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6160
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6161 *str = skipwhite(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6162 if (**str == '-' || vim_isdigit(**str)) /* parse "from" part of range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6163 {
7447
ad432f8f68fb commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents: 7408
diff changeset
6164 vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6165 *str += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6166 *num1 = (int)num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6167 first = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6168 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6169 *str = skipwhite(*str);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6170 if (**str == ',') /* parse "to" part of range */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6171 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6172 *str = skipwhite(*str + 1);
7447
ad432f8f68fb commit https://github.com/vim/vim/commit/887c1fea4a114e7170091942d0446c8882701b5b
Christian Brabandt <cb@256bit.org>
parents: 7408
diff changeset
6173 vim_str2nr(*str, NULL, &len, 0, &num, NULL, 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6174 if (len > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6175 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6176 *num2 = (int)num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6177 *str = skipwhite(*str + len);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6178 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6179 else if (!first) /* no number given at all */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6180 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6181 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6182 else if (first) /* only one number given */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6183 *num2 = *num1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6184 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6185 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6186 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6188 #if defined(FEAT_CMDHIST) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6189 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6190 * :history command - print a history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6191 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6192 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6193 ex_history(exarg_T *eap)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6194 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6195 histentry_T *hist;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6196 int histype1 = HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6197 int histype2 = HIST_CMD;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6198 int hisidx1 = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6199 int hisidx2 = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6200 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6201 int i, j, k;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6202 char_u *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6203 char_u *arg = eap->arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6204
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6205 if (hislen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6206 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6207 MSG(_("'history' option is zero"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6208 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6209 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6210
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6211 if (!(VIM_ISDIGIT(*arg) || *arg == '-' || *arg == ','))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6212 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6213 end = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6214 while (ASCII_ISALPHA(*end)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6215 || vim_strchr((char_u *)":=@>/?", *end) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6216 end++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6217 i = *end;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6218 *end = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6219 histype1 = get_histtype(arg);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6220 if (histype1 == -1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6221 {
1853
96445585f1d9 updated for version 7.2-151
vimboss
parents: 1845
diff changeset
6222 if (STRNICMP(arg, "all", STRLEN(arg)) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6224 histype1 = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6225 histype2 = HIST_COUNT-1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6226 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6227 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6228 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6229 *end = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6230 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6231 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6232 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6233 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6234 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6235 histype2 = histype1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6236 *end = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6237 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6238 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6239 end = arg;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6240 if (!get_list_range(&end, &hisidx1, &hisidx2) || *end != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6242 EMSG(_(e_trailing));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6243 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6246 for (; !got_int && histype1 <= histype2; ++histype1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6247 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6248 STRCPY(IObuff, "\n # ");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6249 STRCAT(STRCAT(IObuff, history_names[histype1]), " history");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6250 MSG_PUTS_TITLE(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6251 idx = hisidx[histype1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6252 hist = history[histype1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6253 j = hisidx1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6254 k = hisidx2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6255 if (j < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6256 j = (-j > hislen) ? 0 : hist[(hislen+j+idx+1) % hislen].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6257 if (k < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6258 k = (-k > hislen) ? 0 : hist[(hislen+k+idx+1) % hislen].hisnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6259 if (idx >= 0 && j <= k)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6260 for (i = idx + 1; !got_int; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6261 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6262 if (i == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6263 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6264 if (hist[i].hisstr != NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6265 && hist[i].hisnum >= j && hist[i].hisnum <= k)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6266 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6267 msg_putchar('\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6268 sprintf((char *)IObuff, "%c%6d ", i == idx ? '>' : ' ',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6269 hist[i].hisnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6270 if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6271 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
6272 (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6273 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6274 STRCAT(IObuff, hist[i].hisstr);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6275 msg_outtrans(IObuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6276 out_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6277 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6278 if (i == idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6279 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6280 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6281 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6282 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6283 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6285 #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
6286 /*
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6287 * 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
6288 */
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6289 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
6290 {NULL, NULL, NULL, NULL, NULL};
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6291 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
6292 static int viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0, 0};
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6293 static int viminfo_add_at_front = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6294
7801
a1e71a01dbd6 commit https://github.com/vim/vim/commit/d25c16e2f2776d50245bf31d6e4d5364f12d188e
Christian Brabandt <cb@256bit.org>
parents: 7447
diff changeset
6295 static int hist_type2char(int type, int use_question);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6296
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6297 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6298 * Translate a history type number to the associated character.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6299 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6300 static int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6301 hist_type2char(
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6302 int type,
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6303 int use_question) /* use '?' instead of '/' */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6304 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6305 if (type == HIST_CMD)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6306 return ':';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6307 if (type == HIST_SEARCH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6308 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6309 if (use_question)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6310 return '?';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6311 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6312 return '/';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6313 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6314 if (type == HIST_EXPR)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6315 return '=';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6316 return '@';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6317 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6319 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6320 * Prepare for reading the history from the viminfo file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6321 * This allocates history arrays to store the read history lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6322 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6323 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6324 prepare_viminfo_history(int asklen, int writing)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6325 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6326 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6327 int num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6328 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6329 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6330
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6331 init_history();
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6332 viminfo_add_at_front = (asklen != 0 && !writing);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6333 if (asklen > hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6334 asklen = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6336 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6337 {
4258
9945fe0536a3 updated for version 7.3.880
Bram Moolenaar <bram@vim.org>
parents: 4242
diff changeset
6338 /* 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
6339 * 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
6340 * more spaces available than we request, then fill them up. */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6341 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
6342 if (history[type][i].hisstr == NULL || history[type][i].viminfo)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6343 num++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6344 len = asklen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6345 if (num > len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6346 len = num;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6347 if (len <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6348 viminfo_history[type] = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6349 else
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6350 viminfo_history[type] = (histentry_T *)lalloc(
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6351 (long_u)(len * sizeof(histentry_T)), FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6352 if (viminfo_history[type] == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6353 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6354 viminfo_hislen[type] = len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6355 viminfo_hisidx[type] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6356 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6357 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6358
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6359 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6360 * 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
6361 * new.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6362 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6363 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6364 read_viminfo_history(vir_T *virp, int writing)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6365 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6366 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6367 long_u len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6368 char_u *val;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6369 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6370
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6371 type = hist_char2type(virp->vir_line[0]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6372 if (viminfo_hisidx[type] < viminfo_hislen[type])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6373 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6374 val = viminfo_readstring(virp, 1, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6375 if (val != NULL && *val != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6376 {
3316
7b17a38eb223 updated for version 7.3.425
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
6377 int sep = (*val == ' ' ? NUL : *val);
7b17a38eb223 updated for version 7.3.425
Bram Moolenaar <bram@vim.org>
parents: 3290
diff changeset
6378
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6379 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
6380 viminfo_add_at_front, sep, writing))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6381 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6382 /* Need to re-allocate to append the separator byte. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6383 len = STRLEN(val);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6384 p = lalloc(len + 2, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6385 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6387 if (type == HIST_SEARCH)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6389 /* Search entry: Move the separator from the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6390 * column to after the NUL. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6391 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
6392 p[len] = sep;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6393 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6394 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6395 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6396 /* Not a search entry: No separator in the viminfo
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6397 * file, add a NUL separator. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6398 mch_memmove(p, val, (size_t)len + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6399 p[len + 1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6400 }
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6401 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
6402 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
6403 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
6404 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
6405 viminfo_hisidx[type]++;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6406 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6407 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6408 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6409 vim_free(val);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6410 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6411 return viminfo_readline(virp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6412 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6413
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6414 /*
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6415 * 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
6416 * array when it's new.
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6417 */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6418 void
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6419 handle_viminfo_history(
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6420 garray_T *values,
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6421 int writing)
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6422 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6423 int type;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6424 long_u len;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6425 char_u *val;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6426 char_u *p;
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6427 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
6428
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6429 /* Check the format:
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6430 * |{bartype},{histtype},{timestamp},{separator},"text" */
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6431 if (values->ga_len < 4
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6432 || vp[0].bv_type != BVAL_NR
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6433 || vp[1].bv_type != BVAL_NR
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6434 || (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
6435 || 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
6436 return;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6437
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6438 type = vp[0].bv_nr;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6439 if (type >= HIST_COUNT)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6440 return;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6441 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
6442 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6443 val = vp[3].bv_string;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6444 if (val != NULL && *val != NUL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6445 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6446 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
6447 ? vp[2].bv_nr : NUL;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6448 int idx;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6449 int overwrite = FALSE;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6450
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6451 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
6452 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6453 /* 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
6454 * 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
6455 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
6456 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6457 p = viminfo_history[type][idx].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6458 if (STRCMP(val, p) == 0
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6459 && (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
6460 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6461 overwrite = TRUE;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6462 break;
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 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6465
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6466 if (!overwrite)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6467 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6468 /* 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
6469 len = vp[3].bv_len;
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6470 p = lalloc(len + 2, TRUE);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6471 }
9301
c3805fb080a6 commit https://github.com/vim/vim/commit/72e697d189616265ecefe0df4509d476df3bae40
Christian Brabandt <cb@256bit.org>
parents: 9287
diff changeset
6472 else
c3805fb080a6 commit https://github.com/vim/vim/commit/72e697d189616265ecefe0df4509d476df3bae40
Christian Brabandt <cb@256bit.org>
parents: 9287
diff changeset
6473 len = 0; /* for picky compilers */
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6474 if (p != NULL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6475 {
9272
f5d9eb512f8b commit https://github.com/vim/vim/commit/46bbb0c4ba27395859dfeaa26938483946bb4ec2
Christian Brabandt <cb@256bit.org>
parents: 9270
diff changeset
6476 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
6477 if (!overwrite)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6478 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6479 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
6480 /* Put the separator after the NUL. */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6481 p[len + 1] = sep;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6482 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
6483 viminfo_history[type][idx].hisnum = 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6484 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
6485 viminfo_hisidx[type]++;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6486 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6487 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6488 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6489 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6490 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6491 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6492
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6493 /*
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6494 * 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
6495 */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6496 static void
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6497 concat_history(int type)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6498 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6499 int idx;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6500 int i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6501
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6502 idx = hisidx[type] + viminfo_hisidx[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6503 if (idx >= hislen)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6504 idx -= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6505 else if (idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6506 idx = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6507 if (viminfo_add_at_front)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6508 hisidx[type] = idx;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6509 else
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 if (hisidx[type] == -1)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6512 hisidx[type] = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6513 do
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6514 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6515 if (history[type][idx].hisstr != NULL
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6516 || history[type][idx].viminfo)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6517 break;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6518 if (++idx == hislen)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6519 idx = 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6520 } while (idx != hisidx[type]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6521 if (idx != hisidx[type] && --idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6522 idx = hislen - 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6523 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6524 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
6525 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6526 vim_free(history[type][idx].hisstr);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6527 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
6528 history[type][idx].viminfo = TRUE;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6529 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
6530 if (--idx < 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6531 idx = hislen - 1;
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 idx += 1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6534 idx %= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6535 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
6536 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6537 history[type][idx++].hisnum = ++hisnum[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6538 idx %= hislen;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6539 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6540 }
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 #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
6543 static int
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6544 #ifdef __BORLANDC__
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6545 _RTLENTRYF
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6546 #endif
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6547 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
6548 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6549 histentry_T *p1 = *(histentry_T **)s1;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6550 histentry_T *p2 = *(histentry_T **)s2;
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 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
6553 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
6554 return 0;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6555 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6556 #endif
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6557
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 * 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
6560 * timestamp;
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 static void
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6563 merge_history(int type)
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 int max_len;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6566 histentry_T **tot_hist;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6567 histentry_T *new_hist;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6568 int i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6569 int len;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6570
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6571 /* 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
6572 max_len = hislen + viminfo_hisidx[type];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6573 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
6574 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
6575 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
6576 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6577 vim_free(tot_hist);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6578 vim_free(new_hist);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6579 return;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6580 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6581 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
6582 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
6583 len = i;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6584 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6585 if (history[type][i].hisstr != NULL)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6586 tot_hist[len++] = &history[type][i];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6587
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6588 /* Sort the list on timestamp. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6589 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
6590
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6591 /* Keep the newest ones. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6592 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6593 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6594 if (i < len)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6595 {
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6596 new_hist[i] = *tot_hist[i];
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6597 tot_hist[i]->hisstr = NULL;
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6598 if (new_hist[i].hisnum == 0)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6599 new_hist[i].hisnum = ++hisnum[type];
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 else
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6602 clear_hist_entry(&new_hist[i]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6603 }
9287
af25a1a875db commit https://github.com/vim/vim/commit/a890f5e34887bff7616bdb4b9ee0bf98c8d2a8f0
Christian Brabandt <cb@256bit.org>
parents: 9272
diff changeset
6604 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
6605
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6606 /* Free what is not kept. */
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6607 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
6608 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
6609 for (i = 0; i < hislen; i++)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6610 vim_free(history[type][i].hisstr);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6611 vim_free(history[type]);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6612 history[type] = new_hist;
9270
79cb08f0d812 commit https://github.com/vim/vim/commit/62f8b4e18014b259bcde4a2845c602b0a44a3714
Christian Brabandt <cb@256bit.org>
parents: 9256
diff changeset
6613 vim_free(tot_hist);
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6614 }
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6615
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6616 /*
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6617 * 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
6618 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6619 void
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6620 finish_viminfo_history(vir_T *virp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6621 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6622 int type;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6623 int merge = virp->vir_version >= VIMINFO_VERSION_WITH_HISTORY;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6624
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6625 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6626 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6627 if (history[type] == NULL)
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6628 continue;
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6629
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6630 if (merge)
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6631 merge_history(type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6632 else
9256
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6633 concat_history(type);
26c7bf23ec1d commit https://github.com/vim/vim/commit/1fd99c1ca89a3d13bb53aff4a5a8f5ee740713e5
Christian Brabandt <cb@256bit.org>
parents: 9240
diff changeset
6634
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6635 vim_free(viminfo_history[type]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6636 viminfo_history[type] = NULL;
4327
0d3573091d42 updated for version 7.3.913
Bram Moolenaar <bram@vim.org>
parents: 4311
diff changeset
6637 viminfo_hisidx[type] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6638 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6640
4903
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6641 /*
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6642 * Write history to viminfo file in "fp".
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6643 * 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
6644 * file, data is in viminfo_history[].
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6645 * 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
6646 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6647 void
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6648 write_viminfo_history(FILE *fp, int merge)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6649 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6650 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6651 int type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6652 int num_saved;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6653 int round;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6654
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6655 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6656 if (hislen == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6657 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6658 for (type = 0; type < HIST_COUNT; ++type)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6659 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6660 num_saved = get_viminfo_parameter(hist_type2char(type, FALSE));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6661 if (num_saved == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6662 continue;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6663 if (num_saved < 0) /* Use default */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6664 num_saved = hislen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6665 fprintf(fp, _("\n# %s History (newest to oldest):\n"),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6666 type == HIST_CMD ? _("Command Line") :
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6667 type == HIST_SEARCH ? _("Search String") :
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6668 type == HIST_EXPR ? _("Expression") :
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6669 type == HIST_INPUT ? _("Input Line") :
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6670 _("Debug Line"));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6671 if (num_saved > hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6672 num_saved = hislen;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6673
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6674 /*
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6675 * Merge typed and viminfo history:
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6676 * round 1: history of typed commands.
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6677 * round 2: history from recently read viminfo.
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6678 */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6679 for (round = 1; round <= 2; ++round)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6680 {
4307
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6681 if (round == 1)
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6682 /* start at newest entry, somewhere in the list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6683 i = hisidx[type];
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6684 else if (viminfo_hisidx[type] > 0)
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6685 /* start at newest entry, first in the list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6686 i = 0;
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6687 else
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6688 /* empty list */
166b3df562ea updated for version 7.3.903
Bram Moolenaar <bram@vim.org>
parents: 4285
diff changeset
6689 i = -1;
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6690 if (i >= 0)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6691 while (num_saved > 0
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6692 && !(round == 2 && i >= viminfo_hisidx[type]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6693 {
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6694 char_u *p;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6695 time_t timestamp;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6696 int c = NUL;
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 if (round == 1)
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 p = history[type][i].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6701 timestamp = history[type][i].time_set;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6702 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6703 else
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6704 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6705 p = viminfo_history[type] == NULL ? NULL
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6706 : viminfo_history[type][i].hisstr;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6707 timestamp = viminfo_history[type] == NULL ? 0
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6708 : viminfo_history[type][i].time_set;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6709 }
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6710
4903
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6711 if (p != NULL && (round == 2
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6712 || !merge
2fc1f3346bfb updated for version 7.3.1197
Bram Moolenaar <bram@vim.org>
parents: 4805
diff changeset
6713 || !history[type][i].viminfo))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6714 {
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6715 --num_saved;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6716 fputc(hist_type2char(type, TRUE), fp);
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6717 /* 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
6718 * 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
6719 if (type == HIST_SEARCH)
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 c = p[STRLEN(p) + 1];
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6722 putc(c == NUL ? ' ' : c, fp);
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6723 }
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6724 viminfo_writestring(fp, p);
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6725
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6726 {
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6727 char cbuf[NUMBUFLEN];
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6728
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6729 /* 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
6730 * |{bartype},{histtype},{timestamp},{separator},"text" */
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6731 if (c == NUL)
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6732 cbuf[0] = NUL;
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6733 else
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6734 sprintf(cbuf, "%d", c);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6735 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
6736 type, (long)timestamp, cbuf);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6737 barline_writestring(fp, p, LSIZE - 20);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6738 putc('\n', fp);
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6739 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6740 }
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6741 if (round == 1)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6742 {
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6743 /* 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
6744 * the start. */
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6745 if (--i < 0)
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6746 i = hislen - 1;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6747 if (i == hisidx[type])
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6748 break;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6749 }
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6750 else
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6751 {
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6752 /* 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
6753 ++i;
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6754 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6755 }
4283
1dc160bf2488 updated for version 7.3.891
Bram Moolenaar <bram@vim.org>
parents: 4265
diff changeset
6756 }
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6757 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
6758 if (viminfo_history[type] != NULL)
9240
636cfa97200e commit https://github.com/vim/vim/commit/45d2eeaad66939348893b9254171067b0457cd9d
Christian Brabandt <cb@256bit.org>
parents: 9070
diff changeset
6759 vim_free(viminfo_history[type][i].hisstr);
4285
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6760 vim_free(viminfo_history[type]);
6c2e8074ea25 updated for version 7.3.892
Bram Moolenaar <bram@vim.org>
parents: 4283
diff changeset
6761 viminfo_history[type] = NULL;
4311
8e1d1da398b3 updated for version 7.3.905
Bram Moolenaar <bram@vim.org>
parents: 4307
diff changeset
6762 viminfo_hisidx[type] = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6763 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6764 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6765 #endif /* FEAT_VIMINFO */
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_FKMAP) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6768 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6769 * Write a character at the current cursor+offset position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6770 * It is directly written into the command buffer block.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6771 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6772 void
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6773 cmd_pchar(int c, int offset)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6774 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6775 if (ccline.cmdpos + offset >= ccline.cmdlen || ccline.cmdpos + offset < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6777 EMSG(_("E198: cmd_pchar beyond the command length"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6778 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6779 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6780 ccline.cmdbuff[ccline.cmdpos + offset] = (char_u)c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6781 ccline.cmdbuff[ccline.cmdlen] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6782 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6783
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6784 int
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
6785 cmd_gchar(int offset)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6786 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6787 if (ccline.cmdpos + offset >= ccline.cmdlen || ccline.cmdpos + offset < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6788 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6789 /* EMSG(_("cmd_gchar beyond the command length")); */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6790 return NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6791 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6792 return (int)ccline.cmdbuff[ccline.cmdpos + offset];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6794 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6796 #if defined(FEAT_CMDWIN) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6797 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6798 * Open a window on the current command line and history. Allow editing in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6799 * the window. Returns when the window is closed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6800 * Returns:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6801 * CR if the command is to be executed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6802 * Ctrl_C if it is to be abandoned
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6803 * K_IGNORE if editing continues
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6804 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6805 static int
11321
f57dce6b934b patch 8.0.0546: swap file exists briefly when opening the command window
Christian Brabandt <cb@256bit.org>
parents: 11285
diff changeset
6806 open_cmdwin(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6807 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6808 struct cmdline_info save_ccline;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6809 bufref_T old_curbuf;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6810 win_T *old_curwin = curwin;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6811 bufref_T bufref;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6812 win_T *wp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6813 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6814 linenr_T lnum;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6815 int histtype;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6816 garray_T winsizes;
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
6817 #ifdef FEAT_AUTOCMD
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6818 char_u typestr[2];
1685
7015ddf81055 updated for version 7.2b-018
vimboss
parents: 1621
diff changeset
6819 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6820 int save_restart_edit = restart_edit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6821 int save_State = State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6822 int save_exmode = exmode_active;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6823 #ifdef FEAT_RIGHTLEFT
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6824 int save_cmdmsg_rl = cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6825 #endif
6145
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6826 #ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6827 int save_KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6828 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6830 /* Can't do this recursively. Can't do it when typing a password. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6831 if (cmdwin_type != 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6832 # if defined(FEAT_CRYPT) || defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6833 || cmdline_star > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6834 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6835 )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6836 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6837 beep_flush();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6838 return K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6839 }
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6840 set_bufref(&old_curbuf, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6841
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6842 /* Save current window sizes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6843 win_size_save(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6844
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6845 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6846 /* Don't execute autocommands while creating the window. */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6847 block_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6848 # endif
683
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6849 /* don't use a new tab page */
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6850 cmdmod.tab = 0;
11321
f57dce6b934b patch 8.0.0546: swap file exists briefly when opening the command window
Christian Brabandt <cb@256bit.org>
parents: 11285
diff changeset
6851 cmdmod.noswapfile = 1;
683
a39b8af64334 updated for version 7.0205
vimboss
parents: 634
diff changeset
6852
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6853 /* Create a window for the command-line buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6854 if (win_split((int)p_cwh, WSP_BOT) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6855 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6856 beep_flush();
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6857 # ifdef FEAT_AUTOCMD
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6858 unblock_autocmds();
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6859 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6860 return K_IGNORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6861 }
1831
eb1ce51c1cb0 updated for version 7.2-129
vimboss
parents: 1754
diff changeset
6862 cmdwin_type = get_cmdline_type();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6863
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6864 /* Create the command-line buffer empty. */
1743
734d5bdae499 updated for version 7.2-041
vimboss
parents: 1718
diff changeset
6865 (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1612
diff changeset
6866 (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6867 set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6868 curbuf->b_p_ma = TRUE;
1865
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6869 #ifdef FEAT_FOLDING
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6870 curwin->w_p_fen = FALSE;
53b47a10825a updated for version 7.2-163
vimboss
parents: 1853
diff changeset
6871 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6872 # ifdef FEAT_RIGHTLEFT
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6873 curwin->w_p_rl = cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6874 cmdmsg_rl = FALSE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6875 # endif
2583
7c2e6ba1d702 updated for version 7.3.008
Bram Moolenaar <bram@vim.org>
parents: 2559
diff changeset
6876 RESET_BINDING(curwin);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6877
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6878 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6879 /* Do execute autocommands for setting the filetype (load syntax). */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
6880 unblock_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6881 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6882
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6883 /* Showing the prompt may have set need_wait_return, reset it. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6884 need_wait_return = FALSE;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6885
1831
eb1ce51c1cb0 updated for version 7.2-129
vimboss
parents: 1754
diff changeset
6886 histtype = hist_char2type(cmdwin_type);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6887 if (histtype == HIST_CMD || histtype == HIST_DEBUG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6888 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6889 if (p_wc == TAB)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6890 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6891 add_map((char_u *)"<buffer> <Tab> <C-X><C-V>", INSERT);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6892 add_map((char_u *)"<buffer> <Tab> a<C-X><C-V>", NORMAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6893 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6894 set_option_value((char_u *)"ft", 0L, (char_u *)"vim", OPT_LOCAL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6895 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6896
10
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6897 /* Reset 'textwidth' after setting 'filetype' (the Vim filetype plugin
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6898 * sets 'textwidth' to 78). */
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6899 curbuf->b_p_tw = 0;
4e2284e71352 updated for version 7.0002
vimboss
parents: 7
diff changeset
6900
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6901 /* Fill the buffer with the history. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6902 init_history();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6903 if (hislen > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6904 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6905 i = hisidx[histtype];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6906 if (i >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6907 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6908 lnum = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6909 do
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6910 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6911 if (++i == hislen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6912 i = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6913 if (history[histtype][i].hisstr != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6914 ml_append(lnum++, history[histtype][i].hisstr,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6915 (colnr_T)0, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6916 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6917 while (i != hisidx[histtype]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6918 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6919 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6921 /* Replace the empty last line with the current command-line and put the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6922 * cursor there. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6923 ml_replace(curbuf->b_ml.ml_line_count, ccline.cmdbuff, TRUE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6924 curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6925 curwin->w_cursor.col = ccline.cmdpos;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6926 changed_line_abv_curs();
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6927 invalidate_botline();
743
afac7b58ed46 updated for version 7.0222
vimboss
parents: 719
diff changeset
6928 redraw_later(SOME_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6929
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6930 /* Save the command line info, can be used recursively. */
10565
ea0dadb041c9 patch 8.0.0172: command line window does not work
Christian Brabandt <cb@256bit.org>
parents: 10542
diff changeset
6931 save_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6932
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6933 /* No Ex mode here! */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6934 exmode_active = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6935
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6936 State = NORMAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6937 # ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6938 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6939 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6940
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6941 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6942 /* Trigger CmdwinEnter autocommands. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6943 typestr[0] = cmdwin_type;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6944 typestr[1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6945 apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
929
2448f4c8afc6 updated for version 7.0-055
vimboss
parents: 856
diff changeset
6946 if (restart_edit != 0) /* autocmd with ":startinsert" */
2448f4c8afc6 updated for version 7.0-055
vimboss
parents: 856
diff changeset
6947 stuffcharReadbuff(K_NOP);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6948 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6949
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6950 i = RedrawingDisabled;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6951 RedrawingDisabled = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6952
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6953 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6954 * Call the main loop until <CR> or CTRL-C is typed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6955 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6956 cmdwin_result = 0;
168
4d9eabb1396e updated for version 7.0051
vimboss
parents: 164
diff changeset
6957 main_loop(TRUE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6958
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6959 RedrawingDisabled = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6961 # ifdef FEAT_AUTOCMD
6145
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6962
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6963 # ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6964 save_KeyTyped = KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6965 # endif
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6966
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6967 /* Trigger CmdwinLeave autocommands. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6968 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
6969
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6970 # ifdef FEAT_FOLDING
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6971 /* 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
6972 KeyTyped = save_KeyTyped;
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6973 # endif
2fd550c75256 updated for version 7.4.410
Bram Moolenaar <bram@vim.org>
parents: 5995
diff changeset
6974
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6975 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6976
1214
a91a2e0c4108 updated for version 7.1b
vimboss
parents: 1039
diff changeset
6977 /* Restore the command line info. */
10565
ea0dadb041c9 patch 8.0.0172: command line window does not work
Christian Brabandt <cb@256bit.org>
parents: 10542
diff changeset
6978 restore_cmdline(&save_ccline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6979 cmdwin_type = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6980
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6981 exmode_active = save_exmode;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6982
1612
3c251a30c8cc updated for version 7.1-325
vimboss
parents: 1606
diff changeset
6983 /* 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
6984 * this happens! */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
6985 if (!win_valid(old_curwin) || !bufref_valid(&old_curbuf))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6986 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6987 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6988 EMSG(_("E199: Active window or buffer deleted"));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6989 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6990 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6991 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6992 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6993 /* autocmds may abort script processing */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6994 if (aborting() && cmdwin_result != K_IGNORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6995 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6996 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6997 /* Set the new command line from the cmdline buffer. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6998 vim_free(ccline.cmdbuff);
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
6999 if (cmdwin_result == K_XF1 || cmdwin_result == K_XF2) /* :qa[!] typed */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7000 {
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7001 char *p = (cmdwin_result == K_XF2) ? "qa" : "qa!";
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7002
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7003 if (histtype == HIST_CMD)
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7004 {
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7005 /* Execute the command directly. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7006 ccline.cmdbuff = vim_strsave((char_u *)p);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7007 cmdwin_result = CAR;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7008 }
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7009 else
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7010 {
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7011 /* First need to cancel what we were doing. */
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7012 ccline.cmdbuff = NULL;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7013 stuffcharReadbuff(':');
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7014 stuffReadbuff((char_u *)p);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7015 stuffcharReadbuff(CAR);
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7016 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7017 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7018 else if (cmdwin_result == K_XF2) /* :qa typed */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7019 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7020 ccline.cmdbuff = vim_strsave((char_u *)"qa");
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7021 cmdwin_result = CAR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7022 }
2839
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7023 else if (cmdwin_result == Ctrl_C)
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7024 {
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7025 /* :q or :close, don't execute any command
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7026 * and don't modify the cmd window. */
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7027 ccline.cmdbuff = NULL;
e1c5f69de95b updated for version 7.3.193
Bram Moolenaar <bram@vim.org>
parents: 2778
diff changeset
7028 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7029 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7030 ccline.cmdbuff = vim_strsave(ml_get_curline());
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7031 if (ccline.cmdbuff == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7032 cmdwin_result = Ctrl_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7033 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7034 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7035 ccline.cmdlen = (int)STRLEN(ccline.cmdbuff);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7036 ccline.cmdbufflen = ccline.cmdlen + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7037 ccline.cmdpos = curwin->w_cursor.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7038 if (ccline.cmdpos > ccline.cmdlen)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7039 ccline.cmdpos = ccline.cmdlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7040 if (cmdwin_result == K_IGNORE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7041 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7042 set_cmdspos_cursor();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7043 redrawcmd();
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
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7047 # ifdef FEAT_AUTOCMD
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7048 /* Don't execute autocommands while deleting the window. */
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
7049 block_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7050 # endif
6876
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7051 # ifdef FEAT_CONCEAL
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7052 /* Avoid command-line window first character being concealed. */
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7053 curwin->w_p_cole = 0;
4ece46045a5a patch 7.4.758
Bram Moolenaar <bram@vim.org>
parents: 6733
diff changeset
7054 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7055 wp = curwin;
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7056 set_bufref(&bufref, curbuf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7057 win_goto(old_curwin);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7058 win_close(wp, TRUE);
2099
c1f67ce5740a updated for version 7.2.382
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7059
c1f67ce5740a updated for version 7.2.382
Bram Moolenaar <bram@zimbu.org>
parents: 2097
diff changeset
7060 /* 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
7061 * set to 'wipe' */
9487
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7062 if (bufref_valid(&bufref))
69ed2c9d34a6 commit https://github.com/vim/vim/commit/7c0a2f367f2507669560b1a66423155c70d2e75b
Christian Brabandt <cb@256bit.org>
parents: 9389
diff changeset
7063 close_buffer(NULL, bufref.br_buf, DOBUF_WIPE, FALSE);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7064
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7065 /* Restore window sizes. */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7066 win_size_restore(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7067
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7068 # ifdef FEAT_AUTOCMD
1410
cdd82acd75b4 updated for version 7.1-125
vimboss
parents: 1389
diff changeset
7069 unblock_autocmds();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7070 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7071 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7072
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7073 ga_clear(&winsizes);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7074 restart_edit = save_restart_edit;
510
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7075 # ifdef FEAT_RIGHTLEFT
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7076 cmdmsg_rl = save_cmdmsg_rl;
b47114409935 updated for version 7.0143
vimboss
parents: 507
diff changeset
7077 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7078
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7079 State = save_State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7080 # ifdef FEAT_MOUSE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7081 setmouse();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7082 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7083
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7084 return cmdwin_result;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7085 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7086 #endif /* FEAT_CMDWIN */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7087
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7088 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7089 * Used for commands that either take a simple command string argument, or:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7090 * cmd << endmarker
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7091 * {script}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7092 * endmarker
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7093 * Returns a pointer to allocated memory with {script} or NULL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7094 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7095 char_u *
7819
f86adafb28d4 commit https://github.com/vim/vim/commit/78c0b7d43e5048fd71d12816659667834170c76d
Christian Brabandt <cb@256bit.org>
parents: 7807
diff changeset
7096 script_get(exarg_T *eap, char_u *cmd)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7097 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7098 char_u *theline;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7099 char *end_pattern = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7100 char dot[] = ".";
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7101 garray_T ga;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7102
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7103 if (cmd[0] != '<' || cmd[1] != '<' || eap->getline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7104 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7105
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7106 ga_init2(&ga, 1, 0x400);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7107
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7108 if (cmd[2] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7109 end_pattern = (char *)skipwhite(cmd + 2);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7110 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7111 end_pattern = dot;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7113 for (;;)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7114 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7115 theline = eap->getline(
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7116 #ifdef FEAT_EVAL
75
388f285bda1b updated for version 7.0031
vimboss
parents: 42
diff changeset
7117 eap->cstack->cs_looplevel > 0 ? -1 :
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7118 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7119 NUL, eap->cookie, 0);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7121 if (theline == NULL || STRCMP(end_pattern, theline) == 0)
1694
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7122 {
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7123 vim_free(theline);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7124 break;
1694
3c6417b7e6ef updated for version 7.2b-027
vimboss
parents: 1685
diff changeset
7125 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7126
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7127 ga_concat(&ga, theline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7128 ga_append(&ga, '\n');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7129 vim_free(theline);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7130 }
21
db5102f7e29f updated for version 7.0013
vimboss
parents: 15
diff changeset
7131 ga_append(&ga, NUL);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7133 return (char_u *)ga.ga_data;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7134 }
9971
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7135
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7136 #ifdef FEAT_SEARCH_EXTRA
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7137 static void
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7138 set_search_match(pos_T *t)
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7139 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7140 /*
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7141 * 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
7142 * 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
7143 */
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7144 t->lnum += search_match_lines;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7145 t->col = search_match_endcol;
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7146 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
7147 {
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7148 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
7149 coladvance((colnr_T)MAXCOL);
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7150 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7151 }
98b39d2eb895 commit https://github.com/vim/vim/commit/4d6f32cbfbaf324ac4a25c0206a5db0e9f7a48f7
Christian Brabandt <cb@256bit.org>
parents: 9487
diff changeset
7152 #endif