Mercurial > vim
annotate src/cmdexpand.c @ 31190:02b719cd27c6 v9.0.0929
patch 9.0.0929: build failure with tiny version
Commit: https://github.com/vim/vim/commit/0b6d6a186e961faa5b9058406234ffd93a7e6688
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Nov 23 14:33:01 2022 +0000
patch 9.0.0929: build failure with tiny version
Problem: Build failure with tiny version. (Tony Mechelynck)
Solution: Add #ifdef.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Nov 2022 15:45:04 +0100 |
parents | 4f709e5f24d2 |
children | a6b1f1c22374 |
rev | line source |
---|---|
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
8 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
9 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
10 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
11 * cmdexpand.c: functions for command-line completion |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
12 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
13 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
14 #include "vim.h" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
15 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
16 static int cmd_showtail; // Only show path tail in lists ? |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
17 |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
18 static int ExpandGeneric(char_u *pat, expand_T *xp, regmatch_T *regmatch, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
19 char_u ***matches, int *numMatches, |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
20 char_u *((*func)(expand_T *, int)), int escaped); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
21 static int ExpandFromContext(expand_T *xp, char_u *, char_u ***, int *, int); |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
22 static char_u *showmatches_gettail(char_u *s); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
23 static int expand_showtail(expand_T *xp); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
24 static int expand_shellcmd(char_u *filepat, char_u ***matches, int *numMatches, int flagsarg); |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17779
diff
changeset
|
25 #if defined(FEAT_EVAL) |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
26 static int ExpandUserDefined(char_u *pat, expand_T *xp, regmatch_T *regmatch, char_u ***matches, int *numMatches); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
27 static int ExpandUserList(expand_T *xp, char_u ***matches, int *numMatches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
28 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
29 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
30 // "compl_match_array" points the currently displayed list of entries in the |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
31 // popup menu. It is NULL when there is no popup menu. |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
32 static pumitem_T *compl_match_array = NULL; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
33 static int compl_match_arraysize; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
34 // First column in cmdline of the matched item for completion. |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
35 static int compl_startcol; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
36 static int compl_selected; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
37 |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
38 #define SHOW_FILE_TEXT(m) (showtail ? showmatches_gettail(matches[m]) : matches[m]) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
39 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
40 /* |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
41 * Returns TRUE if fuzzy completion is supported for a given cmdline completion |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
42 * context. |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
43 */ |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
44 static int |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
45 cmdline_fuzzy_completion_supported(expand_T *xp) |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
46 { |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
47 return (vim_strchr(p_wop, WOP_FUZZY) != NULL |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
48 && xp->xp_context != EXPAND_BOOL_SETTINGS |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
49 && xp->xp_context != EXPAND_COLORS |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
50 && xp->xp_context != EXPAND_COMPILER |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
51 && xp->xp_context != EXPAND_DIRECTORIES |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
52 && xp->xp_context != EXPAND_FILES |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
53 && xp->xp_context != EXPAND_FILES_IN_PATH |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
54 && xp->xp_context != EXPAND_FILETYPE |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
55 && xp->xp_context != EXPAND_HELP |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
56 && xp->xp_context != EXPAND_OLD_SETTING |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
57 && xp->xp_context != EXPAND_OWNSYNTAX |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
58 && xp->xp_context != EXPAND_PACKADD |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
59 && xp->xp_context != EXPAND_SHELLCMD |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
60 && xp->xp_context != EXPAND_TAGS |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
61 && xp->xp_context != EXPAND_TAGS_LISTFILES |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
62 && xp->xp_context != EXPAND_USER_LIST); |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
63 } |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
64 |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
65 /* |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
66 * Returns TRUE if fuzzy completion for cmdline completion is enabled and |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
67 * 'fuzzystr' is not empty. If search pattern is empty, then don't use fuzzy |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
68 * matching. |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
69 */ |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
70 int |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
71 cmdline_fuzzy_complete(char_u *fuzzystr) |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
72 { |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
73 return vim_strchr(p_wop, WOP_FUZZY) != NULL && *fuzzystr != NUL; |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
74 } |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
75 |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
76 /* |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
77 * sort function for the completion matches. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
78 * <SNR> functions should be sorted to the end. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
79 */ |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
80 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
81 sort_func_compare(const void *s1, const void *s2) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
82 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
83 char_u *p1 = *(char_u **)s1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
84 char_u *p2 = *(char_u **)s2; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
85 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
86 if (*p1 != '<' && *p2 == '<') return -1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
87 if (*p1 == '<' && *p2 != '<') return 1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
88 return STRCMP(p1, p2); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
89 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
90 |
27680
38eab98ef5a9
patch 8.2.4366: not enough tests for command line completion
Bram Moolenaar <Bram@vim.org>
parents:
27661
diff
changeset
|
91 /* |
38eab98ef5a9
patch 8.2.4366: not enough tests for command line completion
Bram Moolenaar <Bram@vim.org>
parents:
27661
diff
changeset
|
92 * Escape special characters in the cmdline completion matches. |
38eab98ef5a9
patch 8.2.4366: not enough tests for command line completion
Bram Moolenaar <Bram@vim.org>
parents:
27661
diff
changeset
|
93 */ |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
94 static void |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
95 wildescape( |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
96 expand_T *xp, |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
97 char_u *str, |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
98 int numfiles, |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
99 char_u **files) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
100 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
101 char_u *p; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
102 int vse_what = xp->xp_context == EXPAND_BUFFERS |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
103 ? VSE_BUFFER : VSE_NONE; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
104 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
105 if (xp->xp_context == EXPAND_FILES |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
106 || xp->xp_context == EXPAND_FILES_IN_PATH |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
107 || xp->xp_context == EXPAND_SHELLCMD |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
108 || xp->xp_context == EXPAND_BUFFERS |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
109 || xp->xp_context == EXPAND_DIRECTORIES) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
110 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
111 // Insert a backslash into a file name before a space, \, %, # |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
112 // and wildmatch characters, except '~'. |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
113 for (int i = 0; i < numfiles; ++i) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
114 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
115 // for ":set path=" we need to escape spaces twice |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
116 if (xp->xp_backslash == XP_BS_THREE) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
117 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
118 p = vim_strsave_escaped(files[i], (char_u *)" "); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
119 if (p != NULL) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
120 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
121 vim_free(files[i]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
122 files[i] = p; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
123 #if defined(BACKSLASH_IN_FILENAME) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
124 p = vim_strsave_escaped(files[i], (char_u *)" "); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
125 if (p != NULL) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
126 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
127 vim_free(files[i]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
128 files[i] = p; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
129 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
130 #endif |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
131 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
132 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
133 #ifdef BACKSLASH_IN_FILENAME |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
134 p = vim_strsave_fnameescape(files[i], vse_what); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
135 #else |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
136 p = vim_strsave_fnameescape(files[i], |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
137 xp->xp_shell ? VSE_SHELL : vse_what); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
138 #endif |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
139 if (p != NULL) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
140 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
141 vim_free(files[i]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
142 files[i] = p; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
143 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
144 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
145 // If 'str' starts with "\~", replace "~" at start of |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
146 // files[i] with "\~". |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
147 if (str[0] == '\\' && str[1] == '~' && files[i][0] == '~') |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
148 escape_fname(&files[i]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
149 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
150 xp->xp_backslash = XP_BS_NONE; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
151 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
152 // If the first file starts with a '+' escape it. Otherwise it |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
153 // could be seen as "+cmd". |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
154 if (*files[0] == '+') |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
155 escape_fname(&files[0]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
156 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
157 else if (xp->xp_context == EXPAND_TAGS) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
158 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
159 // Insert a backslash before characters in a tag name that |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
160 // would terminate the ":tag" command. |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
161 for (int i = 0; i < numfiles; ++i) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
162 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
163 p = vim_strsave_escaped(files[i], (char_u *)"\\|\""); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
164 if (p != NULL) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
165 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
166 vim_free(files[i]); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
167 files[i] = p; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
168 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
169 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
170 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
171 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
172 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
173 /* |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
174 * Escape special characters in the cmdline completion matches. |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
175 */ |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
176 static void |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
177 ExpandEscape( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
178 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
179 char_u *str, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
180 int numfiles, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
181 char_u **files, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
182 int options) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
183 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
184 // May change home directory back to "~" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
185 if (options & WILD_HOME_REPLACE) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
186 tilde_replace(str, numfiles, files); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
187 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
188 if (options & WILD_ESCAPE) |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
189 wildescape(xp, str, numfiles, files); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
190 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
191 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
192 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
193 * Return FAIL if this is not an appropriate context in which to do |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
194 * completion of anything, return OK if it is (even if there are no matches). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
195 * For the caller, this means that the character is just passed through like a |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
196 * normal character (instead of being expanded). This allows :s/^I^D etc. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
197 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
198 int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
199 nextwild( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
200 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
201 int type, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
202 int options, // extra options for ExpandOne() |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
203 int escape) // if TRUE, escape the returned matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
204 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
205 cmdline_info_T *ccline = get_cmdline_info(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
206 int i, j; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
207 char_u *p1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
208 char_u *p2; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
209 int difflen; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
210 int v; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
211 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
212 if (xp->xp_numfiles == -1) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
213 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
214 set_expand_context(xp); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
215 cmd_showtail = expand_showtail(xp); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
216 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
217 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
218 if (xp->xp_context == EXPAND_UNSUCCESSFUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
219 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
220 beep_flush(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
221 return OK; // Something illegal on command line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
222 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
223 if (xp->xp_context == EXPAND_NOTHING) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
224 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
225 // Caller can use the character as a normal char instead |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
226 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
227 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
228 |
31097
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
229 // If cmd_silent is set then don't show the dots, because redrawcmd() below |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
230 // won't remove them. |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
231 if (!cmd_silent) |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
232 { |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
233 msg_puts("..."); // show that we are busy |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
234 out_flush(); |
4f709e5f24d2
patch 9.0.0883: a silent mapping may cause dots on the command line
Bram Moolenaar <Bram@vim.org>
parents:
31091
diff
changeset
|
235 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
236 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
237 i = (int)(xp->xp_pattern - ccline->cmdbuff); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
238 xp->xp_pattern_len = ccline->cmdpos - i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
239 |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
240 if (type == WILD_NEXT || type == WILD_PREV |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
241 || type == WILD_PAGEUP || type == WILD_PAGEDOWN) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
242 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
243 // Get next/previous match for a previous expanded pattern. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
244 p2 = ExpandOne(xp, NULL, NULL, 0, type); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
245 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
246 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
247 { |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
248 if (cmdline_fuzzy_completion_supported(xp)) |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
249 // If fuzzy matching, don't modify the search string |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
250 p1 = vim_strsave(xp->xp_pattern); |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
251 else |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
252 p1 = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context); |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
253 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
254 // Translate string into pattern and expand it. |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
255 if (p1 == NULL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
256 p2 = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
257 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
258 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
259 int use_options = options | |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
260 WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
261 if (escape) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
262 use_options |= WILD_ESCAPE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
263 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
264 if (p_wic) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
265 use_options += WILD_ICASE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
266 p2 = ExpandOne(xp, p1, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
267 vim_strnsave(&ccline->cmdbuff[i], xp->xp_pattern_len), |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
268 use_options, type); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
269 vim_free(p1); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
270 // longest match: make sure it is not shorter, happens with :help |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
271 if (p2 != NULL && type == WILD_LONGEST) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
272 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
273 for (j = 0; j < xp->xp_pattern_len; ++j) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
274 if (ccline->cmdbuff[i + j] == '*' |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
275 || ccline->cmdbuff[i + j] == '?') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
276 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
277 if ((int)STRLEN(p2) < j) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
278 VIM_CLEAR(p2); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
279 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
280 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
281 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
282 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
283 if (p2 != NULL && !got_int) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
284 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
285 difflen = (int)STRLEN(p2) - xp->xp_pattern_len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
286 if (ccline->cmdlen + difflen + 4 > ccline->cmdbufflen) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
287 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
288 v = realloc_cmdbuff(ccline->cmdlen + difflen + 4); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
289 xp->xp_pattern = ccline->cmdbuff + i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
290 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
291 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
292 v = OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
293 if (v == OK) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
294 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
295 mch_memmove(&ccline->cmdbuff[ccline->cmdpos + difflen], |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
296 &ccline->cmdbuff[ccline->cmdpos], |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
297 (size_t)(ccline->cmdlen - ccline->cmdpos + 1)); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
298 mch_memmove(&ccline->cmdbuff[i], p2, STRLEN(p2)); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
299 ccline->cmdlen += difflen; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
300 ccline->cmdpos += difflen; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
301 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
302 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
303 vim_free(p2); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
304 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
305 redrawcmd(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
306 cursorcmd(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
307 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
308 // When expanding a ":map" command and no matches are found, assume that |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
309 // the key is supposed to be inserted literally |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
310 if (xp->xp_context == EXPAND_MAPPINGS && p2 == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
311 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
312 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
313 if (xp->xp_numfiles <= 0 && p2 == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
314 beep_flush(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
315 else if (xp->xp_numfiles == 1) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
316 // free expanded pattern |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
317 (void)ExpandOne(xp, NULL, NULL, 0, WILD_FREE); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
318 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
319 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
320 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
321 |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
322 /* |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
323 * Create and display a cmdline completion popup menu with items from |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
324 * 'matches'. |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
325 */ |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
326 static int |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
327 cmdline_pum_create( |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
328 cmdline_info_T *ccline, |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
329 expand_T *xp, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
330 char_u **matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
331 int numMatches, |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
332 int showtail) |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
333 { |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
334 int i; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
335 int columns; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
336 |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
337 // Add all the completion matches |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
338 compl_match_arraysize = numMatches; |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
339 compl_match_array = ALLOC_MULT(pumitem_T, compl_match_arraysize); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
340 for (i = 0; i < numMatches; i++) |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
341 { |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
342 compl_match_array[i].pum_text = SHOW_FILE_TEXT(i); |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
343 compl_match_array[i].pum_info = NULL; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
344 compl_match_array[i].pum_extra = NULL; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
345 compl_match_array[i].pum_kind = NULL; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
346 } |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
347 |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
348 // Compute the popup menu starting column |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
349 compl_startcol = vim_strsize(ccline->cmdbuff) + 1; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
350 columns = vim_strsize(xp->xp_pattern); |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
351 if (showtail) |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
352 { |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
353 columns += vim_strsize(showmatches_gettail(matches[0])); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
354 columns -= vim_strsize(matches[0]); |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
355 } |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
356 if (columns >= compl_startcol) |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
357 compl_startcol = 0; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
358 else |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
359 compl_startcol -= columns; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
360 |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
361 // no default selection |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
362 compl_selected = -1; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
363 |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
364 cmdline_pum_display(); |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
365 |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
366 return EXPAND_OK; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
367 } |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
368 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
369 /* |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
370 * Display the cmdline completion matches in a popup menu |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
371 */ |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
372 void cmdline_pum_display(void) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
373 { |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
374 pum_display(compl_match_array, compl_match_arraysize, compl_selected); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
375 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
376 |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
377 /* |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
378 * Returns TRUE if the cmdline completion popup menu is being displayed. |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
379 */ |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
380 int cmdline_pum_active(void) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
381 { |
29794
5b46eb13e3bb
patch 9.0.0236: popup menu not removed when 'wildmenu' reset while visible
Bram Moolenaar <Bram@vim.org>
parents:
29784
diff
changeset
|
382 return pum_visible() && compl_match_array != NULL; |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
383 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
384 |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
385 /* |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
386 * Remove the cmdline completion popup menu (if present), free the list of |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
387 * items and refresh the screen. |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
388 */ |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
389 void cmdline_pum_remove(void) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
390 { |
27912
be9e6e0b1591
patch 8.2.4481: cmdline popup menu not removed when 'lazyredraw' is set
Bram Moolenaar <Bram@vim.org>
parents:
27908
diff
changeset
|
391 int save_p_lz = p_lz; |
28427
96d53065f309
patch 8.2.4738: Esc on commandline executes command instead of abandoning it
Bram Moolenaar <Bram@vim.org>
parents:
28415
diff
changeset
|
392 int save_KeyTyped = KeyTyped; |
27912
be9e6e0b1591
patch 8.2.4481: cmdline popup menu not removed when 'lazyredraw' is set
Bram Moolenaar <Bram@vim.org>
parents:
27908
diff
changeset
|
393 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
394 pum_undisplay(); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
395 VIM_CLEAR(compl_match_array); |
27912
be9e6e0b1591
patch 8.2.4481: cmdline popup menu not removed when 'lazyredraw' is set
Bram Moolenaar <Bram@vim.org>
parents:
27908
diff
changeset
|
396 p_lz = FALSE; // avoid the popup menu hanging around |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
397 update_screen(0); |
27912
be9e6e0b1591
patch 8.2.4481: cmdline popup menu not removed when 'lazyredraw' is set
Bram Moolenaar <Bram@vim.org>
parents:
27908
diff
changeset
|
398 p_lz = save_p_lz; |
27630
9caeb7f8b094
patch 8.2.4341: command line not redrawn when finishing popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
399 redrawcmd(); |
28427
96d53065f309
patch 8.2.4738: Esc on commandline executes command instead of abandoning it
Bram Moolenaar <Bram@vim.org>
parents:
28415
diff
changeset
|
400 |
96d53065f309
patch 8.2.4738: Esc on commandline executes command instead of abandoning it
Bram Moolenaar <Bram@vim.org>
parents:
28415
diff
changeset
|
401 // When a function is called (e.g. for 'foldtext') KeyTyped might be reset |
96d53065f309
patch 8.2.4738: Esc on commandline executes command instead of abandoning it
Bram Moolenaar <Bram@vim.org>
parents:
28415
diff
changeset
|
402 // as a side effect. |
96d53065f309
patch 8.2.4738: Esc on commandline executes command instead of abandoning it
Bram Moolenaar <Bram@vim.org>
parents:
28415
diff
changeset
|
403 KeyTyped = save_KeyTyped; |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
404 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
405 |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
406 void cmdline_pum_cleanup(cmdline_info_T *cclp) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
407 { |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
408 cmdline_pum_remove(); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
409 wildmenu_cleanup(cclp); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
410 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
411 |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
412 /* |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
413 * Returns the starting column number to use for the cmdline completion popup |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
414 * menu. |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
415 */ |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
416 int cmdline_compl_startcol(void) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
417 { |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
418 return compl_startcol; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
419 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
420 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
421 /* |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
422 * Return the number of characters that should be skipped in a status match. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
423 * These are backslashes used for escaping. Do show backslashes in help tags. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
424 */ |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
425 static int |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
426 skip_status_match_char(expand_T *xp, char_u *s) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
427 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
428 if ((rem_backslash(s) && xp->xp_context != EXPAND_HELP) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
429 #ifdef FEAT_MENU |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
430 || ((xp->xp_context == EXPAND_MENUS |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
431 || xp->xp_context == EXPAND_MENUNAMES) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
432 && (s[0] == '\t' || (s[0] == '\\' && s[1] != NUL))) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
433 #endif |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
434 ) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
435 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
436 #ifndef BACKSLASH_IN_FILENAME |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
437 if (xp->xp_shell && csh_like_shell() && s[1] == '\\' && s[2] == '!') |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
438 return 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
439 #endif |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
440 return 1; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
441 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
442 return 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
443 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
444 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
445 /* |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
446 * Get the length of an item as it will be shown in the status line. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
447 */ |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
448 static int |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
449 status_match_len(expand_T *xp, char_u *s) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
450 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
451 int len = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
452 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
453 #ifdef FEAT_MENU |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
454 int emenu = xp->xp_context == EXPAND_MENUS |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
455 || xp->xp_context == EXPAND_MENUNAMES; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
456 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
457 // Check for menu separators - replace with '|'. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
458 if (emenu && menu_is_separator(s)) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
459 return 1; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
460 #endif |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
461 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
462 while (*s != NUL) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
463 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
464 s += skip_status_match_char(xp, s); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
465 len += ptr2cells(s); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
466 MB_PTR_ADV(s); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
467 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
468 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
469 return len; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
470 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
471 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
472 /* |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
473 * Show wildchar matches in the status line. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
474 * Show at least the "match" item. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
475 * We start at item 'first_match' in the list and show all matches that fit. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
476 * |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
477 * If inversion is possible we use it. Else '=' characters are used. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
478 */ |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
479 static void |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
480 win_redr_status_matches( |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
481 expand_T *xp, |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
482 int num_matches, |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
483 char_u **matches, // list of matches |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
484 int match, |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
485 int showtail) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
486 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
487 #define L_MATCH(m) (showtail ? showmatches_gettail(matches[m]) : matches[m]) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
488 int row; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
489 char_u *buf; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
490 int len; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
491 int clen; // length in screen cells |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
492 int fillchar; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
493 int attr; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
494 int i; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
495 int highlight = TRUE; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
496 char_u *selstart = NULL; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
497 int selstart_col = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
498 char_u *selend = NULL; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
499 static int first_match = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
500 int add_left = FALSE; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
501 char_u *s; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
502 #ifdef FEAT_MENU |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
503 int emenu; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
504 #endif |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
505 int l; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
506 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
507 if (matches == NULL) // interrupted completion? |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
508 return; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
509 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
510 if (has_mbyte) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
511 buf = alloc(Columns * MB_MAXBYTES + 1); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
512 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
513 buf = alloc(Columns + 1); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
514 if (buf == NULL) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
515 return; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
516 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
517 if (match == -1) // don't show match but original text |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
518 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
519 match = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
520 highlight = FALSE; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
521 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
522 // count 1 for the ending ">" |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
523 clen = status_match_len(xp, L_MATCH(match)) + 3; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
524 if (match == 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
525 first_match = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
526 else if (match < first_match) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
527 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
528 // jumping left, as far as we can go |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
529 first_match = match; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
530 add_left = TRUE; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
531 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
532 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
533 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
534 // check if match fits on the screen |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
535 for (i = first_match; i < match; ++i) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
536 clen += status_match_len(xp, L_MATCH(i)) + 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
537 if (first_match > 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
538 clen += 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
539 // jumping right, put match at the left |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
540 if ((long)clen > Columns) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
541 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
542 first_match = match; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
543 // if showing the last match, we can add some on the left |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
544 clen = 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
545 for (i = match; i < num_matches; ++i) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
546 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
547 clen += status_match_len(xp, L_MATCH(i)) + 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
548 if ((long)clen >= Columns) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
549 break; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
550 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
551 if (i == num_matches) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
552 add_left = TRUE; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
553 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
554 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
555 if (add_left) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
556 while (first_match > 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
557 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
558 clen += status_match_len(xp, L_MATCH(first_match - 1)) + 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
559 if ((long)clen >= Columns) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
560 break; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
561 --first_match; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
562 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
563 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
564 fillchar = fillchar_status(&attr, curwin); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
565 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
566 if (first_match == 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
567 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
568 *buf = NUL; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
569 len = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
570 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
571 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
572 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
573 STRCPY(buf, "< "); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
574 len = 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
575 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
576 clen = len; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
577 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
578 i = first_match; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
579 while ((long)(clen + status_match_len(xp, L_MATCH(i)) + 2) < Columns) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
580 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
581 if (i == match) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
582 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
583 selstart = buf + len; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
584 selstart_col = clen; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
585 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
586 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
587 s = L_MATCH(i); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
588 // Check for menu separators - replace with '|' |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
589 #ifdef FEAT_MENU |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
590 emenu = (xp->xp_context == EXPAND_MENUS |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
591 || xp->xp_context == EXPAND_MENUNAMES); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
592 if (emenu && menu_is_separator(s)) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
593 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
594 STRCPY(buf + len, transchar('|')); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
595 l = (int)STRLEN(buf + len); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
596 len += l; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
597 clen += l; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
598 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
599 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
600 #endif |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
601 for ( ; *s != NUL; ++s) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
602 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
603 s += skip_status_match_char(xp, s); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
604 clen += ptr2cells(s); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
605 if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
606 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
607 STRNCPY(buf + len, s, l); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
608 s += l - 1; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
609 len += l; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
610 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
611 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
612 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
613 STRCPY(buf + len, transchar_byte(*s)); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
614 len += (int)STRLEN(buf + len); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
615 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
616 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
617 if (i == match) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
618 selend = buf + len; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
619 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
620 *(buf + len++) = ' '; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
621 *(buf + len++) = ' '; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
622 clen += 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
623 if (++i == num_matches) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
624 break; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
625 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
626 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
627 if (i != num_matches) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
628 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
629 *(buf + len++) = '>'; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
630 ++clen; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
631 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
632 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
633 buf[len] = NUL; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
634 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
635 row = cmdline_row - 1; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
636 if (row >= 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
637 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
638 if (wild_menu_showing == 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
639 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
640 if (msg_scrolled > 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
641 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
642 // Put the wildmenu just above the command line. If there is |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
643 // no room, scroll the screen one line up. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
644 if (cmdline_row == Rows - 1) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
645 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
646 screen_del_lines(0, 0, 1, (int)Rows, TRUE, 0, NULL); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
647 ++msg_scrolled; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
648 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
649 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
650 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
651 ++cmdline_row; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
652 ++row; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
653 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
654 wild_menu_showing = WM_SCROLLED; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
655 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
656 else |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
657 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
658 // Create status line if needed by setting 'laststatus' to 2. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
659 // Set 'winminheight' to zero to avoid that the window is |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
660 // resized. |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
661 if (lastwin->w_status_height == 0) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
662 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
663 save_p_ls = p_ls; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
664 save_p_wmh = p_wmh; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
665 p_ls = 2; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
666 p_wmh = 0; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
667 last_status(FALSE); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
668 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
669 wild_menu_showing = WM_SHOWN; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
670 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
671 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
672 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
673 screen_puts(buf, row, 0, attr); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
674 if (selstart != NULL && highlight) |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
675 { |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
676 *selend = NUL; |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
677 screen_puts(selstart, row, selstart_col, HL_ATTR(HLF_WM)); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
678 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
679 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
680 screen_fill(row, row + 1, clen, (int)Columns, fillchar, fillchar, attr); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
681 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
682 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
683 win_redraw_last_status(topframe); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
684 vim_free(buf); |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
685 } |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
686 |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
687 /* |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
688 * Get the next or prev cmdline completion match. The index of the match is set |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
689 * in "p_findex" |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
690 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
691 static char_u * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
692 get_next_or_prev_match( |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
693 int mode, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
694 expand_T *xp, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
695 int *p_findex, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
696 char_u *orig_save) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
697 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
698 int findex = *p_findex; |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
699 int ht; |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
700 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
701 if (xp->xp_numfiles <= 0) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
702 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
703 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
704 if (mode == WILD_PREV) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
705 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
706 if (findex == -1) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
707 findex = xp->xp_numfiles; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
708 --findex; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
709 } |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
710 else if (mode == WILD_NEXT) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
711 ++findex; |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
712 else if (mode == WILD_PAGEUP) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
713 { |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
714 if (findex == 0) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
715 // at the first entry, don't select any entries |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
716 findex = -1; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
717 else if (findex == -1) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
718 // no entry is selected. select the last entry |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
719 findex = xp->xp_numfiles - 1; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
720 else |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
721 { |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
722 // go up by the pum height |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
723 ht = pum_get_height(); |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
724 if (ht > 3) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
725 ht -= 2; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
726 findex -= ht; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
727 if (findex < 0) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
728 // few entries left, select the first entry |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
729 findex = 0; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
730 } |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
731 } |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
732 else // mode == WILD_PAGEDOWN |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
733 { |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
734 if (findex == xp->xp_numfiles - 1) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
735 // at the last entry, don't select any entries |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
736 findex = -1; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
737 else if (findex == -1) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
738 // no entry is selected. select the first entry |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
739 findex = 0; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
740 else |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
741 { |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
742 // go down by the pum height |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
743 ht = pum_get_height(); |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
744 if (ht > 3) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
745 ht -= 2; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
746 findex += ht; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
747 if (findex >= xp->xp_numfiles) |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
748 // few entries left, select the last entry |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
749 findex = xp->xp_numfiles - 1; |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
750 } |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
751 } |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
752 |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
753 // When wrapping around, return the original string, set findex to -1. |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
754 if (findex < 0) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
755 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
756 if (orig_save == NULL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
757 findex = xp->xp_numfiles - 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
758 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
759 findex = -1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
760 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
761 if (findex >= xp->xp_numfiles) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
762 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
763 if (orig_save == NULL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
764 findex = 0; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
765 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
766 findex = -1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
767 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
768 if (compl_match_array) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
769 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
770 compl_selected = findex; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
771 cmdline_pum_display(); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
772 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
773 else if (p_wmnu) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
774 win_redr_status_matches(xp, xp->xp_numfiles, xp->xp_files, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
775 findex, cmd_showtail); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
776 *p_findex = findex; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
777 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
778 if (findex == -1) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
779 return vim_strsave(orig_save); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
780 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
781 return vim_strsave(xp->xp_files[findex]); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
782 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
783 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
784 /* |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
785 * Start the command-line expansion and get the matches. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
786 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
787 static char_u * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
788 ExpandOne_start(int mode, expand_T *xp, char_u *str, int options) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
789 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
790 int non_suf_match; // number without matching suffix |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
791 int i; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
792 char_u *ss = NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
793 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
794 // Do the expansion. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
795 if (ExpandFromContext(xp, str, &xp->xp_files, &xp->xp_numfiles, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
796 options) == FAIL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
797 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
798 #ifdef FNAME_ILLEGAL |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
799 // Illegal file name has been silently skipped. But when there |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
800 // are wildcards, the real problem is that there was no match, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
801 // causing the pattern to be added, which has illegal characters. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
802 if (!(options & WILD_SILENT) && (options & WILD_LIST_NOTFOUND)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
803 semsg(_(e_no_match_str_2), str); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
804 #endif |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
805 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
806 else if (xp->xp_numfiles == 0) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
807 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
808 if (!(options & WILD_SILENT)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
809 semsg(_(e_no_match_str_2), str); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
810 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
811 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
812 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
813 // Escape the matches for use on the command line. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
814 ExpandEscape(xp, str, xp->xp_numfiles, xp->xp_files, options); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
815 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
816 // Check for matching suffixes in file names. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
817 if (mode != WILD_ALL && mode != WILD_ALL_KEEP && mode != WILD_LONGEST) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
818 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
819 if (xp->xp_numfiles) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
820 non_suf_match = xp->xp_numfiles; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
821 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
822 non_suf_match = 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
823 if ((xp->xp_context == EXPAND_FILES |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
824 || xp->xp_context == EXPAND_DIRECTORIES) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
825 && xp->xp_numfiles > 1) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
826 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
827 // More than one match; check suffix. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
828 // The files will have been sorted on matching suffix in |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
829 // expand_wildcards, only need to check the first two. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
830 non_suf_match = 0; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
831 for (i = 0; i < 2; ++i) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
832 if (match_suffix(xp->xp_files[i])) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
833 ++non_suf_match; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
834 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
835 if (non_suf_match != 1) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
836 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
837 // Can we ever get here unless it's while expanding |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
838 // interactively? If not, we can get rid of this all |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
839 // together. Don't really want to wait for this message |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
840 // (and possibly have to hit return to continue!). |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
841 if (!(options & WILD_SILENT)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
842 emsg(_(e_too_many_file_names)); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
843 else if (!(options & WILD_NO_BEEP)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
844 beep_flush(); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
845 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
846 if (!(non_suf_match != 1 && mode == WILD_EXPAND_FREE)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
847 ss = vim_strsave(xp->xp_files[0]); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
848 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
849 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
850 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
851 return ss; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
852 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
853 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
854 /* |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
855 * Return the longest common part in the list of cmdline completion matches. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
856 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
857 static char_u * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
858 find_longest_match(expand_T *xp, int options) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
859 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
860 long_u len; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
861 int mb_len = 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
862 int c0, ci; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
863 int i; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
864 char_u *ss; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
865 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
866 for (len = 0; xp->xp_files[0][len]; len += mb_len) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
867 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
868 if (has_mbyte) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
869 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
870 mb_len = (*mb_ptr2len)(&xp->xp_files[0][len]); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
871 c0 =(* mb_ptr2char)(&xp->xp_files[0][len]); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
872 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
873 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
874 c0 = xp->xp_files[0][len]; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
875 for (i = 1; i < xp->xp_numfiles; ++i) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
876 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
877 if (has_mbyte) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
878 ci =(* mb_ptr2char)(&xp->xp_files[i][len]); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
879 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
880 ci = xp->xp_files[i][len]; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
881 if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
882 || xp->xp_context == EXPAND_FILES |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
883 || xp->xp_context == EXPAND_SHELLCMD |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
884 || xp->xp_context == EXPAND_BUFFERS)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
885 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
886 if (MB_TOLOWER(c0) != MB_TOLOWER(ci)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
887 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
888 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
889 else if (c0 != ci) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
890 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
891 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
892 if (i < xp->xp_numfiles) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
893 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
894 if (!(options & WILD_NO_BEEP)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
895 vim_beep(BO_WILD); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
896 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
897 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
898 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
899 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
900 ss = alloc(len + 1); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
901 if (ss) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
902 vim_strncpy(ss, xp->xp_files[0], (size_t)len); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
903 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
904 return ss; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
905 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
906 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
907 /* |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
908 * Do wildcard expansion on the string "str". |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
909 * Chars that should not be expanded must be preceded with a backslash. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
910 * Return a pointer to allocated memory containing the new string. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
911 * Return NULL for failure. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
912 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
913 * "orig" is the originally expanded string, copied to allocated memory. It |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
914 * should either be kept in orig_save or freed. When "mode" is WILD_NEXT or |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
915 * WILD_PREV "orig" should be NULL. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
916 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
917 * Results are cached in xp->xp_files and xp->xp_numfiles, except when "mode" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
918 * is WILD_EXPAND_FREE or WILD_ALL. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
919 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
920 * mode = WILD_FREE: just free previously expanded matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
921 * mode = WILD_EXPAND_FREE: normal expansion, do not keep matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
922 * mode = WILD_EXPAND_KEEP: normal expansion, keep matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
923 * mode = WILD_NEXT: use next match in multiple match, wrap to first |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
924 * mode = WILD_PREV: use previous match in multiple match, wrap to first |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
925 * mode = WILD_ALL: return all matches concatenated |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
926 * mode = WILD_LONGEST: return longest matched part |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
927 * mode = WILD_ALL_KEEP: get all matches, keep matches |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
928 * mode = WILD_APPLY: apply the item selected in the cmdline completion |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
929 * popup menu and close the menu. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
930 * mode = WILD_CANCEL: cancel and close the cmdline completion popup and |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
931 * use the original text. |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
932 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
933 * options = WILD_LIST_NOTFOUND: list entries without a match |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
934 * options = WILD_HOME_REPLACE: do home_replace() for buffer names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
935 * options = WILD_USE_NL: Use '\n' for WILD_ALL |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
936 * options = WILD_NO_BEEP: Don't beep for multiple matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
937 * options = WILD_ADD_SLASH: add a slash after directory names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
938 * options = WILD_KEEP_ALL: don't remove 'wildignore' entries |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
939 * options = WILD_SILENT: don't print warning messages |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
940 * options = WILD_ESCAPE: put backslash before special chars |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
941 * options = WILD_ICASE: ignore case for files |
20818
a0b147774bd4
patch 8.2.0961: MS-Windows: no completion for locales
Bram Moolenaar <Bram@vim.org>
parents:
20751
diff
changeset
|
942 * options = WILD_ALLLINKS; keep broken links |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
943 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
944 * The variables xp->xp_context and xp->xp_backslash must have been set! |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
945 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
946 char_u * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
947 ExpandOne( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
948 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
949 char_u *str, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
950 char_u *orig, // allocated copy of original of expanded string |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
951 int options, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
952 int mode) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
953 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
954 char_u *ss = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
955 static int findex; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
956 static char_u *orig_save = NULL; // kept value of orig |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
957 int orig_saved = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
958 int i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
959 long_u len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
960 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
961 // first handle the case of using an old match |
28109
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
962 if (mode == WILD_NEXT || mode == WILD_PREV |
06535d568f74
patch 8.2.4579: cannot use page-up and page-down in the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
28091
diff
changeset
|
963 || mode == WILD_PAGEUP || mode == WILD_PAGEDOWN) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
964 return get_next_or_prev_match(mode, xp, &findex, orig_save); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
965 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
966 if (mode == WILD_CANCEL) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
967 ss = vim_strsave(orig_save ? orig_save : (char_u *)""); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
968 else if (mode == WILD_APPLY) |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
969 ss = vim_strsave(findex == -1 ? (orig_save ? |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
970 orig_save : (char_u *)"") : xp->xp_files[findex]); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
971 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
972 // free old names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
973 if (xp->xp_numfiles != -1 && mode != WILD_ALL && mode != WILD_LONGEST) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
974 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
975 FreeWild(xp->xp_numfiles, xp->xp_files); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
976 xp->xp_numfiles = -1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
977 VIM_CLEAR(orig_save); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
978 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
979 findex = 0; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
980 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
981 if (mode == WILD_FREE) // only release file name |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
982 return NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
983 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
984 if (xp->xp_numfiles == -1 && mode != WILD_APPLY && mode != WILD_CANCEL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
985 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
986 vim_free(orig_save); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
987 orig_save = orig; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
988 orig_saved = TRUE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
989 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
990 ss = ExpandOne_start(mode, xp, str, options); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
991 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
992 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
993 // Find longest common part |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
994 if (mode == WILD_LONGEST && xp->xp_numfiles > 0) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
995 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
996 ss = find_longest_match(xp, options); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
997 findex = -1; // next p_wc gets first one |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
998 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
999 |
29784
86c203dbf12b
patch 9.0.0231: expanding "**" may loop forever with directory links
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
1000 // Concatenate all matching names. Unless interrupted, this can be slow |
86c203dbf12b
patch 9.0.0231: expanding "**" may loop forever with directory links
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
1001 // and the result probably won't be used. |
86c203dbf12b
patch 9.0.0231: expanding "**" may loop forever with directory links
Bram Moolenaar <Bram@vim.org>
parents:
29732
diff
changeset
|
1002 if (mode == WILD_ALL && xp->xp_numfiles > 0 && !got_int) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1003 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1004 len = 0; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1005 for (i = 0; i < xp->xp_numfiles; ++i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1006 len += (long_u)STRLEN(xp->xp_files[i]) + 1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1007 ss = alloc(len); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1008 if (ss != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1009 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1010 *ss = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1011 for (i = 0; i < xp->xp_numfiles; ++i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1012 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1013 STRCAT(ss, xp->xp_files[i]); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1014 if (i != xp->xp_numfiles - 1) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1015 STRCAT(ss, (options & WILD_USE_NL) ? "\n" : " "); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1016 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1017 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1018 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1019 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1020 if (mode == WILD_EXPAND_FREE || mode == WILD_ALL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1021 ExpandCleanup(xp); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1022 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1023 // Free "orig" if it wasn't stored in "orig_save". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1024 if (!orig_saved) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1025 vim_free(orig); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1026 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1027 return ss; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1028 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1029 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1030 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1031 * Prepare an expand structure for use. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1032 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1033 void |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1034 ExpandInit(expand_T *xp) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1035 { |
21477
8a0362947c3a
patch 8.2.1289: crash when using a custom completion function
Bram Moolenaar <Bram@vim.org>
parents:
21423
diff
changeset
|
1036 CLEAR_POINTER(xp); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1037 xp->xp_backslash = XP_BS_NONE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1038 xp->xp_numfiles = -1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1039 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1040 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1041 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1042 * Cleanup an expand structure after use. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1043 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1044 void |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1045 ExpandCleanup(expand_T *xp) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1046 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1047 if (xp->xp_numfiles >= 0) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1048 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1049 FreeWild(xp->xp_numfiles, xp->xp_files); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1050 xp->xp_numfiles = -1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1051 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1052 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1053 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1054 /* |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1055 * Display one line of completion matches. Multiple matches are displayed in |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1056 * each line (used by wildmode=list and CTRL-D) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1057 * matches - list of completion match names |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1058 * numMatches - number of completion matches in "matches" |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1059 * lines - number of output lines |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1060 * linenr - line number of matches to display |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1061 * maxlen - maximum number of characters in each line |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1062 * showtail - display only the tail of the full path of a file name |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1063 * dir_attr - highlight attribute to use for directory names |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1064 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1065 static void |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1066 showmatches_oneline( |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1067 expand_T *xp, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1068 char_u **matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1069 int numMatches, |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1070 int lines, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1071 int linenr, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1072 int maxlen, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1073 int showtail, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1074 int dir_attr) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1075 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1076 int i, j; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1077 int isdir; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1078 int lastlen; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1079 char_u *p; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1080 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1081 lastlen = 999; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1082 for (j = linenr; j < numMatches; j += lines) |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1083 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1084 if (xp->xp_context == EXPAND_TAGS_LISTFILES) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1085 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1086 msg_outtrans_attr(matches[j], HL_ATTR(HLF_D)); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1087 p = matches[j] + STRLEN(matches[j]) + 1; |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1088 msg_advance(maxlen + 1); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1089 msg_puts((char *)p); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1090 msg_advance(maxlen + 3); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1091 msg_outtrans_long_attr(p + 2, HL_ATTR(HLF_D)); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1092 break; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1093 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1094 for (i = maxlen - lastlen; --i >= 0; ) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1095 msg_putchar(' '); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1096 if (xp->xp_context == EXPAND_FILES |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1097 || xp->xp_context == EXPAND_SHELLCMD |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1098 || xp->xp_context == EXPAND_BUFFERS) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1099 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1100 // highlight directories |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1101 if (xp->xp_numfiles != -1) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1102 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1103 char_u *halved_slash; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1104 char_u *exp_path; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1105 char_u *path; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1106 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1107 // Expansion was done before and special characters |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1108 // were escaped, need to halve backslashes. Also |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1109 // $HOME has been replaced with ~/. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1110 exp_path = expand_env_save_opt(matches[j], TRUE); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1111 path = exp_path != NULL ? exp_path : matches[j]; |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1112 halved_slash = backslash_halve_save(path); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1113 isdir = mch_isdir(halved_slash != NULL ? halved_slash |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1114 : matches[j]); |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1115 vim_free(exp_path); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1116 if (halved_slash != path) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1117 vim_free(halved_slash); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1118 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1119 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1120 // Expansion was done here, file names are literal. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1121 isdir = mch_isdir(matches[j]); |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1122 if (showtail) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1123 p = SHOW_FILE_TEXT(j); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1124 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1125 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1126 home_replace(NULL, matches[j], NameBuff, MAXPATHL, |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1127 TRUE); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1128 p = NameBuff; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1129 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1130 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1131 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1132 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1133 isdir = FALSE; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1134 p = SHOW_FILE_TEXT(j); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1135 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1136 lastlen = msg_outtrans_attr(p, isdir ? dir_attr : 0); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1137 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1138 if (msg_col > 0) // when not wrapped around |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1139 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1140 msg_clr_eos(); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1141 msg_putchar('\n'); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1142 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1143 out_flush(); // show one line at a time |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1144 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1145 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1146 /* |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1147 * Show all matches for completion on the command line. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1148 * Returns EXPAND_NOTHING when the character that triggered expansion should |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1149 * be inserted like a normal character. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1150 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1151 int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1152 showmatches(expand_T *xp, int wildmenu UNUSED) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1153 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1154 cmdline_info_T *ccline = get_cmdline_info(); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1155 int numMatches; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1156 char_u **matches; |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1157 int i, j; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1158 int maxlen; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1159 int lines; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1160 int columns; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1161 int attr; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1162 int showtail; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1163 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1164 if (xp->xp_numfiles == -1) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1165 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1166 set_expand_context(xp); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1167 i = expand_cmdline(xp, ccline->cmdbuff, ccline->cmdpos, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1168 &numMatches, &matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1169 showtail = expand_showtail(xp); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1170 if (i != EXPAND_OK) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1171 return i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1172 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1173 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1174 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1175 numMatches = xp->xp_numfiles; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1176 matches = xp->xp_files; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1177 showtail = cmd_showtail; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1178 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1179 |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
1180 if (wildmenu && vim_strchr(p_wop, WOP_PUM) != NULL) |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
1181 // cmdline completion popup menu (with wildoptions=pum) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1182 return cmdline_pum_create(ccline, xp, matches, numMatches, showtail); |
29881
0cc9a3001717
patch 9.0.0279: the tiny version has the popup menu but not 'wildmenu'
Bram Moolenaar <Bram@vim.org>
parents:
29794
diff
changeset
|
1183 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1184 if (!wildmenu) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1185 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1186 msg_didany = FALSE; // lines_left will be set |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1187 msg_start(); // prepare for paging |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1188 msg_putchar('\n'); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1189 out_flush(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1190 cmdline_row = msg_row; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1191 msg_didany = FALSE; // lines_left will be set again |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1192 msg_start(); // prepare for paging |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1193 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1194 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1195 if (got_int) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1196 got_int = FALSE; // only int. the completion, not the cmd line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1197 else if (wildmenu) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1198 win_redr_status_matches(xp, numMatches, matches, -1, showtail); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1199 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1200 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1201 // find the length of the longest file name |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1202 maxlen = 0; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1203 for (i = 0; i < numMatches; ++i) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1204 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1205 if (!showtail && (xp->xp_context == EXPAND_FILES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1206 || xp->xp_context == EXPAND_SHELLCMD |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1207 || xp->xp_context == EXPAND_BUFFERS)) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1208 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1209 home_replace(NULL, matches[i], NameBuff, MAXPATHL, TRUE); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1210 j = vim_strsize(NameBuff); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1211 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1212 else |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
1213 j = vim_strsize(SHOW_FILE_TEXT(i)); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1214 if (j > maxlen) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1215 maxlen = j; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1216 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1217 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1218 if (xp->xp_context == EXPAND_TAGS_LISTFILES) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1219 lines = numMatches; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1220 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1221 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1222 // compute the number of columns and lines for the listing |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1223 maxlen += 2; // two spaces between file names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1224 columns = ((int)Columns + 2) / maxlen; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1225 if (columns < 1) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1226 columns = 1; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1227 lines = (numMatches + columns - 1) / columns; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1228 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1229 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1230 attr = HL_ATTR(HLF_D); // find out highlighting for directories |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1231 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1232 if (xp->xp_context == EXPAND_TAGS_LISTFILES) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1233 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1234 msg_puts_attr(_("tagname"), HL_ATTR(HLF_T)); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1235 msg_clr_eos(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1236 msg_advance(maxlen - 3); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1237 msg_puts_attr(_(" kind file\n"), HL_ATTR(HLF_T)); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1238 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1239 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1240 // list the files line by line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1241 for (i = 0; i < lines; ++i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1242 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1243 showmatches_oneline(xp, matches, numMatches, lines, i, |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1244 maxlen, showtail, attr); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1245 if (got_int) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1246 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1247 got_int = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1248 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1249 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1250 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1251 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1252 // we redraw the command below the lines that we have just listed |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1253 // This is a bit tricky, but it saves a lot of screen updating. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1254 cmdline_row = msg_row; // will put it back later |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1255 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1256 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1257 if (xp->xp_numfiles == -1) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1258 FreeWild(numMatches, matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1259 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1260 return EXPAND_OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1261 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1262 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1263 /* |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
1264 * gettail() version for showmatches() and win_redr_status_matches(): |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
1265 * Return the tail of file name path "s", ignoring a trailing "/". |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1266 */ |
31065
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
1267 static char_u * |
50405a481037
patch 9.0.0867: wildmenu redrawing code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
30325
diff
changeset
|
1268 showmatches_gettail(char_u *s) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1269 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1270 char_u *p; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1271 char_u *t = s; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1272 int had_sep = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1273 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1274 for (p = s; *p != NUL; ) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1275 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1276 if (vim_ispathsep(*p) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1277 #ifdef BACKSLASH_IN_FILENAME |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1278 && !rem_backslash(p) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1279 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1280 ) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1281 had_sep = TRUE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1282 else if (had_sep) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1283 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1284 t = p; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1285 had_sep = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1286 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1287 MB_PTR_ADV(p); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1288 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1289 return t; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1290 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1291 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1292 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1293 * Return TRUE if we only need to show the tail of completion matches. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1294 * When not completing file names or there is a wildcard in the path FALSE is |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1295 * returned. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1296 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1297 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1298 expand_showtail(expand_T *xp) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1299 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1300 char_u *s; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1301 char_u *end; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1302 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1303 // When not completing file names a "/" may mean something different. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1304 if (xp->xp_context != EXPAND_FILES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1305 && xp->xp_context != EXPAND_SHELLCMD |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1306 && xp->xp_context != EXPAND_DIRECTORIES) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1307 return FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1308 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1309 end = gettail(xp->xp_pattern); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1310 if (end == xp->xp_pattern) // there is no path separator |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1311 return FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1312 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1313 for (s = xp->xp_pattern; s < end; s++) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1314 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1315 // Skip escaped wildcards. Only when the backslash is not a path |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1316 // separator, on DOS the '*' "path\*\file" must not be skipped. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1317 if (rem_backslash(s)) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1318 ++s; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1319 else if (vim_strchr((char_u *)"*?[", *s) != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1320 return FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1321 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1322 return TRUE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1323 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1324 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1325 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1326 * Prepare a string for expansion. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1327 * When expanding file names: The string will be used with expand_wildcards(). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1328 * Copy "fname[len]" into allocated memory and add a '*' at the end. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1329 * When expanding other names: The string will be used with regcomp(). Copy |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1330 * the name into allocated memory and prepend "^". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1331 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1332 char_u * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1333 addstar( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1334 char_u *fname, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1335 int len, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1336 int context) // EXPAND_FILES etc. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1337 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1338 char_u *retval; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1339 int i, j; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1340 int new_len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1341 char_u *tail; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1342 int ends_in_star; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1343 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1344 if (context != EXPAND_FILES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1345 && context != EXPAND_FILES_IN_PATH |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1346 && context != EXPAND_SHELLCMD |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1347 && context != EXPAND_DIRECTORIES) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1348 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1349 // Matching will be done internally (on something other than files). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1350 // So we convert the file-matching-type wildcards into our kind for |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1351 // use with vim_regcomp(). First work out how long it will be: |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1352 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1353 // For help tags the translation is done in find_help_tags(). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1354 // For a tag pattern starting with "/" no translation is needed. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1355 if (context == EXPAND_HELP |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1356 || context == EXPAND_COLORS |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1357 || context == EXPAND_COMPILER |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1358 || context == EXPAND_OWNSYNTAX |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1359 || context == EXPAND_FILETYPE |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1360 || context == EXPAND_PACKADD |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1361 || ((context == EXPAND_TAGS_LISTFILES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1362 || context == EXPAND_TAGS) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1363 && fname[0] == '/')) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1364 retval = vim_strnsave(fname, len); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1365 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1366 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1367 new_len = len + 2; // +2 for '^' at start, NUL at end |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1368 for (i = 0; i < len; i++) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1369 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1370 if (fname[i] == '*' || fname[i] == '~') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1371 new_len++; // '*' needs to be replaced by ".*" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1372 // '~' needs to be replaced by "\~" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1373 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1374 // Buffer names are like file names. "." should be literal |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1375 if (context == EXPAND_BUFFERS && fname[i] == '.') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1376 new_len++; // "." becomes "\." |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1377 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1378 // Custom expansion takes care of special things, match |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1379 // backslashes literally (perhaps also for other types?) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1380 if ((context == EXPAND_USER_DEFINED |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1381 || context == EXPAND_USER_LIST) && fname[i] == '\\') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1382 new_len++; // '\' becomes "\\" |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1383 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1384 retval = alloc(new_len); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1385 if (retval != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1386 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1387 retval[0] = '^'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1388 j = 1; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1389 for (i = 0; i < len; i++, j++) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1390 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1391 // Skip backslash. But why? At least keep it for custom |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1392 // expansion. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1393 if (context != EXPAND_USER_DEFINED |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1394 && context != EXPAND_USER_LIST |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1395 && fname[i] == '\\' |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1396 && ++i == len) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1397 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1398 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1399 switch (fname[i]) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1400 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1401 case '*': retval[j++] = '.'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1402 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1403 case '~': retval[j++] = '\\'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1404 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1405 case '?': retval[j] = '.'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1406 continue; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1407 case '.': if (context == EXPAND_BUFFERS) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1408 retval[j++] = '\\'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1409 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1410 case '\\': if (context == EXPAND_USER_DEFINED |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1411 || context == EXPAND_USER_LIST) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1412 retval[j++] = '\\'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1413 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1414 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1415 retval[j] = fname[i]; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1416 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1417 retval[j] = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1418 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1419 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1420 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1421 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1422 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1423 retval = alloc(len + 4); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1424 if (retval != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1425 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1426 vim_strncpy(retval, fname, len); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1427 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1428 // Don't add a star to *, ~, ~user, $var or `cmd`. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1429 // * would become **, which walks the whole tree. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1430 // ~ would be at the start of the file name, but not the tail. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1431 // $ could be anywhere in the tail. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1432 // ` could be anywhere in the file name. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1433 // When the name ends in '$' don't add a star, remove the '$'. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1434 tail = gettail(retval); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1435 ends_in_star = (len > 0 && retval[len - 1] == '*'); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1436 #ifndef BACKSLASH_IN_FILENAME |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1437 for (i = len - 2; i >= 0; --i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1438 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1439 if (retval[i] != '\\') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1440 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1441 ends_in_star = !ends_in_star; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1442 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1443 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1444 if ((*retval != '~' || tail != retval) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1445 && !ends_in_star |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1446 && vim_strchr(tail, '$') == NULL |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1447 && vim_strchr(retval, '`') == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1448 retval[len++] = '*'; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1449 else if (len > 0 && retval[len - 1] == '$') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1450 --len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1451 retval[len] = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1452 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1453 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1454 return retval; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1455 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1456 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1457 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1458 * Must parse the command line so far to work out what context we are in. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1459 * Completion can then be done based on that context. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1460 * This routine sets the variables: |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1461 * xp->xp_pattern The start of the pattern to be expanded within |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1462 * the command line (ends at the cursor). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1463 * xp->xp_context The type of thing to expand. Will be one of: |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1464 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1465 * EXPAND_UNSUCCESSFUL Used sometimes when there is something illegal on |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1466 * the command line, like an unknown command. Caller |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1467 * should beep. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1468 * EXPAND_NOTHING Unrecognised context for completion, use char like |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1469 * a normal char, rather than for completion. eg |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1470 * :s/^I/ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1471 * EXPAND_COMMANDS Cursor is still touching the command, so complete |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1472 * it. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1473 * EXPAND_BUFFERS Complete file names for :buf and :sbuf commands. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1474 * EXPAND_FILES After command with EX_XFILE set, or after setting |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1475 * with P_EXPAND set. eg :e ^I, :w>>^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1476 * EXPAND_DIRECTORIES In some cases this is used instead of the latter |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1477 * when we know only directories are of interest. eg |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1478 * :set dir=^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1479 * EXPAND_SHELLCMD After ":!cmd", ":r !cmd" or ":w !cmd". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1480 * EXPAND_SETTINGS Complete variable names. eg :set d^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1481 * EXPAND_BOOL_SETTINGS Complete boolean variables only, eg :set no^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1482 * EXPAND_TAGS Complete tags from the files in p_tags. eg :ta a^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1483 * EXPAND_TAGS_LISTFILES As above, but list filenames on ^D, after :tselect |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1484 * EXPAND_HELP Complete tags from the file 'helpfile'/tags |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1485 * EXPAND_EVENTS Complete event names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1486 * EXPAND_SYNTAX Complete :syntax command arguments |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1487 * EXPAND_HIGHLIGHT Complete highlight (syntax) group names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1488 * EXPAND_AUGROUP Complete autocommand group names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1489 * EXPAND_USER_VARS Complete user defined variable names, eg :unlet a^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1490 * EXPAND_MAPPINGS Complete mapping and abbreviation names, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1491 * eg :unmap a^I , :cunab x^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1492 * EXPAND_FUNCTIONS Complete internal or user defined function names, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1493 * eg :call sub^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1494 * EXPAND_USER_FUNC Complete user defined function names, eg :delf F^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1495 * EXPAND_EXPRESSION Complete internal or user defined function/variable |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1496 * names in expressions, eg :while s^I |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1497 * EXPAND_ENV_VARS Complete environment variable names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1498 * EXPAND_USER Complete user names |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1499 */ |
28757
add09d468c0d
patch 8.2.4903: cannot get the current cmdline completion type and position
Bram Moolenaar <Bram@vim.org>
parents:
28427
diff
changeset
|
1500 void |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1501 set_expand_context(expand_T *xp) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1502 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1503 cmdline_info_T *ccline = get_cmdline_info(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1504 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1505 // only expansion for ':', '>' and '=' command-lines |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1506 if (ccline->cmdfirstc != ':' |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1507 #ifdef FEAT_EVAL |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1508 && ccline->cmdfirstc != '>' && ccline->cmdfirstc != '=' |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1509 && !ccline->input_fn |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1510 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1511 ) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1512 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1513 xp->xp_context = EXPAND_NOTHING; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1514 return; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1515 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1516 set_cmd_context(xp, ccline->cmdbuff, ccline->cmdlen, ccline->cmdpos, TRUE); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1517 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
1518 |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1519 /* |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1520 * Sets the index of a built-in or user defined command 'cmd' in eap->cmdidx. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1521 * For user defined commands, the completion context is set in 'xp' and the |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1522 * completion flags in 'complp'. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1523 * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1524 * Returns a pointer to the text after the command or NULL for failure. |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1525 */ |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1526 static char_u * |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1527 set_cmd_index(char_u *cmd, exarg_T *eap, expand_T *xp, int *complp) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1528 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1529 char_u *p = NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1530 int len = 0; |
27899
5426a1d3f12d
patch 8.2.4475: fuzzy cmdline completion does not work for lower case
Bram Moolenaar <Bram@vim.org>
parents:
27879
diff
changeset
|
1531 int fuzzy = cmdline_fuzzy_complete(cmd); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1532 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1533 // Isolate the command and search for it in the command table. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1534 // Exceptions: |
27908
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
1535 // - the 'k' command can directly be followed by any character, but do |
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
1536 // accept "keepmarks", "keepalt" and "keepjumps". As fuzzy matching can |
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
1537 // find matches anywhere in the command name, do this only for command |
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
1538 // expansion based on regular expression and not for fuzzy matching. |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1539 // - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r' |
27908
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
1540 if (!fuzzy && (*cmd == 'k' && cmd[1] != 'e')) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1541 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1542 eap->cmdidx = CMD_k; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1543 p = cmd + 1; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1544 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1545 else |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1546 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1547 p = cmd; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1548 while (ASCII_ISALPHA(*p) || *p == '*') // Allow * wild card |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1549 ++p; |
24256
b471a413d36a
patch 8.2.2669: command line completion does not work after "vim9"
Bram Moolenaar <Bram@vim.org>
parents:
23356
diff
changeset
|
1550 // A user command may contain digits. |
b471a413d36a
patch 8.2.2669: command line completion does not work after "vim9"
Bram Moolenaar <Bram@vim.org>
parents:
23356
diff
changeset
|
1551 // Include "9" for "vim9*" commands; "vim9cmd" and "vim9script". |
b471a413d36a
patch 8.2.2669: command line completion does not work after "vim9"
Bram Moolenaar <Bram@vim.org>
parents:
23356
diff
changeset
|
1552 if (ASCII_ISUPPER(cmd[0]) || STRNCMP("vim9", cmd, 4) == 0) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1553 while (ASCII_ISALNUM(*p) || *p == '*') |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1554 ++p; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1555 // for python 3.x: ":py3*" commands completion |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1556 if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3') |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1557 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1558 ++p; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1559 while (ASCII_ISALPHA(*p) || *p == '*') |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1560 ++p; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1561 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1562 // check for non-alpha command |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1563 if (p == cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1564 ++p; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1565 len = (int)(p - cmd); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1566 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1567 if (len == 0) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1568 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1569 xp->xp_context = EXPAND_UNSUCCESSFUL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1570 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1571 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1572 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1573 eap->cmdidx = excmd_get_cmdidx(cmd, len); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1574 |
27899
5426a1d3f12d
patch 8.2.4475: fuzzy cmdline completion does not work for lower case
Bram Moolenaar <Bram@vim.org>
parents:
27879
diff
changeset
|
1575 // User defined commands support alphanumeric characters. |
29495
82b0aeaeaa3c
patch 9.0.0089: fuzzy argument completion doesn't work for shell commands
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
1576 // Also when doing fuzzy expansion for non-shell commands, support |
82b0aeaeaa3c
patch 9.0.0089: fuzzy argument completion doesn't work for shell commands
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
1577 // alphanumeric characters. |
82b0aeaeaa3c
patch 9.0.0089: fuzzy argument completion doesn't work for shell commands
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
1578 if ((cmd[0] >= 'A' && cmd[0] <= 'Z') |
82b0aeaeaa3c
patch 9.0.0089: fuzzy argument completion doesn't work for shell commands
Bram Moolenaar <Bram@vim.org>
parents:
29175
diff
changeset
|
1579 || (fuzzy && eap->cmdidx != CMD_bang && *p != NUL)) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1580 while (ASCII_ISALNUM(*p) || *p == '*') // Allow * wild card |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1581 ++p; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1582 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1583 |
23229
b545334ae654
patch 8.2.2160: various typos
Bram Moolenaar <Bram@vim.org>
parents:
22391
diff
changeset
|
1584 // If the cursor is touching the command, and it ends in an alphanumeric |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1585 // character, complete the command name. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1586 if (*p == NUL && ASCII_ISALNUM(p[-1])) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1587 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1588 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1589 if (eap->cmdidx == CMD_SIZE) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1590 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1591 if (*cmd == 's' && vim_strchr((char_u *)"cgriI", cmd[1]) != NULL) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1592 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1593 eap->cmdidx = CMD_substitute; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1594 p = cmd + 1; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1595 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1596 else if (cmd[0] >= 'A' && cmd[0] <= 'Z') |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1597 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1598 eap->cmd = cmd; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1599 p = find_ucmd(eap, p, NULL, xp, complp); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1600 if (p == NULL) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1601 eap->cmdidx = CMD_SIZE; // ambiguous user command |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1602 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1603 } |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1604 if (eap->cmdidx == CMD_SIZE) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1605 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1606 // Not still touching the command and it was an illegal one |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1607 xp->xp_context = EXPAND_UNSUCCESSFUL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1608 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1609 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1610 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1611 return p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1612 } |
21140
f86140ad0164
patch 8.2.1121: command completion not working after ++arg
Bram Moolenaar <Bram@vim.org>
parents:
20911
diff
changeset
|
1613 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1614 /* |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1615 * Set the completion context for a command argument with wild card characters. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1616 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1617 static void |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1618 set_context_for_wildcard_arg( |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1619 exarg_T *eap, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1620 char_u *arg, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1621 int usefilter, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1622 expand_T *xp, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1623 int *complp) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1624 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1625 char_u *p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1626 int c; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1627 int in_quote = FALSE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1628 char_u *bow = NULL; // Beginning of word |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1629 int len = 0; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1630 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1631 // Allow spaces within back-quotes to count as part of the argument |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1632 // being expanded. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1633 xp->xp_pattern = skipwhite(arg); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1634 p = xp->xp_pattern; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1635 while (*p != NUL) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1636 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1637 if (has_mbyte) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1638 c = mb_ptr2char(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1639 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1640 c = *p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1641 if (c == '\\' && p[1] != NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1642 ++p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1643 else if (c == '`') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1644 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1645 if (!in_quote) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1646 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1647 xp->xp_pattern = p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1648 bow = p + 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1649 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1650 in_quote = !in_quote; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1651 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1652 // An argument can contain just about everything, except |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1653 // characters that end the command and white space. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1654 else if (c == '|' || c == '\n' || c == '"' || (VIM_ISWHITE(c) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1655 #ifdef SPACE_IN_FILENAME |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1656 && (!(eap->argt & EX_NOSPC) || usefilter) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1657 #endif |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1658 )) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1659 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1660 len = 0; // avoid getting stuck when space is in 'isfname' |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1661 while (*p != NUL) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1662 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1663 if (has_mbyte) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1664 c = mb_ptr2char(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1665 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1666 c = *p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1667 if (c == '`' || vim_isfilec_or_wc(c)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1668 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1669 if (has_mbyte) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1670 len = (*mb_ptr2len)(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1671 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1672 len = 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1673 MB_PTR_ADV(p); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1674 } |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1675 if (in_quote) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1676 bow = p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1677 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1678 xp->xp_pattern = p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1679 p -= len; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1680 } |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1681 MB_PTR_ADV(p); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1682 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1683 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1684 // If we are still inside the quotes, and we passed a space, just |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1685 // expand from there. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1686 if (bow != NULL && in_quote) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1687 xp->xp_pattern = bow; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1688 xp->xp_context = EXPAND_FILES; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1689 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1690 // For a shell command more chars need to be escaped. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1691 if (usefilter || eap->cmdidx == CMD_bang || eap->cmdidx == CMD_terminal) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1692 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1693 #ifndef BACKSLASH_IN_FILENAME |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1694 xp->xp_shell = TRUE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1695 #endif |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1696 // When still after the command name expand executables. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1697 if (xp->xp_pattern == skipwhite(arg)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1698 xp->xp_context = EXPAND_SHELLCMD; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1699 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1700 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1701 // Check for environment variable. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1702 if (*xp->xp_pattern == '$') |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1703 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1704 for (p = xp->xp_pattern + 1; *p != NUL; ++p) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1705 if (!vim_isIDc(*p)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1706 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1707 if (*p == NUL) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1708 { |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1709 xp->xp_context = EXPAND_ENV_VARS; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1710 ++xp->xp_pattern; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1711 // Avoid that the assignment uses EXPAND_FILES again. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1712 if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1713 *complp = EXPAND_ENV_VARS; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1714 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1715 } |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1716 // Check for user names. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1717 if (*xp->xp_pattern == '~') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1718 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1719 for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1720 ; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1721 // Complete ~user only if it partially matches a user name. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1722 // A full match ~user<Tab> will be replaced by user's home |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1723 // directory i.e. something like ~user<Tab> -> /home/user/ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1724 if (*p == NUL && p > xp->xp_pattern + 1 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1725 && match_user(xp->xp_pattern + 1) >= 1) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1726 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1727 xp->xp_context = EXPAND_USER; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1728 ++xp->xp_pattern; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1729 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1730 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1731 } |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
1732 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
1733 /* |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1734 * Set the completion context for the :filter command. Returns a pointer to the |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1735 * next command after the :filter command. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1736 */ |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1737 static char_u * |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1738 set_context_in_filter_cmd(expand_T *xp, char_u *arg) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1739 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1740 if (*arg != NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1741 arg = skip_vimgrep_pat(arg, NULL, NULL); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1742 if (arg == NULL || *arg == NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1743 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1744 xp->xp_context = EXPAND_NOTHING; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1745 return NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1746 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1747 return skipwhite(arg); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1748 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1749 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1750 #ifdef FEAT_SEARCH_EXTRA |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1751 /* |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1752 * Set the completion context for the :match command. Returns a pointer to the |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1753 * next command after the :match command. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1754 */ |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1755 static char_u * |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1756 set_context_in_match_cmd(expand_T *xp, char_u *arg) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1757 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1758 if (*arg == NUL || !ends_excmd(*arg)) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1759 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1760 // also complete "None" |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1761 set_context_in_echohl_cmd(xp, arg); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1762 arg = skipwhite(skiptowhite(arg)); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1763 if (*arg != NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1764 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1765 xp->xp_context = EXPAND_NOTHING; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1766 arg = skip_regexp(arg + 1, *arg, magic_isset()); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1767 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1768 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1769 return find_nextcmd(arg); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1770 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1771 #endif |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1772 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1773 /* |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1774 * Returns a pointer to the next command after a :global or a :v command. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1775 * Returns NULL if there is no next command. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1776 */ |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1777 static char_u * |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1778 find_cmd_after_global_cmd(char_u *arg) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1779 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1780 int delim; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1781 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1782 delim = *arg; // get the delimiter |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1783 if (delim) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1784 ++arg; // skip delimiter if there is one |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1785 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1786 while (arg[0] != NUL && arg[0] != delim) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1787 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1788 if (arg[0] == '\\' && arg[1] != NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1789 ++arg; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1790 ++arg; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1791 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1792 if (arg[0] != NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1793 return arg + 1; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1794 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1795 return NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1796 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1797 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1798 /* |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1799 * Returns a pointer to the next command after a :substitute or a :& command. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1800 * Returns NULL if there is no next command. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1801 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1802 static char_u * |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1803 find_cmd_after_substitute_cmd(char_u *arg) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1804 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1805 int delim; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1806 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1807 delim = *arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1808 if (delim) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1809 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1810 // skip "from" part |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1811 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1812 arg = skip_regexp(arg, delim, magic_isset()); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1813 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1814 if (arg[0] != NUL && arg[0] == delim) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1815 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1816 // skip "to" part |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1817 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1818 while (arg[0] != NUL && arg[0] != delim) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1819 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1820 if (arg[0] == '\\' && arg[1] != NUL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1821 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1822 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1823 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1824 if (arg[0] != NUL) // skip delimiter |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1825 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1826 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1827 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1828 while (arg[0] && vim_strchr((char_u *)"|\"#", arg[0]) == NULL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1829 ++arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1830 if (arg[0] != NUL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1831 return arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1832 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1833 return NULL; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1834 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1835 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1836 /* |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1837 * Returns a pointer to the next command after a :isearch/:dsearch/:ilist |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1838 * :dlist/:ijump/:psearch/:djump/:isplit/:dsplit command. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1839 * Returns NULL if there is no next command. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1840 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1841 static char_u * |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1842 find_cmd_after_isearch_cmd(expand_T *xp, char_u *arg) |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1843 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1844 arg = skipwhite(skipdigits(arg)); // skip count |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1845 if (*arg == '/') // Match regexp, not just whole words |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1846 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1847 for (++arg; *arg && *arg != '/'; arg++) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1848 if (*arg == '\\' && arg[1] != NUL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1849 arg++; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1850 if (*arg) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1851 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1852 arg = skipwhite(arg + 1); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1853 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1854 // Check for trailing illegal characters |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1855 if (*arg == NUL || vim_strchr((char_u *)"|\"\n", *arg) == NULL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1856 xp->xp_context = EXPAND_NOTHING; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1857 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1858 return arg; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1859 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1860 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1861 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1862 return NULL; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1863 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
1864 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1865 #ifdef FEAT_EVAL |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1866 /* |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1867 * Set the completion context for the :unlet command. Always returns NULL. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1868 */ |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1869 static char_u * |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1870 set_context_in_unlet_cmd(expand_T *xp, char_u *arg) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1871 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1872 while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1873 arg = xp->xp_pattern + 1; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1874 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1875 xp->xp_context = EXPAND_USER_VARS; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1876 xp->xp_pattern = arg; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1877 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1878 if (*xp->xp_pattern == '$') |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1879 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1880 xp->xp_context = EXPAND_ENV_VARS; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1881 ++xp->xp_pattern; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1882 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1883 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1884 return NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1885 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1886 #endif |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1887 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1888 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1889 /* |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1890 * Set the completion context for the :language command. Always returns NULL. |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1891 */ |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1892 static char_u * |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1893 set_context_in_lang_cmd(expand_T *xp, char_u *arg) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1894 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1895 char_u *p; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1896 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1897 p = skiptowhite(arg); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1898 if (*p == NUL) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1899 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1900 xp->xp_context = EXPAND_LANGUAGE; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1901 xp->xp_pattern = arg; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1902 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1903 else |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1904 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1905 if ( STRNCMP(arg, "messages", p - arg) == 0 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1906 || STRNCMP(arg, "ctype", p - arg) == 0 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1907 || STRNCMP(arg, "time", p - arg) == 0 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1908 || STRNCMP(arg, "collate", p - arg) == 0) |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1909 { |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1910 xp->xp_context = EXPAND_LOCALES; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1911 xp->xp_pattern = skipwhite(p); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1912 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1913 else |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1914 xp->xp_context = EXPAND_NOTHING; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1915 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1916 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1917 return NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1918 } |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1919 #endif |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
1920 |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1921 #ifdef FEAT_EVAL |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1922 static enum |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1923 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1924 EXP_BREAKPT_ADD, // expand ":breakadd" sub-commands |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1925 EXP_BREAKPT_DEL, // expand ":breakdel" sub-commands |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1926 EXP_PROFDEL // expand ":profdel" sub-commands |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1927 } breakpt_expand_what; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1928 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1929 /* |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1930 * Set the completion context for the :breakadd command. Always returns NULL. |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1931 */ |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1932 static char_u * |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1933 set_context_in_breakadd_cmd(expand_T *xp, char_u *arg, cmdidx_T cmdidx) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1934 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1935 char_u *p; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1936 char_u *subcmd_start; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1937 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1938 xp->xp_context = EXPAND_BREAKPOINT; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1939 xp->xp_pattern = arg; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1940 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1941 if (cmdidx == CMD_breakadd) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1942 breakpt_expand_what = EXP_BREAKPT_ADD; |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1943 else if (cmdidx == CMD_breakdel) |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1944 breakpt_expand_what = EXP_BREAKPT_DEL; |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1945 else |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1946 breakpt_expand_what = EXP_PROFDEL; |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1947 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1948 p = skipwhite(arg); |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1949 if (*p == NUL) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1950 return NULL; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1951 subcmd_start = p; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1952 |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
1953 if (STRNCMP("file ", p, 5) == 0 || STRNCMP("func ", p, 5) == 0) |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1954 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1955 // :breakadd file [lnum] <filename> |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1956 // :breakadd func [lnum] <funcname> |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1957 p += 4; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1958 p = skipwhite(p); |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1959 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1960 // skip line number (if specified) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1961 if (VIM_ISDIGIT(*p)) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1962 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1963 p = skipdigits(p); |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1964 if (*p != ' ') |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1965 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1966 xp->xp_context = EXPAND_NOTHING; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1967 return NULL; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1968 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1969 p = skipwhite(p); |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1970 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1971 if (STRNCMP("file", subcmd_start, 4) == 0) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1972 xp->xp_context = EXPAND_FILES; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1973 else |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1974 xp->xp_context = EXPAND_USER_FUNC; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1975 xp->xp_pattern = p; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1976 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1977 else if (STRNCMP("expr ", p, 5) == 0) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1978 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1979 // :breakadd expr <expression> |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1980 xp->xp_context = EXPAND_EXPRESSION; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1981 xp->xp_pattern = skipwhite(p + 5); |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1982 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1983 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1984 return NULL; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
1985 } |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1986 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1987 static char_u * |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1988 set_context_in_scriptnames_cmd(expand_T *xp, char_u *arg) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1989 { |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1990 char_u *p; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1991 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1992 xp->xp_context = EXPAND_NOTHING; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1993 xp->xp_pattern = NULL; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1994 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1995 p = skipwhite(arg); |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1996 if (VIM_ISDIGIT(*p)) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1997 return NULL; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1998 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
1999 xp->xp_context = EXPAND_SCRIPTNAMES; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2000 xp->xp_pattern = p; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2001 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2002 return NULL; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2003 } |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2004 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2005 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2006 /* |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2007 * Set the completion context in 'xp' for command 'cmd' with index 'cmdidx'. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2008 * The argument to the command is 'arg' and the argument flags is 'argt'. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2009 * For user-defined commands and for environment variables, 'compl' has the |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2010 * completion type. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2011 * Returns a pointer to the next command. Returns NULL if there is no next |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2012 * command. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2013 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2014 static char_u * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2015 set_context_by_cmdname( |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2016 char_u *cmd, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2017 cmdidx_T cmdidx, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2018 expand_T *xp, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2019 char_u *arg, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2020 long argt, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2021 int compl, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2022 int forceit) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2023 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2024 switch (cmdidx) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2025 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2026 case CMD_find: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2027 case CMD_sfind: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2028 case CMD_tabfind: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2029 if (xp->xp_context == EXPAND_FILES) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2030 xp->xp_context = EXPAND_FILES_IN_PATH; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2031 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2032 case CMD_cd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2033 case CMD_chdir: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2034 case CMD_tcd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2035 case CMD_tchdir: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2036 case CMD_lcd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2037 case CMD_lchdir: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2038 if (xp->xp_context == EXPAND_FILES) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2039 xp->xp_context = EXPAND_DIRECTORIES; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2040 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2041 case CMD_help: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2042 xp->xp_context = EXPAND_HELP; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2043 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2044 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2045 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2046 // Command modifiers: return the argument. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2047 // Also for commands with an argument that is a command. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2048 case CMD_aboveleft: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2049 case CMD_argdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2050 case CMD_belowright: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2051 case CMD_botright: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2052 case CMD_browse: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2053 case CMD_bufdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2054 case CMD_cdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2055 case CMD_cfdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2056 case CMD_confirm: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2057 case CMD_debug: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2058 case CMD_folddoclosed: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2059 case CMD_folddoopen: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2060 case CMD_hide: |
30017
578e71f924fe
patch 9.0.0346: :horizontal modifier not fully supported
Bram Moolenaar <Bram@vim.org>
parents:
29886
diff
changeset
|
2061 case CMD_horizontal: |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2062 case CMD_keepalt: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2063 case CMD_keepjumps: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2064 case CMD_keepmarks: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2065 case CMD_keeppatterns: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2066 case CMD_ldo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2067 case CMD_leftabove: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2068 case CMD_lfdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2069 case CMD_lockmarks: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2070 case CMD_noautocmd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2071 case CMD_noswapfile: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2072 case CMD_rightbelow: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2073 case CMD_sandbox: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2074 case CMD_silent: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2075 case CMD_tab: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2076 case CMD_tabdo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2077 case CMD_topleft: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2078 case CMD_verbose: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2079 case CMD_vertical: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2080 case CMD_windo: |
24907
8388176a0954
patch 8.2.2991: Vim9: no completion for :vim9 and :legacy
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
2081 case CMD_vim9cmd: |
8388176a0954
patch 8.2.2991: Vim9: no completion for :vim9 and :legacy
Bram Moolenaar <Bram@vim.org>
parents:
24768
diff
changeset
|
2082 case CMD_legacy: |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2083 return arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2084 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2085 case CMD_filter: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2086 return set_context_in_filter_cmd(xp, arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2087 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2088 #ifdef FEAT_SEARCH_EXTRA |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2089 case CMD_match: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2090 return set_context_in_match_cmd(xp, arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2091 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2092 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2093 // All completion for the +cmdline_compl feature goes here. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2094 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2095 case CMD_command: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2096 return set_context_in_user_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2097 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2098 case CMD_delcommand: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2099 xp->xp_context = EXPAND_USER_COMMANDS; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2100 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2101 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2102 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2103 case CMD_global: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2104 case CMD_vglobal: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2105 return find_cmd_after_global_cmd(arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2106 case CMD_and: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2107 case CMD_substitute: |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2108 return find_cmd_after_substitute_cmd(arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2109 case CMD_isearch: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2110 case CMD_dsearch: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2111 case CMD_ilist: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2112 case CMD_dlist: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2113 case CMD_ijump: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2114 case CMD_psearch: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2115 case CMD_djump: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2116 case CMD_isplit: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2117 case CMD_dsplit: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2118 return find_cmd_after_isearch_cmd(xp, arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2119 case CMD_autocmd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2120 return set_context_in_autocmd(xp, arg, FALSE); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2121 case CMD_doautocmd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2122 case CMD_doautoall: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2123 return set_context_in_autocmd(xp, arg, TRUE); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2124 case CMD_set: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2125 set_context_in_set_cmd(xp, arg, 0); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2126 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2127 case CMD_setglobal: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2128 set_context_in_set_cmd(xp, arg, OPT_GLOBAL); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2129 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2130 case CMD_setlocal: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2131 set_context_in_set_cmd(xp, arg, OPT_LOCAL); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2132 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2133 case CMD_tag: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2134 case CMD_stag: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2135 case CMD_ptag: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2136 case CMD_ltag: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2137 case CMD_tselect: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2138 case CMD_stselect: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2139 case CMD_ptselect: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2140 case CMD_tjump: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2141 case CMD_stjump: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2142 case CMD_ptjump: |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
2143 if (vim_strchr(p_wop, WOP_TAGFILE) != NULL) |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2144 xp->xp_context = EXPAND_TAGS_LISTFILES; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2145 else |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2146 xp->xp_context = EXPAND_TAGS; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2147 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2148 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2149 case CMD_augroup: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2150 xp->xp_context = EXPAND_AUGROUP; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2151 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2152 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2153 #ifdef FEAT_SYN_HL |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2154 case CMD_syntax: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2155 set_context_in_syntax_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2156 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2157 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2158 #ifdef FEAT_EVAL |
22391
a9fb7efa31d6
patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents:
22260
diff
changeset
|
2159 case CMD_final: |
18713
baf890fa1621
patch 8.1.2348: :const cannot be followed by "| endif"
Bram Moolenaar <Bram@vim.org>
parents:
18386
diff
changeset
|
2160 case CMD_const: |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2161 case CMD_let: |
22391
a9fb7efa31d6
patch 8.2.1744: Vim9: using ":const!" is weird
Bram Moolenaar <Bram@vim.org>
parents:
22260
diff
changeset
|
2162 case CMD_var: |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2163 case CMD_if: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2164 case CMD_elseif: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2165 case CMD_while: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2166 case CMD_for: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2167 case CMD_echo: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2168 case CMD_echon: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2169 case CMD_execute: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2170 case CMD_echomsg: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2171 case CMD_echoerr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2172 case CMD_call: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2173 case CMD_return: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2174 case CMD_cexpr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2175 case CMD_caddexpr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2176 case CMD_cgetexpr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2177 case CMD_lexpr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2178 case CMD_laddexpr: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2179 case CMD_lgetexpr: |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2180 set_context_for_expression(xp, arg, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2181 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2182 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2183 case CMD_unlet: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2184 return set_context_in_unlet_cmd(xp, arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2185 case CMD_function: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2186 case CMD_delfunction: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2187 xp->xp_context = EXPAND_USER_FUNC; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2188 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2189 break; |
24909
09d222e89a84
patch 8.2.2992: Vim9: completion for :disassemble is incomplete
Bram Moolenaar <Bram@vim.org>
parents:
24907
diff
changeset
|
2190 case CMD_disassemble: |
09d222e89a84
patch 8.2.2992: Vim9: completion for :disassemble is incomplete
Bram Moolenaar <Bram@vim.org>
parents:
24907
diff
changeset
|
2191 set_context_in_disassemble_cmd(xp, arg); |
09d222e89a84
patch 8.2.2992: Vim9: completion for :disassemble is incomplete
Bram Moolenaar <Bram@vim.org>
parents:
24907
diff
changeset
|
2192 break; |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2193 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2194 case CMD_echohl: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2195 set_context_in_echohl_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2196 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2197 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2198 case CMD_highlight: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2199 set_context_in_highlight_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2200 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2201 #ifdef FEAT_CSCOPE |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2202 case CMD_cscope: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2203 case CMD_lcscope: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2204 case CMD_scscope: |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2205 set_context_in_cscope_cmd(xp, arg, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2206 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2207 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2208 #ifdef FEAT_SIGNS |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2209 case CMD_sign: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2210 set_context_in_sign_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2211 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2212 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2213 case CMD_bdelete: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2214 case CMD_bwipeout: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2215 case CMD_bunload: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2216 while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2217 arg = xp->xp_pattern + 1; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2218 // FALLTHROUGH |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2219 case CMD_buffer: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2220 case CMD_sbuffer: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2221 case CMD_checktime: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2222 xp->xp_context = EXPAND_BUFFERS; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2223 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2224 break; |
18987
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2225 #ifdef FEAT_DIFF |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2226 case CMD_diffget: |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2227 case CMD_diffput: |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2228 // If current buffer is in diff mode, complete buffer names |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2229 // which are in diff mode, and different than current buffer. |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2230 xp->xp_context = EXPAND_DIFF_BUFFERS; |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2231 xp->xp_pattern = arg; |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2232 break; |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2233 #endif |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2234 case CMD_USER: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2235 case CMD_USER_BUF: |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2236 return set_context_in_user_cmdarg(cmd, arg, argt, compl, xp, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2237 forceit); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2238 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2239 case CMD_map: case CMD_noremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2240 case CMD_nmap: case CMD_nnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2241 case CMD_vmap: case CMD_vnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2242 case CMD_omap: case CMD_onoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2243 case CMD_imap: case CMD_inoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2244 case CMD_cmap: case CMD_cnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2245 case CMD_lmap: case CMD_lnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2246 case CMD_smap: case CMD_snoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2247 case CMD_tmap: case CMD_tnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2248 case CMD_xmap: case CMD_xnoremap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2249 return set_context_in_map_cmd(xp, cmd, arg, forceit, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2250 FALSE, FALSE, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2251 case CMD_unmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2252 case CMD_nunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2253 case CMD_vunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2254 case CMD_ounmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2255 case CMD_iunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2256 case CMD_cunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2257 case CMD_lunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2258 case CMD_sunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2259 case CMD_tunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2260 case CMD_xunmap: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2261 return set_context_in_map_cmd(xp, cmd, arg, forceit, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2262 FALSE, TRUE, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2263 case CMD_mapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2264 case CMD_nmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2265 case CMD_vmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2266 case CMD_omapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2267 case CMD_imapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2268 case CMD_cmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2269 case CMD_lmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2270 case CMD_smapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2271 case CMD_tmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2272 case CMD_xmapclear: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2273 xp->xp_context = EXPAND_MAPCLEAR; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2274 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2275 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2276 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2277 case CMD_abbreviate: case CMD_noreabbrev: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2278 case CMD_cabbrev: case CMD_cnoreabbrev: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2279 case CMD_iabbrev: case CMD_inoreabbrev: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2280 return set_context_in_map_cmd(xp, cmd, arg, forceit, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2281 TRUE, FALSE, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2282 case CMD_unabbreviate: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2283 case CMD_cunabbrev: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2284 case CMD_iunabbrev: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2285 return set_context_in_map_cmd(xp, cmd, arg, forceit, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2286 TRUE, TRUE, cmdidx); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2287 #ifdef FEAT_MENU |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2288 case CMD_menu: case CMD_noremenu: case CMD_unmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2289 case CMD_amenu: case CMD_anoremenu: case CMD_aunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2290 case CMD_nmenu: case CMD_nnoremenu: case CMD_nunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2291 case CMD_vmenu: case CMD_vnoremenu: case CMD_vunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2292 case CMD_omenu: case CMD_onoremenu: case CMD_ounmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2293 case CMD_imenu: case CMD_inoremenu: case CMD_iunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2294 case CMD_cmenu: case CMD_cnoremenu: case CMD_cunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2295 case CMD_tlmenu: case CMD_tlnoremenu: case CMD_tlunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2296 case CMD_tmenu: case CMD_tunmenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2297 case CMD_popup: case CMD_tearoff: case CMD_emenu: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2298 return set_context_in_menu_cmd(xp, cmd, arg, forceit); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2299 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2300 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2301 case CMD_colorscheme: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2302 xp->xp_context = EXPAND_COLORS; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2303 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2304 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2305 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2306 case CMD_compiler: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2307 xp->xp_context = EXPAND_COMPILER; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2308 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2309 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2310 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2311 case CMD_ownsyntax: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2312 xp->xp_context = EXPAND_OWNSYNTAX; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2313 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2314 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2315 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2316 case CMD_setfiletype: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2317 xp->xp_context = EXPAND_FILETYPE; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2318 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2319 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2320 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2321 case CMD_packadd: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2322 xp->xp_context = EXPAND_PACKADD; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2323 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2324 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2325 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2326 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2327 case CMD_language: |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2328 return set_context_in_lang_cmd(xp, arg); |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2329 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2330 #if defined(FEAT_PROFILE) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2331 case CMD_profile: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2332 set_context_in_profile_cmd(xp, arg); |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2333 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2334 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2335 case CMD_behave: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2336 xp->xp_context = EXPAND_BEHAVE; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2337 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2338 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2339 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2340 case CMD_messages: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2341 xp->xp_context = EXPAND_MESSAGES; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2342 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2343 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2344 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2345 case CMD_history: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2346 xp->xp_context = EXPAND_HISTORY; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2347 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2348 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2349 #if defined(FEAT_PROFILE) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2350 case CMD_syntime: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2351 xp->xp_context = EXPAND_SYNTIME; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2352 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2353 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2354 #endif |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2355 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2356 case CMD_argdelete: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2357 while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2358 arg = xp->xp_pattern + 1; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2359 xp->xp_context = EXPAND_ARGLIST; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2360 xp->xp_pattern = arg; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2361 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2362 |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2363 #ifdef FEAT_EVAL |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2364 case CMD_breakadd: |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2365 case CMD_profdel: |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2366 case CMD_breakdel: |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2367 return set_context_in_breakadd_cmd(xp, arg, cmdidx); |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2368 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2369 case CMD_scriptnames: |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2370 return set_context_in_scriptnames_cmd(xp, arg); |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2371 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2372 |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2373 default: |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2374 break; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2375 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2376 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2377 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2378 |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2379 /* |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2380 * This is all pretty much copied from do_one_cmd(), with all the extra stuff |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2381 * we don't need/want deleted. Maybe this could be done better if we didn't |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2382 * repeat all this stuff. The only problem is that they may not stay |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2383 * perfectly compatible with each other, but then the command line syntax |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2384 * probably won't change that much -- webb. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2385 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2386 static char_u * |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2387 set_one_cmd_context( |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2388 expand_T *xp, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2389 char_u *buff) // buffer for command string |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2390 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2391 char_u *p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2392 char_u *cmd, *arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2393 int len = 0; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2394 exarg_T ea; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2395 int compl = EXPAND_NOTHING; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2396 int forceit = FALSE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2397 int usefilter = FALSE; // filter instead of file name |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2398 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2399 ExpandInit(xp); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2400 xp->xp_pattern = buff; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2401 xp->xp_line = buff; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2402 xp->xp_context = EXPAND_COMMANDS; // Default until we get past command |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2403 ea.argt = 0; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2404 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2405 // 1. skip comment lines and leading space, colons or bars |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2406 for (cmd = buff; vim_strchr((char_u *)" \t:|", *cmd) != NULL; cmd++) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2407 ; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2408 xp->xp_pattern = cmd; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2409 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2410 if (*cmd == NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2411 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2412 if (*cmd == '"') // ignore comment lines |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2413 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2414 xp->xp_context = EXPAND_NOTHING; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2415 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2416 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2417 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2418 // 3. Skip over the range to find the command. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2419 cmd = skip_range(cmd, TRUE, &xp->xp_context); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2420 xp->xp_pattern = cmd; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2421 if (*cmd == NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2422 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2423 if (*cmd == '"') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2424 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2425 xp->xp_context = EXPAND_NOTHING; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2426 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2427 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2428 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2429 if (*cmd == '|' || *cmd == '\n') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2430 return cmd + 1; // There's another command |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2431 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2432 // Get the command index. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2433 p = set_cmd_index(cmd, &ea, xp, &compl); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2434 if (p == NULL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2435 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2436 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2437 xp->xp_context = EXPAND_NOTHING; // Default now that we're past command |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2438 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2439 if (*p == '!') // forced commands |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2440 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2441 forceit = TRUE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2442 ++p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2443 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2444 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2445 // 6. parse arguments |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2446 if (!IS_USER_CMDIDX(ea.cmdidx)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2447 ea.argt = excmd_get_argt(ea.cmdidx); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2448 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2449 arg = skipwhite(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2450 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2451 // Skip over ++argopt argument |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2452 if ((ea.argt & EX_ARGOPT) && *arg != NUL && STRNCMP(arg, "++", 2) == 0) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2453 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2454 p = arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2455 while (*p && !vim_isspace(*p)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2456 MB_PTR_ADV(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2457 arg = skipwhite(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2458 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2459 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2460 if (ea.cmdidx == CMD_write || ea.cmdidx == CMD_update) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2461 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2462 if (*arg == '>') // append |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2463 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2464 if (*++arg == '>') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2465 ++arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2466 arg = skipwhite(arg); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2467 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2468 else if (*arg == '!' && ea.cmdidx == CMD_write) // :w !filter |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2469 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2470 ++arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2471 usefilter = TRUE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2472 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2473 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2474 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2475 if (ea.cmdidx == CMD_read) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2476 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2477 usefilter = forceit; // :r! filter if forced |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2478 if (*arg == '!') // :r !filter |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2479 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2480 ++arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2481 usefilter = TRUE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2482 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2483 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2484 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2485 if (ea.cmdidx == CMD_lshift || ea.cmdidx == CMD_rshift) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2486 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2487 while (*arg == *cmd) // allow any number of '>' or '<' |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2488 ++arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2489 arg = skipwhite(arg); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2490 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2491 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2492 // Does command allow "+command"? |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2493 if ((ea.argt & EX_CMDARG) && !usefilter && *arg == '+') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2494 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2495 // Check if we're in the +command |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2496 p = arg + 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2497 arg = skip_cmd_arg(arg, FALSE); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2498 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2499 // Still touching the command after '+'? |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2500 if (*arg == NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2501 return p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2502 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2503 // Skip space(s) after +command to get to the real argument |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2504 arg = skipwhite(arg); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2505 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2506 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2507 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2508 // Check for '|' to separate commands and '"' to start comments. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2509 // Don't do this for ":read !cmd" and ":write !cmd". |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2510 if ((ea.argt & EX_TRLBAR) && !usefilter) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2511 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2512 p = arg; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2513 // ":redir @" is not the start of a comment |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2514 if (ea.cmdidx == CMD_redir && p[0] == '@' && p[1] == '"') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2515 p += 2; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2516 while (*p) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2517 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2518 if (*p == Ctrl_V) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2519 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2520 if (p[1] != NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2521 ++p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2522 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2523 else if ( (*p == '"' && !(ea.argt & EX_NOTRLCOM)) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2524 || *p == '|' || *p == '\n') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2525 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2526 if (*(p - 1) != '\\') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2527 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2528 if (*p == '|' || *p == '\n') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2529 return p + 1; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2530 return NULL; // It's a comment |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2531 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2532 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2533 MB_PTR_ADV(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2534 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2535 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2536 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2537 if (!(ea.argt & EX_EXTRA) && *arg != NUL |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2538 && vim_strchr((char_u *)"|\"", *arg) == NULL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2539 // no arguments allowed but there is something |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2540 return NULL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2541 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2542 // Find start of last argument (argument just before cursor): |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2543 p = buff; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2544 xp->xp_pattern = p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2545 len = (int)STRLEN(buff); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2546 while (*p && p < buff + len) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2547 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2548 if (*p == ' ' || *p == TAB) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2549 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2550 // argument starts after a space |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2551 xp->xp_pattern = ++p; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2552 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2553 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2554 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2555 if (*p == '\\' && *(p + 1) != NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2556 ++p; // skip over escaped character |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2557 MB_PTR_ADV(p); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2558 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2559 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2560 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2561 if (ea.argt & EX_XFILE) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2562 set_context_for_wildcard_arg(&ea, arg, usefilter, xp, &compl); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2563 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2564 // 6. Switch on command name. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2565 return set_context_by_cmdname(cmd, ea.cmdidx, xp, arg, ea.argt, compl, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2566 forceit); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2567 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2568 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2569 /* |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2570 * Set the completion context in 'xp' for command 'str' |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2571 */ |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2572 void |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2573 set_cmd_context( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2574 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2575 char_u *str, // start of command line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2576 int len, // length of command line (excl. NUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2577 int col, // position of cursor |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2578 int use_ccline UNUSED) // use ccline for info |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2579 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2580 #ifdef FEAT_EVAL |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2581 cmdline_info_T *ccline = get_cmdline_info(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2582 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2583 int old_char = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2584 char_u *nextcomm; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2585 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2586 // Avoid a UMR warning from Purify, only save the character if it has been |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2587 // written before. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2588 if (col < len) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2589 old_char = str[col]; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2590 str[col] = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2591 nextcomm = str; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2592 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2593 #ifdef FEAT_EVAL |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2594 if (use_ccline && ccline->cmdfirstc == '=') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2595 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2596 // pass CMD_SIZE because there is no real command |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2597 set_context_for_expression(xp, str, CMD_SIZE); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2598 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2599 else if (use_ccline && ccline->input_fn) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2600 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2601 xp->xp_context = ccline->xp_context; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2602 xp->xp_pattern = ccline->cmdbuff; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2603 xp->xp_arg = ccline->xp_arg; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2604 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2605 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2606 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2607 while (nextcomm != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2608 nextcomm = set_one_cmd_context(xp, nextcomm); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2609 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2610 // Store the string here so that call_user_expand_func() can get to them |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2611 // easily. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2612 xp->xp_line = str; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2613 xp->xp_col = col; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2614 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2615 str[col] = old_char; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2616 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2617 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2618 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2619 * Expand the command line "str" from context "xp". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2620 * "xp" must have been set by set_cmd_context(). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2621 * xp->xp_pattern points into "str", to where the text that is to be expanded |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2622 * starts. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2623 * Returns EXPAND_UNSUCCESSFUL when there is something illegal before the |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2624 * cursor. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2625 * Returns EXPAND_NOTHING when there is nothing to expand, might insert the |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2626 * key that triggered expansion literally. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2627 * Returns EXPAND_OK otherwise. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2628 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2629 int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2630 expand_cmdline( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2631 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2632 char_u *str, // start of command line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2633 int col, // position of cursor |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2634 int *matchcount, // return: nr of matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2635 char_u ***matches) // return: array of pointers to matches |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2636 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2637 char_u *file_str = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2638 int options = WILD_ADD_SLASH|WILD_SILENT; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2639 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2640 if (xp->xp_context == EXPAND_UNSUCCESSFUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2641 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2642 beep_flush(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2643 return EXPAND_UNSUCCESSFUL; // Something illegal on command line |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2644 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2645 if (xp->xp_context == EXPAND_NOTHING) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2646 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2647 // Caller can use the character as a normal char instead |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2648 return EXPAND_NOTHING; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2649 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2650 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2651 // add star to file name, or convert to regexp if not exp. files. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2652 xp->xp_pattern_len = (int)(str + col - xp->xp_pattern); |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2653 if (cmdline_fuzzy_completion_supported(xp)) |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2654 // If fuzzy matching, don't modify the search string |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2655 file_str = vim_strsave(xp->xp_pattern); |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2656 else |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2657 { |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2658 file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context); |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2659 if (file_str == NULL) |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2660 return EXPAND_UNSUCCESSFUL; |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2661 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2662 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2663 if (p_wic) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2664 options += WILD_ICASE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2665 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2666 // find all files that match the description |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2667 if (ExpandFromContext(xp, file_str, matches, matchcount, options) == FAIL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2668 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2669 *matchcount = 0; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2670 *matches = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2671 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2672 vim_free(file_str); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2673 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2674 return EXPAND_OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2675 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2676 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2677 /* |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2678 * Expand file or directory names. |
30325
58fb880f3607
patch 9.0.0498: various small issues
Bram Moolenaar <Bram@vim.org>
parents:
30043
diff
changeset
|
2679 * Returns OK or FAIL. |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2680 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2681 static int |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2682 expand_files_and_dirs( |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2683 expand_T *xp, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2684 char_u *pat, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2685 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2686 int *numMatches, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2687 int flags, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2688 int options) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2689 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2690 int free_pat = FALSE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2691 int i; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2692 int ret; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2693 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2694 // for ":set path=" and ":set tags=" halve backslashes for escaped |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2695 // space |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2696 if (xp->xp_backslash != XP_BS_NONE) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2697 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2698 free_pat = TRUE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2699 pat = vim_strsave(pat); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2700 for (i = 0; pat[i]; ++i) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2701 if (pat[i] == '\\') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2702 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2703 if (xp->xp_backslash == XP_BS_THREE |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2704 && pat[i + 1] == '\\' |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2705 && pat[i + 2] == '\\' |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2706 && pat[i + 3] == ' ') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2707 STRMOVE(pat + i, pat + i + 3); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2708 if (xp->xp_backslash == XP_BS_ONE |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2709 && pat[i + 1] == ' ') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2710 STRMOVE(pat + i, pat + i + 1); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2711 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2712 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2713 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2714 if (xp->xp_context == EXPAND_FILES) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2715 flags |= EW_FILE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2716 else if (xp->xp_context == EXPAND_FILES_IN_PATH) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2717 flags |= (EW_FILE | EW_PATH); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2718 else |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2719 flags = (flags | EW_DIR) & ~EW_FILE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2720 if (options & WILD_ICASE) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2721 flags |= EW_ICASE; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2722 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2723 // Expand wildcards, supporting %:h and the like. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2724 ret = expand_wildcards_eval(&pat, numMatches, matches, flags); |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2725 if (free_pat) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2726 vim_free(pat); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2727 #ifdef BACKSLASH_IN_FILENAME |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2728 if (p_csl[0] != NUL && (options & WILD_IGNORE_COMPLETESLASH) == 0) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2729 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2730 int j; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2731 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2732 for (j = 0; j < *numMatches; ++j) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2733 { |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2734 char_u *ptr = (*matches)[j]; |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2735 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2736 while (*ptr != NUL) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2737 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2738 if (p_csl[0] == 's' && *ptr == '\\') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2739 *ptr = '/'; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2740 else if (p_csl[0] == 'b' && *ptr == '/') |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2741 *ptr = '\\'; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2742 ptr += (*mb_ptr2len)(ptr); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2743 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2744 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2745 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2746 #endif |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2747 return ret; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2748 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2749 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2750 /* |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2751 * Function given to ExpandGeneric() to obtain the possible arguments of the |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2752 * ":behave {mswin,xterm}" command. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2753 */ |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2754 static char_u * |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2755 get_behave_arg(expand_T *xp UNUSED, int idx) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2756 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2757 if (idx == 0) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2758 return (char_u *)"mswin"; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2759 if (idx == 1) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2760 return (char_u *)"xterm"; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2761 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2762 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2763 |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
2764 #ifdef FEAT_EVAL |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2765 /* |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2766 * Function given to ExpandGeneric() to obtain the possible arguments of the |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2767 * ":breakadd {expr, file, func, here}" command. |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2768 * ":breakdel {func, file, here}" command. |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2769 */ |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2770 static char_u * |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2771 get_breakadd_arg(expand_T *xp UNUSED, int idx) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2772 { |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2773 char *opts[] = {"expr", "file", "func", "here"}; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2774 |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2775 if (idx >=0 && idx <= 3) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2776 { |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2777 // breakadd {expr, file, func, here} |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2778 if (breakpt_expand_what == EXP_BREAKPT_ADD) |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2779 return (char_u *)opts[idx]; |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2780 else if (breakpt_expand_what == EXP_BREAKPT_DEL) |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2781 { |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2782 // breakdel {func, file, here} |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2783 if (idx <= 2) |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2784 return (char_u *)opts[idx + 1]; |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2785 } |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2786 else |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2787 { |
28091
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2788 // profdel {func, file} |
554f493902ea
patch 8.2.4570: no command line completion for :profile and :profdel
Bram Moolenaar <Bram@vim.org>
parents:
28081
diff
changeset
|
2789 if (idx <= 1) |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2790 return (char_u *)opts[idx + 1]; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2791 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2792 } |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2793 return NULL; |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2794 } |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2795 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2796 /* |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2797 * Function given to ExpandGeneric() to obtain the possible arguments for the |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2798 * ":scriptnames" command. |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2799 */ |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2800 static char_u * |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2801 get_scriptnames_arg(expand_T *xp UNUSED, int idx) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2802 { |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2803 scriptitem_T *si; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2804 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2805 if (!SCRIPT_ID_VALID(idx + 1)) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2806 return NULL; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2807 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2808 si = SCRIPT_ITEM(idx + 1); |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2809 home_replace(NULL, si->sn_name, NameBuff, MAXPATHL, TRUE); |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2810 return NameBuff; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2811 } |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2812 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2813 |
17835
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2814 /* |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2815 * Function given to ExpandGeneric() to obtain the possible arguments of the |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2816 * ":messages {clear}" command. |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2817 */ |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2818 static char_u * |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2819 get_messages_arg(expand_T *xp UNUSED, int idx) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2820 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2821 if (idx == 0) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2822 return (char_u *)"clear"; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2823 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2824 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2825 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2826 static char_u * |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2827 get_mapclear_arg(expand_T *xp UNUSED, int idx) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2828 { |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2829 if (idx == 0) |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2830 return (char_u *)"<buffer>"; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2831 return NULL; |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2832 } |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2833 |
fd6c8dc33152
patch 8.1.1914: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
17801
diff
changeset
|
2834 /* |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2835 * Do the expansion based on xp->xp_context and 'rmp'. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2836 */ |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2837 static int |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2838 ExpandOther( |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
2839 char_u *pat, |
27904
7422add1afd1
patch 8.2.4477: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27899
diff
changeset
|
2840 expand_T *xp, |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2841 regmatch_T *rmp, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2842 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2843 int *numMatches) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2844 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2845 static struct expgen |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2846 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2847 int context; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2848 char_u *((*func)(expand_T *, int)); |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2849 int ic; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2850 int escaped; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2851 } tab[] = |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2852 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2853 {EXPAND_COMMANDS, get_command_name, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2854 {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2855 {EXPAND_MAPCLEAR, get_mapclear_arg, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2856 {EXPAND_MESSAGES, get_messages_arg, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2857 {EXPAND_HISTORY, get_history_arg, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2858 {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2859 {EXPAND_USER_ADDR_TYPE, get_user_cmd_addr_type, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2860 {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2861 {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2862 {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2863 #ifdef FEAT_EVAL |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2864 {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2865 {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2866 {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2867 {EXPAND_DISASSEMBLE, get_disassemble_argument, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2868 {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2869 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2870 #ifdef FEAT_MENU |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2871 {EXPAND_MENUS, get_menu_name, FALSE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2872 {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2873 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2874 #ifdef FEAT_SYN_HL |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2875 {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2876 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2877 #ifdef FEAT_PROFILE |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2878 {EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2879 #endif |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2880 {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2881 {EXPAND_EVENTS, get_event_name, TRUE, FALSE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2882 {EXPAND_AUGROUP, get_augroup_name, TRUE, FALSE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2883 #ifdef FEAT_CSCOPE |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2884 {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2885 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2886 #ifdef FEAT_SIGNS |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2887 {EXPAND_SIGN, get_sign_name, TRUE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2888 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2889 #ifdef FEAT_PROFILE |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2890 {EXPAND_PROFILE, get_profile_name, TRUE, TRUE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2891 #endif |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2892 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE) |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2893 {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2894 {EXPAND_LOCALES, get_locales, TRUE, FALSE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2895 #endif |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2896 {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2897 {EXPAND_USER, get_users, TRUE, FALSE}, |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2898 {EXPAND_ARGLIST, get_arglist_name, TRUE, FALSE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2899 #ifdef FEAT_EVAL |
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2900 {EXPAND_BREAKPOINT, get_breakadd_arg, TRUE, TRUE}, |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
2901 {EXPAND_SCRIPTNAMES, get_scriptnames_arg, TRUE, FALSE}, |
28081
b737bfa876c5
patch 8.2.4565: no command line completion for :breakadd and :breakdel
Bram Moolenaar <Bram@vim.org>
parents:
27920
diff
changeset
|
2902 #endif |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2903 }; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2904 int i; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2905 int ret = FAIL; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2906 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2907 // Find a context in the table and call the ExpandGeneric() with the |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2908 // right function to do the expansion. |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2909 for (i = 0; i < (int)ARRAY_LENGTH(tab); ++i) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2910 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2911 if (xp->xp_context == tab[i].context) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2912 { |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2913 if (tab[i].ic) |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2914 rmp->rm_ic = TRUE; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
2915 ret = ExpandGeneric(pat, xp, rmp, matches, numMatches, |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
2916 tab[i].func, tab[i].escaped); |
27661
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2917 break; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2918 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2919 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2920 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2921 return ret; |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2922 } |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2923 |
2062de7c0edd
patch 8.2.4356: command line completion functions are very long
Bram Moolenaar <Bram@vim.org>
parents:
27630
diff
changeset
|
2924 /* |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2925 * Map wild expand options to flags for expand_wildcards() |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2926 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2927 static int |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2928 map_wildopts_to_ewflags(int options) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2929 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2930 int flags; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2931 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2932 flags = EW_DIR; // include directories |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2933 if (options & WILD_LIST_NOTFOUND) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2934 flags |= EW_NOTFOUND; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2935 if (options & WILD_ADD_SLASH) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2936 flags |= EW_ADDSLASH; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2937 if (options & WILD_KEEP_ALL) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2938 flags |= EW_KEEPALL; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2939 if (options & WILD_SILENT) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2940 flags |= EW_SILENT; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2941 if (options & WILD_NOERROR) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2942 flags |= EW_NOERROR; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2943 if (options & WILD_ALLLINKS) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2944 flags |= EW_ALLLINKS; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2945 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2946 return flags; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2947 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2948 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2949 /* |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2950 * Do the expansion based on xp->xp_context and "pat". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2951 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2952 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2953 ExpandFromContext( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2954 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2955 char_u *pat, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2956 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2957 int *numMatches, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2958 int options) // WILD_ flags |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2959 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2960 regmatch_T regmatch; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2961 int ret; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2962 int flags; |
19556
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
2963 char_u *tofree = NULL; |
27906
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
2964 int fuzzy = cmdline_fuzzy_complete(pat) |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
2965 && cmdline_fuzzy_completion_supported(xp); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2966 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
2967 flags = map_wildopts_to_ewflags(options); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2968 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2969 if (xp->xp_context == EXPAND_FILES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2970 || xp->xp_context == EXPAND_DIRECTORIES |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2971 || xp->xp_context == EXPAND_FILES_IN_PATH) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2972 return expand_files_and_dirs(xp, pat, matches, numMatches, flags, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2973 options); |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2974 |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2975 *matches = (char_u **)""; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2976 *numMatches = 0; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2977 if (xp->xp_context == EXPAND_HELP) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2978 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2979 // With an empty argument we would get all the help tags, which is |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2980 // very slow. Get matches for "help" instead. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2981 if (find_help_tags(*pat == NUL ? (char_u *)"help" : pat, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2982 numMatches, matches, FALSE) == OK) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2983 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2984 #ifdef FEAT_MULTI_LANG |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2985 cleanup_help_tags(*numMatches, *matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2986 #endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2987 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2988 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2989 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2990 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2991 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2992 if (xp->xp_context == EXPAND_SHELLCMD) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2993 return expand_shellcmd(pat, matches, numMatches, flags); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2994 if (xp->xp_context == EXPAND_OLD_SETTING) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2995 return ExpandOldSetting(numMatches, matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
2996 if (xp->xp_context == EXPAND_BUFFERS) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
2997 return ExpandBufnames(pat, numMatches, matches, options); |
18987
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2998 #ifdef FEAT_DIFF |
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
2999 if (xp->xp_context == EXPAND_DIFF_BUFFERS) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3000 return ExpandBufnames(pat, numMatches, matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3001 options | BUF_DIFF_FILTER); |
18987
e378907d79bf
patch 8.2.0054: :diffget and :diffput don't have good completion
Bram Moolenaar <Bram@vim.org>
parents:
18713
diff
changeset
|
3002 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3003 if (xp->xp_context == EXPAND_TAGS |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3004 || xp->xp_context == EXPAND_TAGS_LISTFILES) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3005 return expand_tags(xp->xp_context == EXPAND_TAGS, pat, numMatches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3006 matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3007 if (xp->xp_context == EXPAND_COLORS) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3008 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3009 char *directories[] = {"colors", NULL}; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3010 return ExpandRTDir(pat, DIP_START + DIP_OPT, numMatches, matches, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3011 directories); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3012 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3013 if (xp->xp_context == EXPAND_COMPILER) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3014 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3015 char *directories[] = {"compiler", NULL}; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3016 return ExpandRTDir(pat, 0, numMatches, matches, directories); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3017 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3018 if (xp->xp_context == EXPAND_OWNSYNTAX) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3019 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3020 char *directories[] = {"syntax", NULL}; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3021 return ExpandRTDir(pat, 0, numMatches, matches, directories); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3022 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3023 if (xp->xp_context == EXPAND_FILETYPE) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3024 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3025 char *directories[] = {"syntax", "indent", "ftplugin", NULL}; |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3026 return ExpandRTDir(pat, 0, numMatches, matches, directories); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3027 } |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3028 #if defined(FEAT_EVAL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3029 if (xp->xp_context == EXPAND_USER_LIST) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3030 return ExpandUserList(xp, matches, numMatches); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3031 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3032 if (xp->xp_context == EXPAND_PACKADD) |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3033 return ExpandPackAddDir(pat, numMatches, matches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3034 |
19556
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3035 // When expanding a function name starting with s:, match the <SNR>nr_ |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3036 // prefix. |
25682
17ba70005a2e
patch 8.2.3377: Vim9: :disass completion does not understand "s:"
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
3037 if ((xp->xp_context == EXPAND_USER_FUNC |
17ba70005a2e
patch 8.2.3377: Vim9: :disass completion does not understand "s:"
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
3038 || xp->xp_context == EXPAND_DISASSEMBLE) |
17ba70005a2e
patch 8.2.3377: Vim9: :disass completion does not understand "s:"
Bram Moolenaar <Bram@vim.org>
parents:
25302
diff
changeset
|
3039 && STRNCMP(pat, "^s:", 3) == 0) |
19556
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3040 { |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3041 int len = (int)STRLEN(pat) + 20; |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3042 |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3043 tofree = alloc(len); |
27722
637ccebaf328
patch 8.2.4387: command line completion doesn't always work properly
Bram Moolenaar <Bram@vim.org>
parents:
27680
diff
changeset
|
3044 if (tofree == NULL) |
637ccebaf328
patch 8.2.4387: command line completion doesn't always work properly
Bram Moolenaar <Bram@vim.org>
parents:
27680
diff
changeset
|
3045 return FAIL; |
19560
df0a6cba5c3d
patch 8.2.0337: build fails on a few systems
Bram Moolenaar <Bram@vim.org>
parents:
19556
diff
changeset
|
3046 vim_snprintf((char *)tofree, len, "^<SNR>\\d\\+_%s", pat + 3); |
19556
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3047 pat = tofree; |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3048 } |
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3049 |
27906
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3050 if (!fuzzy) |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3051 { |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3052 regmatch.regprog = vim_regcomp(pat, magic_isset() ? RE_MAGIC : 0); |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3053 if (regmatch.regprog == NULL) |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3054 return FAIL; |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3055 |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3056 // set ignore-case according to p_ic, p_scs and pat |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3057 regmatch.rm_ic = ignorecase(pat); |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3058 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3059 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3060 if (xp->xp_context == EXPAND_SETTINGS |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3061 || xp->xp_context == EXPAND_BOOL_SETTINGS) |
28786
fd5942a62312
patch 8.2.4917: fuzzy expansion of option names is not right
Bram Moolenaar <Bram@vim.org>
parents:
28757
diff
changeset
|
3062 ret = ExpandSettings(xp, ®match, pat, numMatches, matches, fuzzy); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3063 else if (xp->xp_context == EXPAND_MAPPINGS) |
27908
099c2e612827
patch 8.2.4479: no fuzzy completieon for maps and abbreviations
Bram Moolenaar <Bram@vim.org>
parents:
27906
diff
changeset
|
3064 ret = ExpandMappings(pat, ®match, numMatches, matches); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3065 #if defined(FEAT_EVAL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3066 else if (xp->xp_context == EXPAND_USER_DEFINED) |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3067 ret = ExpandUserDefined(pat, xp, ®match, matches, numMatches); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3068 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3069 else |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3070 ret = ExpandOther(pat, xp, ®match, matches, numMatches); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3071 |
27906
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3072 if (!fuzzy) |
11141b2ec0e1
patch 8.2.4478: crash when using fuzzy completion
Bram Moolenaar <Bram@vim.org>
parents:
27904
diff
changeset
|
3073 vim_regfree(regmatch.regprog); |
19556
ff5048b0ccfe
patch 8.2.0335: no completion for :disassemble
Bram Moolenaar <Bram@vim.org>
parents:
19077
diff
changeset
|
3074 vim_free(tofree); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3075 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3076 return ret; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3077 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3078 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3079 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3080 * Expand a list of names. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3081 * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3082 * Generic function for command line completion. It calls a function to |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3083 * obtain strings, one by one. The strings are matched against a regexp |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3084 * program. Matching strings are copied into an array, which is returned. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3085 * |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3086 * If 'fuzzy' is TRUE, then fuzzy matching is used. Otherwise, regex matching |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3087 * is used. |
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3088 * |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3089 * Returns OK when no problems encountered, FAIL for error (out of memory). |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3090 */ |
19053
cec4da73951a
patch 8.2.0087: crash in command line expansion when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
18987
diff
changeset
|
3091 static int |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3092 ExpandGeneric( |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3093 char_u *pat, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3094 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3095 regmatch_T *regmatch, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3096 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3097 int *numMatches, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3098 char_u *((*func)(expand_T *, int)), |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3099 // returns a string from the list |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3100 int escaped) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3101 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3102 int i; |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3103 garray_T ga; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3104 char_u *str; |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3105 fuzmatch_str_T *fuzmatch = NULL; |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3106 int score = 0; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3107 int fuzzy; |
27879
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3108 int match; |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3109 int sort_matches = FALSE; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3110 int funcsort = FALSE; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3111 |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3112 fuzzy = cmdline_fuzzy_complete(pat); |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3113 *matches = NULL; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3114 *numMatches = 0; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3115 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3116 if (!fuzzy) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3117 ga_init2(&ga, sizeof(char *), 30); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3118 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3119 ga_init2(&ga, sizeof(fuzmatch_str_T), 30); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3120 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3121 for (i = 0; ; ++i) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3122 { |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3123 str = (*func)(xp, i); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3124 if (str == NULL) // end of list |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3125 break; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3126 if (*str == NUL) // skip empty strings |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3127 continue; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3128 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3129 if (xp->xp_pattern[0] != NUL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3130 { |
27879
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3131 if (!fuzzy) |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3132 match = vim_regexec(regmatch, str, (colnr_T)0); |
27879
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3133 else |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3134 { |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3135 score = fuzzy_match_str(str, pat); |
27879
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3136 match = (score != 0); |
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3137 } |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3138 } |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3139 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3140 match = TRUE; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3141 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3142 if (!match) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3143 continue; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3144 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3145 if (escaped) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3146 str = vim_strsave_escaped(str, (char_u *)" \t\\."); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3147 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3148 str = vim_strsave(str); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3149 if (str == NULL) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3150 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3151 if (!fuzzy) |
27879
76e2115dddb8
patch 8.2.4465: fuzzy completion does not order matches properly
Bram Moolenaar <Bram@vim.org>
parents:
27875
diff
changeset
|
3152 { |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3153 ga_clear_strings(&ga); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3154 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3155 } |
28415
813660733869
patch 8.2.4732: duplicate code to free fuzzy matches
Bram Moolenaar <Bram@vim.org>
parents:
28183
diff
changeset
|
3156 fuzmatch_str_free(ga.ga_data, ga.ga_len); |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3157 return FAIL; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3158 } |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3159 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3160 if (ga_grow(&ga, 1) == FAIL) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3161 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3162 vim_free(str); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3163 break; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3164 } |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3165 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3166 if (fuzzy) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3167 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3168 fuzmatch = &((fuzmatch_str_T *)ga.ga_data)[ga.ga_len]; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3169 fuzmatch->idx = ga.ga_len; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3170 fuzmatch->str = str; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3171 fuzmatch->score = score; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3172 } |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3173 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3174 ((char_u **)ga.ga_data)[ga.ga_len] = str; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3175 |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3176 #ifdef FEAT_MENU |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3177 if (func == get_menu_names) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3178 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3179 // test for separator added by get_menu_names() |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3180 str += STRLEN(str) - 1; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3181 if (*str == '\001') |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3182 *str = '.'; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3183 } |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3184 #endif |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3185 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3186 ++ga.ga_len; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3187 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3188 |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3189 if (ga.ga_len == 0) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3190 return OK; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3191 |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3192 // sort the matches when using regular expression matching and sorting |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3193 // applies to the completion context. Menus and scriptnames should be kept |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3194 // in the specified order. |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3195 if (!fuzzy && xp->xp_context != EXPAND_MENUNAMES |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3196 && xp->xp_context != EXPAND_MENUS |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3197 && xp->xp_context != EXPAND_SCRIPTNAMES) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3198 sort_matches = TRUE; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3199 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3200 // <SNR> functions should be sorted to the end. |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3201 if (xp->xp_context == EXPAND_EXPRESSION |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3202 || xp->xp_context == EXPAND_FUNCTIONS |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3203 || xp->xp_context == EXPAND_USER_FUNC |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3204 || xp->xp_context == EXPAND_DISASSEMBLE) |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3205 funcsort = TRUE; |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3206 |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3207 // Sort the matches. |
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3208 if (sort_matches) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3209 { |
28183
2b595cee4c85
patch 8.2.4617: no completion for :scriptnames
Bram Moolenaar <Bram@vim.org>
parents:
28166
diff
changeset
|
3210 if (funcsort) |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3211 // <SNR> functions should be sorted to the end. |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3212 qsort((void *)ga.ga_data, (size_t)ga.ga_len, sizeof(char_u *), |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3213 sort_func_compare); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3214 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3215 sort_strings((char_u **)ga.ga_data, ga.ga_len); |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3216 } |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3217 |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3218 if (!fuzzy) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3219 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3220 *matches = ga.ga_data; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3221 *numMatches = ga.ga_len; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3222 } |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3223 else |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3224 { |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3225 if (fuzzymatches_to_strmatches(ga.ga_data, matches, ga.ga_len, |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3226 funcsort) == FAIL) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3227 return FAIL; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3228 *numMatches = ga.ga_len; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3229 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3230 |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17779
diff
changeset
|
3231 #if defined(FEAT_SYN_HL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3232 // Reset the variables used for special highlight names expansion, so that |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3233 // they don't show up when getting normal highlight names by ID. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3234 reset_expand_highlight(); |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17779
diff
changeset
|
3235 #endif |
27875
ae38d2e81fca
patch 8.2.4463: completion only uses strict matching
Bram Moolenaar <Bram@vim.org>
parents:
27760
diff
changeset
|
3236 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3237 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3238 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3239 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3240 /* |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3241 * Expand shell command matches in one directory of $PATH. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3242 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3243 static void |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3244 expand_shellcmd_onedir( |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3245 char_u *buf, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3246 char_u *s, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3247 size_t l, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3248 char_u *pat, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3249 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3250 int *numMatches, |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3251 int flags, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3252 hashtab_T *ht, |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3253 garray_T *gap) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3254 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3255 int ret; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3256 hash_T hash; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3257 hashitem_T *hi; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3258 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3259 vim_strncpy(buf, s, l); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3260 add_pathsep(buf); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3261 l = STRLEN(buf); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3262 vim_strncpy(buf + l, pat, MAXPATHL - 1 - l); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3263 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3264 // Expand matches in one directory of $PATH. |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3265 ret = expand_wildcards(1, &buf, numMatches, matches, flags); |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3266 if (ret != OK) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3267 return; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3268 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3269 if (ga_grow(gap, *numMatches) == FAIL) |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3270 { |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3271 FreeWild(*numMatches, *matches); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3272 return; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3273 } |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3274 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3275 for (int i = 0; i < *numMatches; ++i) |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3276 { |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3277 char_u *name = (*matches)[i]; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3278 |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3279 if (STRLEN(name) > l) |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3280 { |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3281 // Check if this name was already found. |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3282 hash = hash_hash(name + l); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3283 hi = hash_lookup(ht, name + l, hash); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3284 if (HASHITEM_EMPTY(hi)) |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3285 { |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3286 // Remove the path that was prepended. |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3287 STRMOVE(name, name + l); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3288 ((char_u **)gap->ga_data)[gap->ga_len++] = name; |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3289 hash_add_item(ht, hi, name, hash); |
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3290 name = NULL; |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3291 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3292 } |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3293 vim_free(name); |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3294 } |
31083
20390549ce2f
patch 9.0.0876: code is indented more than needed
Bram Moolenaar <Bram@vim.org>
parents:
31065
diff
changeset
|
3295 vim_free(*matches); |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3296 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3297 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3298 /* |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3299 * Complete a shell command. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3300 * Returns FAIL or OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3301 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3302 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3303 expand_shellcmd( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3304 char_u *filepat, // pattern to match with command names |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3305 char_u ***matches, // return: array with matches |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3306 int *numMatches, // return: number of matches |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3307 int flagsarg) // EW_ flags |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3308 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3309 char_u *pat; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3310 int i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3311 char_u *path = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3312 int mustfree = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3313 garray_T ga; |
19077
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3314 char_u *buf; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3315 size_t l; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3316 char_u *s, *e; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3317 int flags = flagsarg; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3318 int did_curdir = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3319 hashtab_T found_ht; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3320 |
19077
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3321 buf = alloc(MAXPATHL); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3322 if (buf == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3323 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3324 |
19077
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3325 // for ":set path=" and ":set tags=" halve backslashes for escaped space |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3326 pat = vim_strsave(filepat); |
19077
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3327 if (pat == NULL) |
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3328 { |
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3329 vim_free(buf); |
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3330 return FAIL; |
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3331 } |
568cce19fd2b
patch 8.2.0099: use of NULL pointer when out of memory
Bram Moolenaar <Bram@vim.org>
parents:
19057
diff
changeset
|
3332 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3333 for (i = 0; pat[i]; ++i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3334 if (pat[i] == '\\' && pat[i + 1] == ' ') |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3335 STRMOVE(pat + i, pat + i + 1); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3336 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3337 flags |= EW_FILE | EW_EXEC | EW_SHELLCMD; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3338 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3339 if (pat[0] == '.' && (vim_ispathsep(pat[1]) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3340 || (pat[1] == '.' && vim_ispathsep(pat[2])))) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3341 path = (char_u *)"."; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3342 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3343 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3344 // For an absolute name we don't use $PATH. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3345 if (!mch_isFullName(pat)) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3346 path = vim_getenv((char_u *)"PATH", &mustfree); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3347 if (path == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3348 path = (char_u *)""; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3349 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3350 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3351 // Go over all directories in $PATH. Expand matches in that directory and |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3352 // collect them in "ga". When "." is not in $PATH also expand for the |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3353 // current directory, to find "subdir/cmd". |
27028
c9474ae175f4
patch 8.2.4043: using int for second argument of ga_init2()
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
3354 ga_init2(&ga, sizeof(char *), 10); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3355 hash_init(&found_ht); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3356 for (s = path; ; s = e) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3357 { |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3358 #if defined(MSWIN) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3359 e = vim_strchr(s, ';'); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3360 #else |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3361 e = vim_strchr(s, ':'); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3362 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3363 if (e == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3364 e = s + STRLEN(s); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3365 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3366 if (*s == NUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3367 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3368 if (did_curdir) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3369 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3370 // Find directories in the current directory, path is empty. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3371 did_curdir = TRUE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3372 flags |= EW_DIR; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3373 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3374 else if (STRNCMP(s, ".", (int)(e - s)) == 0) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3375 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3376 did_curdir = TRUE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3377 flags |= EW_DIR; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3378 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3379 else |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3380 // Do not match directories inside a $PATH item. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3381 flags &= ~EW_DIR; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3382 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3383 l = e - s; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3384 if (l > MAXPATHL - 5) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3385 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3386 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3387 expand_shellcmd_onedir(buf, s, l, pat, matches, numMatches, flags, |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3388 &found_ht, &ga); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3389 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3390 if (*e != NUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3391 ++e; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3392 } |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3393 *matches = ga.ga_data; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3394 *numMatches = ga.ga_len; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3395 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3396 vim_free(buf); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3397 vim_free(pat); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3398 if (mustfree) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3399 vim_free(path); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3400 hash_clear(&found_ht); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3401 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3402 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3403 |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3404 #if defined(FEAT_EVAL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3405 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3406 * Call "user_expand_func()" to invoke a user defined Vim script function and |
21477
8a0362947c3a
patch 8.2.1289: crash when using a custom completion function
Bram Moolenaar <Bram@vim.org>
parents:
21423
diff
changeset
|
3407 * return the result (either a string, a List or NULL). |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3408 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3409 static void * |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3410 call_user_expand_func( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3411 void *(*user_expand_func)(char_u *, int, typval_T *), |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3412 expand_T *xp) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3413 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3414 cmdline_info_T *ccline = get_cmdline_info(); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3415 int keep = 0; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3416 typval_T args[4]; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3417 sctx_T save_current_sctx = current_sctx; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3418 char_u *pat = NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3419 void *ret; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3420 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3421 if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3422 return NULL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3423 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3424 if (ccline->cmdbuff != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3425 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3426 keep = ccline->cmdbuff[ccline->cmdlen]; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3427 ccline->cmdbuff[ccline->cmdlen] = 0; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3428 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3429 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3430 pat = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3431 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3432 args[0].v_type = VAR_STRING; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3433 args[0].vval.v_string = pat; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3434 args[1].v_type = VAR_STRING; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3435 args[1].vval.v_string = xp->xp_line; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3436 args[2].v_type = VAR_NUMBER; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3437 args[2].vval.v_number = xp->xp_col; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3438 args[3].v_type = VAR_UNKNOWN; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3439 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3440 current_sctx = xp->xp_script_ctx; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3441 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3442 ret = user_expand_func(xp->xp_arg, 3, args); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3443 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3444 current_sctx = save_current_sctx; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3445 if (ccline->cmdbuff != NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3446 ccline->cmdbuff[ccline->cmdlen] = keep; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3447 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3448 vim_free(pat); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3449 return ret; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3450 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3451 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3452 /* |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3453 * Expand names with a function defined by the user (EXPAND_USER_DEFINED and |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3454 * EXPAND_USER_LIST). |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3455 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3456 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3457 ExpandUserDefined( |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3458 char_u *pat, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3459 expand_T *xp, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3460 regmatch_T *regmatch, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3461 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3462 int *numMatches) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3463 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3464 char_u *retstr; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3465 char_u *s; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3466 char_u *e; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3467 int keep; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3468 garray_T ga; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3469 int fuzzy; |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3470 int match; |
27920
8543d5a1103e
patch 8.2.4485: compiler warning for uninitialized variable
Bram Moolenaar <Bram@vim.org>
parents:
27916
diff
changeset
|
3471 int score = 0; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3472 |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3473 fuzzy = cmdline_fuzzy_complete(pat); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3474 *matches = NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3475 *numMatches = 0; |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3476 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3477 retstr = call_user_expand_func(call_func_retstr, xp); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3478 if (retstr == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3479 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3480 |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3481 if (!fuzzy) |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3482 ga_init2(&ga, sizeof(char *), 3); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3483 else |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3484 ga_init2(&ga, sizeof(fuzmatch_str_T), 3); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3485 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3486 for (s = retstr; *s != NUL; s = e) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3487 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3488 e = vim_strchr(s, '\n'); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3489 if (e == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3490 e = s + STRLEN(s); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3491 keep = *e; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3492 *e = NUL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3493 |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3494 if (xp->xp_pattern[0] != NUL) |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3495 { |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3496 if (!fuzzy) |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3497 match = vim_regexec(regmatch, s, (colnr_T)0); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3498 else |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3499 { |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3500 score = fuzzy_match_str(s, pat); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3501 match = (score != 0); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3502 } |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3503 } |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3504 else |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3505 match = TRUE; // match everything |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3506 |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3507 *e = keep; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3508 |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3509 if (match) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3510 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3511 if (ga_grow(&ga, 1) == FAIL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3512 break; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3513 if (!fuzzy) |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3514 ((char_u **)ga.ga_data)[ga.ga_len] = vim_strnsave(s, e - s); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3515 else |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3516 { |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3517 fuzmatch_str_T *fuzmatch = |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3518 &((fuzmatch_str_T *)ga.ga_data)[ga.ga_len]; |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3519 fuzmatch->idx = ga.ga_len; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3520 fuzmatch->str = vim_strnsave(s, e - s); |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3521 fuzmatch->score = score; |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3522 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3523 ++ga.ga_len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3524 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3525 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3526 if (*e != NUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3527 ++e; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3528 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3529 vim_free(retstr); |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3530 |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3531 if (ga.ga_len == 0) |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3532 return OK; |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3533 |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3534 if (!fuzzy) |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3535 { |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3536 *matches = ga.ga_data; |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3537 *numMatches = ga.ga_len; |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3538 } |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3539 else |
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3540 { |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3541 if (fuzzymatches_to_strmatches(ga.ga_data, matches, ga.ga_len, |
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3542 FALSE) == FAIL) |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3543 return FAIL; |
27916
6efa2f193c94
patch 8.2.4483: command completion makes two rounds to collect matches
Bram Moolenaar <Bram@vim.org>
parents:
27914
diff
changeset
|
3544 *numMatches = ga.ga_len; |
27914
9a997de62da2
patch 8.2.4482: no fuzzy cmdline completion for user defined completion
Bram Moolenaar <Bram@vim.org>
parents:
27912
diff
changeset
|
3545 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3546 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3547 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3548 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3549 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3550 * Expand names with a list returned by a function defined by the user. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3551 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3552 static int |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3553 ExpandUserList( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3554 expand_T *xp, |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3555 char_u ***matches, |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3556 int *numMatches) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3557 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3558 list_T *retlist; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3559 listitem_T *li; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3560 garray_T ga; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3561 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3562 *matches = NULL; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3563 *numMatches = 0; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3564 retlist = call_user_expand_func(call_func_retlist, xp); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3565 if (retlist == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3566 return FAIL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3567 |
27028
c9474ae175f4
patch 8.2.4043: using int for second argument of ga_init2()
Bram Moolenaar <Bram@vim.org>
parents:
26877
diff
changeset
|
3568 ga_init2(&ga, sizeof(char *), 3); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3569 // Loop over the items in the list. |
19888
435726a03481
patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents:
19560
diff
changeset
|
3570 FOR_ALL_LIST_ITEMS(retlist, li) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3571 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3572 if (li->li_tv.v_type != VAR_STRING || li->li_tv.vval.v_string == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3573 continue; // Skip non-string items and empty strings |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3574 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3575 if (ga_grow(&ga, 1) == FAIL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3576 break; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3577 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3578 ((char_u **)ga.ga_data)[ga.ga_len] = |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3579 vim_strsave(li->li_tv.vval.v_string); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3580 ++ga.ga_len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3581 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3582 list_unref(retlist); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3583 |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3584 *matches = ga.ga_data; |
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3585 *numMatches = ga.ga_len; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3586 return OK; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3587 } |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3588 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3589 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3590 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3591 * Expand "file" for all comma-separated directories in "path". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3592 * Adds the matches to "ga". Caller must init "ga". |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3593 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3594 void |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3595 globpath( |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3596 char_u *path, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3597 char_u *file, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3598 garray_T *ga, |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3599 int expand_options) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3600 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3601 expand_T xpc; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3602 char_u *buf; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3603 int i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3604 int num_p; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3605 char_u **p; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3606 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3607 buf = alloc(MAXPATHL); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3608 if (buf == NULL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3609 return; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3610 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3611 ExpandInit(&xpc); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3612 xpc.xp_context = EXPAND_FILES; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3613 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3614 // Loop over all entries in {path}. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3615 while (*path != NUL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3616 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3617 // Copy one item of the path to buf[] and concatenate the file name. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3618 copy_option_part(&path, buf, MAXPATHL, ","); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3619 if (STRLEN(buf) + STRLEN(file) + 2 < MAXPATHL) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3620 { |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3621 #if defined(MSWIN) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3622 // Using the platform's path separator (\) makes vim incorrectly |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3623 // treat it as an escape character, use '/' instead. |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3624 if (*buf != NUL && !after_pathsep(buf, buf + STRLEN(buf))) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3625 STRCAT(buf, "/"); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3626 #else |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3627 add_pathsep(buf); |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3628 #endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3629 STRCAT(buf, file); |
27760
010fa62d6fe2
patch 8.2.4406: expand functions use confusing argument names
Bram Moolenaar <Bram@vim.org>
parents:
27744
diff
changeset
|
3630 if (ExpandFromContext(&xpc, buf, &p, &num_p, |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3631 WILD_SILENT|expand_options) != FAIL && num_p > 0) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3632 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3633 ExpandEscape(&xpc, buf, num_p, p, WILD_SILENT|expand_options); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3634 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3635 if (ga_grow(ga, num_p) == OK) |
19057
463b6fad54e9
patch 8.2.0089: crash when running out of memory in :setfiletype completion
Bram Moolenaar <Bram@vim.org>
parents:
19053
diff
changeset
|
3636 // take over the pointers and put them in "ga" |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3637 for (i = 0; i < num_p; ++i) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3638 { |
19057
463b6fad54e9
patch 8.2.0089: crash when running out of memory in :setfiletype completion
Bram Moolenaar <Bram@vim.org>
parents:
19053
diff
changeset
|
3639 ((char_u **)ga->ga_data)[ga->ga_len] = p[i]; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3640 ++ga->ga_len; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3641 } |
19057
463b6fad54e9
patch 8.2.0089: crash when running out of memory in :setfiletype completion
Bram Moolenaar <Bram@vim.org>
parents:
19053
diff
changeset
|
3642 vim_free(p); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3643 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3644 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3645 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3646 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3647 vim_free(buf); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3648 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3649 |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3650 /* |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3651 * Translate some keys pressed when 'wildmenu' is used. |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3652 */ |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3653 int |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3654 wildmenu_translate_key( |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3655 cmdline_info_T *cclp, |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3656 int key, |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3657 expand_T *xp, |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3658 int did_wild_list) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3659 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3660 int c = key; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3661 |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3662 if (cmdline_pum_active()) |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
3663 { |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3664 // When the popup menu is used for cmdline completion: |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3665 // Up : go to the previous item in the menu |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3666 // Down : go to the next item in the menu |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3667 // Left : go to the parent directory |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3668 // Right: list the files in the selected directory |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3669 switch (c) |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3670 { |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3671 case K_UP: c = K_LEFT; break; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3672 case K_DOWN: c = K_RIGHT; break; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3673 case K_LEFT: c = K_UP; break; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3674 case K_RIGHT: c = K_DOWN; break; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3675 default: break; |
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27615
diff
changeset
|
3676 } |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
3677 } |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
3678 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3679 if (did_wild_list) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3680 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3681 if (c == K_LEFT) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3682 c = Ctrl_P; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3683 else if (c == K_RIGHT) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3684 c = Ctrl_N; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3685 } |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
27523
diff
changeset
|
3686 |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3687 // Hitting CR after "emenu Name.": complete submenu |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3688 if (xp->xp_context == EXPAND_MENUNAMES |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3689 && cclp->cmdpos > 1 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3690 && cclp->cmdbuff[cclp->cmdpos - 1] == '.' |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3691 && cclp->cmdbuff[cclp->cmdpos - 2] != '\\' |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3692 && (c == '\n' || c == '\r' || c == K_KENTER)) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3693 c = K_DOWN; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3694 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3695 return c; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3696 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3697 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3698 /* |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3699 * Delete characters on the command line, from "from" to the current |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3700 * position. |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3701 */ |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3702 static void |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3703 cmdline_del(cmdline_info_T *cclp, int from) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3704 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3705 mch_memmove(cclp->cmdbuff + from, cclp->cmdbuff + cclp->cmdpos, |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3706 (size_t)(cclp->cmdlen - cclp->cmdpos + 1)); |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3707 cclp->cmdlen -= cclp->cmdpos - from; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3708 cclp->cmdpos = from; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3709 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3710 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3711 /* |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3712 * Handle a key pressed when the wild menu for the menu names |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3713 * (EXPAND_MENUNAMES) is displayed. |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3714 */ |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3715 static int |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3716 wildmenu_process_key_menunames(cmdline_info_T *cclp, int key, expand_T *xp) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3717 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3718 int i; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3719 int j; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3720 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3721 // Hitting <Down> after "emenu Name.": complete submenu |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3722 if (key == K_DOWN && cclp->cmdpos > 0 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3723 && cclp->cmdbuff[cclp->cmdpos - 1] == '.') |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3724 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3725 key = p_wc; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3726 KeyTyped = TRUE; // in case the key was mapped |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3727 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3728 else if (key == K_UP) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3729 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3730 // Hitting <Up>: Remove one submenu name in front of the |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3731 // cursor |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3732 int found = FALSE; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3733 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3734 j = (int)(xp->xp_pattern - cclp->cmdbuff); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3735 i = 0; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3736 while (--j > 0) |
23356
32a9d01c2a49
patch 8.2.2221: if <Down> is mapped on the command line 'wildchar' is inserted
Bram Moolenaar <Bram@vim.org>
parents:
23272
diff
changeset
|
3737 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3738 // check for start of menu name |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3739 if (cclp->cmdbuff[j] == ' ' |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3740 && cclp->cmdbuff[j - 1] != '\\') |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3741 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3742 i = j + 1; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3743 break; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3744 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3745 // check for start of submenu name |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3746 if (cclp->cmdbuff[j] == '.' |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3747 && cclp->cmdbuff[j - 1] != '\\') |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3748 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3749 if (found) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3750 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3751 i = j + 1; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3752 break; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3753 } |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3754 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3755 found = TRUE; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3756 } |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3757 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3758 if (i > 0) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3759 cmdline_del(cclp, i); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3760 key = p_wc; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3761 KeyTyped = TRUE; // in case the key was mapped |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3762 xp->xp_context = EXPAND_NOTHING; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3763 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3764 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3765 return key; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3766 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3767 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3768 /* |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3769 * Handle a key pressed when the wild menu for file names (EXPAND_FILES) or |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3770 * directory names (EXPAND_DIRECTORIES) or shell command names |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3771 * (EXPAND_SHELLCMD) is displayed. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3772 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3773 static int |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3774 wildmenu_process_key_filenames(cmdline_info_T *cclp, int key, expand_T *xp) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3775 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3776 int i; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3777 int j; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3778 char_u upseg[5]; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3779 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3780 upseg[0] = PATHSEP; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3781 upseg[1] = '.'; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3782 upseg[2] = '.'; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3783 upseg[3] = PATHSEP; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3784 upseg[4] = NUL; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3785 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3786 if (key == K_DOWN |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3787 && cclp->cmdpos > 0 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3788 && cclp->cmdbuff[cclp->cmdpos - 1] == PATHSEP |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3789 && (cclp->cmdpos < 3 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3790 || cclp->cmdbuff[cclp->cmdpos - 2] != '.' |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3791 || cclp->cmdbuff[cclp->cmdpos - 3] != '.')) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3792 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3793 // go down a directory |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3794 key = p_wc; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3795 KeyTyped = TRUE; // in case the key was mapped |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3796 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3797 else if (STRNCMP(xp->xp_pattern, upseg + 1, 3) == 0 && key == K_DOWN) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3798 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3799 // If in a direct ancestor, strip off one ../ to go down |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3800 int found = FALSE; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3801 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3802 j = cclp->cmdpos; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3803 i = (int)(xp->xp_pattern - cclp->cmdbuff); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3804 while (--j > i) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3805 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3806 if (has_mbyte) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3807 j -= (*mb_head_off)(cclp->cmdbuff, cclp->cmdbuff + j); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3808 if (vim_ispathsep(cclp->cmdbuff[j])) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3809 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3810 found = TRUE; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3811 break; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3812 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3813 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3814 if (found |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3815 && cclp->cmdbuff[j - 1] == '.' |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3816 && cclp->cmdbuff[j - 2] == '.' |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3817 && (vim_ispathsep(cclp->cmdbuff[j - 3]) || j == i + 2)) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3818 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3819 cmdline_del(cclp, j - 2); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3820 key = p_wc; |
23356
32a9d01c2a49
patch 8.2.2221: if <Down> is mapped on the command line 'wildchar' is inserted
Bram Moolenaar <Bram@vim.org>
parents:
23272
diff
changeset
|
3821 KeyTyped = TRUE; // in case the key was mapped |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3822 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3823 } |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3824 else if (key == K_UP) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3825 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3826 // go up a directory |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3827 int found = FALSE; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3828 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3829 j = cclp->cmdpos - 1; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3830 i = (int)(xp->xp_pattern - cclp->cmdbuff); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3831 while (--j > i) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3832 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3833 if (has_mbyte) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3834 j -= (*mb_head_off)(cclp->cmdbuff, cclp->cmdbuff + j); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3835 if (vim_ispathsep(cclp->cmdbuff[j]) |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3836 #ifdef BACKSLASH_IN_FILENAME |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3837 && vim_strchr((char_u *)" *?[{`$%#", |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3838 cclp->cmdbuff[j + 1]) == NULL |
31091
551ce1a137da
patch 9.0.0880: preprocessor indenting is off
Bram Moolenaar <Bram@vim.org>
parents:
31083
diff
changeset
|
3839 #endif |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3840 ) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3841 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3842 if (found) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3843 { |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3844 i = j + 1; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3845 break; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3846 } |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3847 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3848 found = TRUE; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3849 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3850 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3851 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3852 if (!found) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3853 j = i; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3854 else if (STRNCMP(cclp->cmdbuff + j, upseg, 4) == 0) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3855 j += 4; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3856 else if (STRNCMP(cclp->cmdbuff + j, upseg + 1, 3) == 0 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3857 && j == i) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3858 j += 3; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3859 else |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3860 j = 0; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3861 if (j > 0) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3862 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3863 // TODO this is only for DOS/UNIX systems - need to put in |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3864 // machine-specific stuff here and in upseg init |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3865 cmdline_del(cclp, j); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3866 put_on_cmdline(upseg + 1, 3, FALSE); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3867 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3868 else if (cclp->cmdpos > i) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3869 cmdline_del(cclp, i); |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3870 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3871 // Now complete in the new directory. Set KeyTyped in case the |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3872 // Up key came from a mapping. |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3873 key = p_wc; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3874 KeyTyped = TRUE; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3875 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3876 |
27744
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3877 return key; |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3878 } |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3879 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3880 /* |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3881 * Handle a key pressed when the wild menu is displayed |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3882 */ |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3883 int |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3884 wildmenu_process_key(cmdline_info_T *cclp, int key, expand_T *xp) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3885 { |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3886 if (xp->xp_context == EXPAND_MENUNAMES) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3887 return wildmenu_process_key_menunames(cclp, key, xp); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3888 else if ((xp->xp_context == EXPAND_FILES |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3889 || xp->xp_context == EXPAND_DIRECTORIES |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3890 || xp->xp_context == EXPAND_SHELLCMD)) |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3891 return wildmenu_process_key_filenames(cclp, key, xp); |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3892 |
515ce8e07bf2
patch 8.2.4398: some command completion functions are too long
Bram Moolenaar <Bram@vim.org>
parents:
27722
diff
changeset
|
3893 return key; |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3894 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3895 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3896 /* |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3897 * Free expanded names when finished walking through the matches |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3898 */ |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3899 void |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3900 wildmenu_cleanup(cmdline_info_T *cclp UNUSED) |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3901 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3902 int skt = KeyTyped; |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3903 #ifdef FEAT_EVAL |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3904 int old_RedrawingDisabled = RedrawingDisabled; |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3905 #endif |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3906 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3907 if (!p_wmnu || wild_menu_showing == 0) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3908 return; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3909 |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3910 #ifdef FEAT_EVAL |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3911 if (cclp->input_fn) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3912 RedrawingDisabled = 0; |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3913 #endif |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3914 |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3915 if (wild_menu_showing == WM_SCROLLED) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3916 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3917 // Entered command line, move it up |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3918 cmdline_row--; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3919 redrawcmd(); |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3920 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3921 else if (save_p_ls != -1) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3922 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3923 // restore 'laststatus' and 'winminheight' |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3924 p_ls = save_p_ls; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3925 p_wmh = save_p_wmh; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3926 last_status(FALSE); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29495
diff
changeset
|
3927 update_screen(UPD_VALID); // redraw the screen NOW |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3928 redrawcmd(); |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3929 save_p_ls = -1; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3930 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3931 else |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3932 { |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3933 win_redraw_last_status(topframe); |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3934 redraw_statuslines(); |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3935 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3936 KeyTyped = skt; |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3937 wild_menu_showing = 0; |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3938 #ifdef FEAT_EVAL |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3939 if (cclp->input_fn) |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3940 RedrawingDisabled = old_RedrawingDisabled; |
29886
3ef1fe06690d
patch 9.0.0281: build failure without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
3941 #endif |
22075
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3942 } |
eb878f85967e
patch 8.2.1587: loop for handling keys for the command line is too long
Bram Moolenaar <Bram@vim.org>
parents:
21477
diff
changeset
|
3943 |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17779
diff
changeset
|
3944 #if defined(FEAT_EVAL) || defined(PROTO) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3945 /* |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3946 * "getcompletion()" function |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3947 */ |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3948 void |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3949 f_getcompletion(typval_T *argvars, typval_T *rettv) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3950 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3951 char_u *pat; |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3952 char_u *type; |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3953 expand_T xpc; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3954 int filtered = FALSE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3955 int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH |
26032
162ef12a3b5f
patch 8.2.3550: completion() does not work properly
Bram Moolenaar <Bram@vim.org>
parents:
25994
diff
changeset
|
3956 | WILD_NO_BEEP | WILD_HOME_REPLACE; |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3957 |
25302
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3958 if (in_vim9script() |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3959 && (check_for_string_arg(argvars, 0) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3960 || check_for_string_arg(argvars, 1) == FAIL |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3961 || check_for_opt_bool_arg(argvars, 2) == FAIL)) |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3962 return; |
4d3c68196d05
patch 8.2.3188: Vim9: argument types are not checked at compile time
Bram Moolenaar <Bram@vim.org>
parents:
24909
diff
changeset
|
3963 |
26213
ee1c116b91ea
patch 8.2.3638: getcompletion() always passes zero as position
Bram Moolenaar <Bram@vim.org>
parents:
26032
diff
changeset
|
3964 pat = tv_get_string(&argvars[0]); |
30043
fd855ad74887
patch 9.0.0359: error message for wrong argument type is not specific
Bram Moolenaar <Bram@vim.org>
parents:
30017
diff
changeset
|
3965 if (check_for_string_arg(argvars, 1) == FAIL) |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3966 return; |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3967 type = tv_get_string(&argvars[1]); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3968 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3969 if (argvars[2].v_type != VAR_UNKNOWN) |
22109
3785043f8768
patch 8.2.1604: Vim9: cannot use "true" with getcompletion()
Bram Moolenaar <Bram@vim.org>
parents:
22075
diff
changeset
|
3970 filtered = tv_get_bool_chk(&argvars[2], NULL); |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3971 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3972 if (p_wic) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3973 options |= WILD_ICASE; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3974 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3975 // For filtered results, 'wildignore' is used |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3976 if (!filtered) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3977 options |= WILD_KEEP_ALL; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3978 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3979 ExpandInit(&xpc); |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3980 if (STRCMP(type, "cmdline") == 0) |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3981 { |
26213
ee1c116b91ea
patch 8.2.3638: getcompletion() always passes zero as position
Bram Moolenaar <Bram@vim.org>
parents:
26032
diff
changeset
|
3982 set_one_cmd_context(&xpc, pat); |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3983 xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); |
26213
ee1c116b91ea
patch 8.2.3638: getcompletion() always passes zero as position
Bram Moolenaar <Bram@vim.org>
parents:
26032
diff
changeset
|
3984 xpc.xp_col = (int)STRLEN(pat); |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3985 } |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3986 else |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3987 { |
26213
ee1c116b91ea
patch 8.2.3638: getcompletion() always passes zero as position
Bram Moolenaar <Bram@vim.org>
parents:
26032
diff
changeset
|
3988 xpc.xp_pattern = pat; |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3989 xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3990 |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3991 xpc.xp_context = cmdcomplete_str_to_type(type); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3992 if (xpc.xp_context == EXPAND_NOTHING) |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3993 { |
26865
bce848ec8b1b
patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents:
26436
diff
changeset
|
3994 semsg(_(e_invalid_argument_str), type); |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3995 return; |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3996 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3997 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
3998 # if defined(FEAT_MENU) |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
3999 if (xpc.xp_context == EXPAND_MENUS) |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4000 { |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4001 set_context_in_menu_cmd(&xpc, (char_u *)"menu", xpc.xp_pattern, FALSE); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4002 xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4003 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4004 # endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4005 # ifdef FEAT_CSCOPE |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4006 if (xpc.xp_context == EXPAND_CSCOPE) |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4007 { |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4008 set_context_in_cscope_cmd(&xpc, xpc.xp_pattern, CMD_cscope); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4009 xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4010 } |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4011 # endif |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4012 # ifdef FEAT_SIGNS |
20745
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4013 if (xpc.xp_context == EXPAND_SIGN) |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4014 { |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4015 set_context_in_sign_cmd(&xpc, xpc.xp_pattern); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4016 xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern); |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4017 } |
49673325ca13
patch 8.2.0925: getcompletion() does not return command line arguments
Bram Moolenaar <Bram@vim.org>
parents:
19892
diff
changeset
|
4018 # endif |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4019 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4020 |
28166
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4021 if (cmdline_fuzzy_completion_supported(&xpc)) |
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4022 // when fuzzy matching, don't modify the search string |
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4023 pat = vim_strsave(xpc.xp_pattern); |
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4024 else |
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4025 pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context); |
130f4082a13d
patch 8.2.4608: getcompletion() does not work when 'wildoptions' has "fuzzy"
Bram Moolenaar <Bram@vim.org>
parents:
28109
diff
changeset
|
4026 |
29175
755ab148288b
patch 8.2.5107: some callers of rettv_list_alloc() check for not OK
Bram Moolenaar <Bram@vim.org>
parents:
28786
diff
changeset
|
4027 if (rettv_list_alloc(rettv) == OK && pat != NULL) |
17779
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4028 { |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4029 int i; |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4030 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4031 ExpandOne(&xpc, pat, NULL, options, WILD_ALL_KEEP); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4032 |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4033 for (i = 0; i < xpc.xp_numfiles; i++) |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4034 list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4035 } |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4036 vim_free(pat); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4037 ExpandCleanup(&xpc); |
87a8760babec
patch 8.1.1886: command line expansion code is spread out
Bram Moolenaar <Bram@vim.org>
parents:
diff
changeset
|
4038 } |
17781
04245f071792
patch 8.1.1887: the +cmdline_compl feature is not in the tiny version
Bram Moolenaar <Bram@vim.org>
parents:
17779
diff
changeset
|
4039 #endif // FEAT_EVAL |