forked from aniani/vim
patch 8.1.1886: command line expansion code is spread out
Problem: Command line expansion code is spread out. Solution: Move the code to cmdexpand.c. (Yegappan Lakshmanan, closes #4831)
This commit is contained in:
2
Filelist
2
Filelist
@@ -24,6 +24,7 @@ SRC_ALL = \
|
||||
src/change.c \
|
||||
src/channel.c \
|
||||
src/charset.c \
|
||||
src/cmdexpand.c \
|
||||
src/cmdhist.c \
|
||||
src/crypt.c \
|
||||
src/crypt_zip.c \
|
||||
@@ -175,6 +176,7 @@ SRC_ALL = \
|
||||
src/proto/change.pro \
|
||||
src/proto/channel.pro \
|
||||
src/proto/charset.pro \
|
||||
src/proto/cmdexpand.pro \
|
||||
src/proto/cmdhist.pro \
|
||||
src/proto/crypt.pro \
|
||||
src/proto/crypt_zip.pro \
|
||||
|
@@ -711,6 +711,7 @@ OBJ = \
|
||||
$(OUTDIR)/buffer.o \
|
||||
$(OUTDIR)/change.o \
|
||||
$(OUTDIR)/charset.o \
|
||||
$(OUTDIR)/cmdexpand.o \
|
||||
$(OUTDIR)/cmdhist.o \
|
||||
$(OUTDIR)/crypt.o \
|
||||
$(OUTDIR)/crypt_zip.o \
|
||||
|
@@ -31,6 +31,7 @@ SRC = arabic.c \
|
||||
buffer.c \
|
||||
change.c \
|
||||
charset.c \
|
||||
cmdexpand.c \
|
||||
cmdhist.c \
|
||||
crypt.c \
|
||||
crypt_zip.c \
|
||||
|
@@ -720,6 +720,7 @@ OBJ = \
|
||||
$(OUTDIR)\buffer.obj \
|
||||
$(OUTDIR)\change.obj \
|
||||
$(OUTDIR)\charset.obj \
|
||||
$(OUTDIR)\cmdexpand.obj \
|
||||
$(OUTDIR)\cmdhist.obj \
|
||||
$(OUTDIR)\crypt.obj \
|
||||
$(OUTDIR)\crypt_zip.obj \
|
||||
@@ -1450,6 +1451,8 @@ $(OUTDIR)/change.obj: $(OUTDIR) change.c $(INCL)
|
||||
|
||||
$(OUTDIR)/charset.obj: $(OUTDIR) charset.c $(INCL)
|
||||
|
||||
$(OUTDIR)/cmdexpand.obj: $(OUTDIR) cmdexpand.c $(INCL)
|
||||
|
||||
$(OUTDIR)/cmdhist.obj: $(OUTDIR) cmdhist.c $(INCL)
|
||||
|
||||
$(OUTDIR)/crypt.obj: $(OUTDIR) crypt.c $(INCL)
|
||||
@@ -1754,6 +1757,7 @@ proto.h: \
|
||||
proto/buffer.pro \
|
||||
proto/change.pro \
|
||||
proto/charset.pro \
|
||||
proto/cmdexpand.pro \
|
||||
proto/cmdhist.pro \
|
||||
proto/crypt.pro \
|
||||
proto/crypt_zip.pro \
|
||||
|
@@ -2,7 +2,7 @@
|
||||
# Makefile for Vim on OpenVMS
|
||||
#
|
||||
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
|
||||
# Last change: 2019 Jul 14
|
||||
# Last change: 2019 Aug 18
|
||||
#
|
||||
# This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
|
||||
# with MMS and MMK
|
||||
@@ -308,11 +308,11 @@ ALL_LIBS = $(LIBS) $(GUI_LIB_DIR) $(GUI_LIB) \
|
||||
$(PERL_LIB) $(PYTHON_LIB) $(TCL_LIB) $(RUBY_LIB)
|
||||
|
||||
SRC = arabic.c arglist.c autocmd.c beval.c blob.c blowfish.c buffer.c \
|
||||
change.c charset.c cmdhist.c crypt.c crypt_zip.c debugger.c dict.c \
|
||||
diff.c digraph.c edit.c eval.c evalfunc.c ex_cmds.c ex_cmds2.c \
|
||||
ex_docmd.c ex_eval.c ex_getln.c if_cscope.c if_xcmdsrv.c fileio.c \
|
||||
findfile.c fold.c getchar.c hardcopy.c hashtab.c highlight.c indent.c \
|
||||
insexpand.c json.c list.c main.c map.c mark.c menu.c mbyte.c \
|
||||
change.c charset.c cmdexpand.c cmdhist.c crypt.c crypt_zip.c \
|
||||
debugger.c dict.c diff.c digraph.c edit.c eval.c evalfunc.c ex_cmds.c \
|
||||
ex_cmds2.c ex_docmd.c ex_eval.c ex_getln.c if_cscope.c if_xcmdsrv.c \
|
||||
fileio.c findfile.c fold.c getchar.c hardcopy.c hashtab.c highlight.c \
|
||||
indent.c insexpand.c json.c list.c main.c map.c mark.c menu.c mbyte.c \
|
||||
memfile.c memline.c message.c misc1.c misc2.c move.c normal.c ops.c \
|
||||
option.c popupmnu.c popupwin.c profiler.c quickfix.c regexp.c \
|
||||
search.c session.c sha256.c sign.c spell.c spellfile.c syntax.c tag.c \
|
||||
@@ -323,18 +323,18 @@ SRC = arabic.c arglist.c autocmd.c beval.c blob.c blowfish.c buffer.c \
|
||||
$(RUBY_SRC) $(HANGULIN_SRC) $(MZSCH_SRC) $(XDIFF_SRC)
|
||||
|
||||
OBJ = arabic.obj arglist.obj autocmd.obj beval.obj blob.obj blowfish.obj \
|
||||
buffer.obj change.obj charset.obj cmdhist.obj crypt.obj crypt_zip.obj \
|
||||
debugger.obj dict.obj diff.obj digraph.obj edit.obj eval.obj \
|
||||
evalfunc.obj ex_cmds.obj ex_cmds2.obj ex_docmd.obj ex_eval.obj \
|
||||
ex_getln.obj if_cscope.obj if_xcmdsrv.obj fileio.obj findfile.obj \
|
||||
fold.obj getchar.obj hardcopy.obj hashtab.obj highlight.obj \
|
||||
indent.obj insexpand.obj json.obj list.obj main.obj map.obj mark.obj \
|
||||
menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
|
||||
move.obj mbyte.obj normal.obj ops.obj option.obj popupmnu.obj \
|
||||
popupwin.obj profiler.obj quickfix.obj regexp.obj search.obj \
|
||||
session.obj sha256.obj sign.obj spell.obj spellfile.obj syntax.obj \
|
||||
tag.obj term.obj termlib.obj testing.obj textprop.obj ui.obj undo.obj \
|
||||
usercmd.obj userfunc.obj screen.obj version.obj \
|
||||
buffer.obj change.obj charset.obj cmdexpand.obj cmdhist.obj \
|
||||
crypt.obj crypt_zip.obj debugger.obj dict.obj diff.obj digraph.obj \
|
||||
edit.obj eval.obj evalfunc.obj ex_cmds.obj ex_cmds2.obj ex_docmd.obj \
|
||||
ex_eval.obj ex_getln.obj if_cscope.obj if_xcmdsrv.obj fileio.obj \
|
||||
findfile.obj fold.obj getchar.obj hardcopy.obj hashtab.obj \
|
||||
highlight.obj indent.obj insexpand.obj json.obj list.obj main.obj \
|
||||
map.obj mark.obj menu.obj memfile.obj memline.obj message.obj \
|
||||
misc1.obj misc2.obj move.obj mbyte.obj normal.obj ops.obj option.obj \
|
||||
popupmnu.obj popupwin.obj profiler.obj quickfix.obj regexp.obj \
|
||||
search.obj session.obj sha256.obj sign.obj spell.obj spellfile.obj \
|
||||
syntax.obj tag.obj term.obj termlib.obj testing.obj textprop.obj \
|
||||
ui.obj undo.obj usercmd.obj userfunc.obj screen.obj version.obj \
|
||||
viminfo.obj window.obj os_unix.obj os_vms.obj pathdef.obj if_mzsch.obj \
|
||||
$(GUI_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(TCL_OBJ) \
|
||||
$(RUBY_OBJ) $(HANGULIN_OBJ) $(MZSCH_OBJ) $(XDIFF_OBJ)
|
||||
@@ -523,6 +523,10 @@ charset.obj : charset.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
globals.h
|
||||
cmdexpand.obj : cmdexpand.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
globals.h
|
||||
cmdhist.obj : cmdhist.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h term.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
|
10
src/Makefile
10
src/Makefile
@@ -1585,6 +1585,7 @@ BASIC_SRC = \
|
||||
buffer.c \
|
||||
change.c \
|
||||
charset.c \
|
||||
cmdexpand.c \
|
||||
cmdhist.c \
|
||||
crypt.c \
|
||||
crypt_zip.c \
|
||||
@@ -1712,6 +1713,7 @@ OBJ_COMMON = \
|
||||
objects/change.o \
|
||||
objects/blob.o \
|
||||
objects/blowfish.o \
|
||||
objects/cmdexpand.o \
|
||||
objects/cmdhist.o \
|
||||
objects/crypt.o \
|
||||
objects/crypt_zip.o \
|
||||
@@ -1852,6 +1854,7 @@ PRO_AUTO = \
|
||||
buffer.pro \
|
||||
change.pro \
|
||||
charset.pro \
|
||||
cmdexpand.pro \
|
||||
cmdhist.pro \
|
||||
crypt.pro \
|
||||
crypt_zip.pro \
|
||||
@@ -3013,6 +3016,9 @@ objects/change.o: change.c
|
||||
objects/charset.o: charset.c
|
||||
$(CCC) -o $@ charset.c
|
||||
|
||||
objects/cmdexpand.o: cmdexpand.c
|
||||
$(CCC) -o $@ cmdexpand.c
|
||||
|
||||
objects/cmdhist.o: cmdhist.c
|
||||
$(CCC) -o $@ cmdhist.c
|
||||
|
||||
@@ -3514,6 +3520,10 @@ objects/charset.o: charset.c vim.h protodef.h auto/config.h feature.h os_unix.h
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/cmdexpand.o: cmdexpand.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
proto.h globals.h
|
||||
objects/cmdhist.o: cmdhist.c vim.h protodef.h auto/config.h feature.h os_unix.h \
|
||||
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
|
@@ -28,6 +28,7 @@ autocmd.c | autocommands
|
||||
blob.c | blob data type
|
||||
buffer.c | manipulating buffers (loaded files)
|
||||
change.c | handling changes to text
|
||||
cmdexpand.c | command-line completion
|
||||
cmdhist.c | command-line history
|
||||
debugger.c | vim script debugger
|
||||
diff.c | diff mode (vimdiff)
|
||||
|
2031
src/cmdexpand.c
Normal file
2031
src/cmdexpand.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -135,9 +135,6 @@ static void f_getchar(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getcharmod(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getcharsearch(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getcmdline(typval_T *argvars, typval_T *rettv);
|
||||
#if defined(FEAT_CMDL_COMPL)
|
||||
static void f_getcompletion(typval_T *argvars, typval_T *rettv);
|
||||
#endif
|
||||
static void f_getcmdpos(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getcmdtype(typval_T *argvars, typval_T *rettv);
|
||||
static void f_getcmdwintype(typval_T *argvars, typval_T *rettv);
|
||||
@@ -4701,79 +4698,6 @@ f_getcmdwintype(typval_T *argvars UNUSED, typval_T *rettv)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(FEAT_CMDL_COMPL)
|
||||
/*
|
||||
* "getcompletion()" function
|
||||
*/
|
||||
static void
|
||||
f_getcompletion(typval_T *argvars, typval_T *rettv)
|
||||
{
|
||||
char_u *pat;
|
||||
expand_T xpc;
|
||||
int filtered = FALSE;
|
||||
int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
|
||||
| WILD_NO_BEEP;
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||
filtered = tv_get_number_chk(&argvars[2], NULL);
|
||||
|
||||
if (p_wic)
|
||||
options |= WILD_ICASE;
|
||||
|
||||
/* For filtered results, 'wildignore' is used */
|
||||
if (!filtered)
|
||||
options |= WILD_KEEP_ALL;
|
||||
|
||||
ExpandInit(&xpc);
|
||||
xpc.xp_pattern = tv_get_string(&argvars[0]);
|
||||
xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
|
||||
xpc.xp_context = cmdcomplete_str_to_type(tv_get_string(&argvars[1]));
|
||||
if (xpc.xp_context == EXPAND_NOTHING)
|
||||
{
|
||||
if (argvars[1].v_type == VAR_STRING)
|
||||
semsg(_(e_invarg2), argvars[1].vval.v_string);
|
||||
else
|
||||
emsg(_(e_invarg));
|
||||
return;
|
||||
}
|
||||
|
||||
# if defined(FEAT_MENU)
|
||||
if (xpc.xp_context == EXPAND_MENUS)
|
||||
{
|
||||
set_context_in_menu_cmd(&xpc, (char_u *)"menu", xpc.xp_pattern, FALSE);
|
||||
xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
|
||||
}
|
||||
# endif
|
||||
#ifdef FEAT_CSCOPE
|
||||
if (xpc.xp_context == EXPAND_CSCOPE)
|
||||
{
|
||||
set_context_in_cscope_cmd(&xpc, xpc.xp_pattern, CMD_cscope);
|
||||
xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
|
||||
}
|
||||
#endif
|
||||
#ifdef FEAT_SIGNS
|
||||
if (xpc.xp_context == EXPAND_SIGN)
|
||||
{
|
||||
set_context_in_sign_cmd(&xpc, xpc.xp_pattern);
|
||||
xpc.xp_pattern_len = (int)STRLEN(xpc.xp_pattern);
|
||||
}
|
||||
#endif
|
||||
|
||||
pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
|
||||
if ((rettv_list_alloc(rettv) != FAIL) && (pat != NULL))
|
||||
{
|
||||
int i;
|
||||
|
||||
ExpandOne(&xpc, pat, NULL, options, WILD_ALL_KEEP);
|
||||
|
||||
for (i = 0; i < xpc.xp_numfiles; i++)
|
||||
list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
|
||||
}
|
||||
vim_free(pat);
|
||||
ExpandCleanup(&xpc);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "getcwd()" function
|
||||
*
|
||||
|
2050
src/ex_getln.c
2050
src/ex_getln.c
File diff suppressed because it is too large
Load Diff
@@ -66,6 +66,7 @@ extern int _stricoll(char *a, char *b);
|
||||
# include "buffer.pro"
|
||||
# include "change.pro"
|
||||
# include "charset.pro"
|
||||
# include "cmdexpand.pro"
|
||||
# include "cmdhist.pro"
|
||||
# ifdef FEAT_CSCOPE
|
||||
# include "if_cscope.pro"
|
||||
|
14
src/proto/cmdexpand.pro
Normal file
14
src/proto/cmdexpand.pro
Normal file
@@ -0,0 +1,14 @@
|
||||
/* cmdexpand.c */
|
||||
int nextwild(expand_T *xp, int type, int options, int escape);
|
||||
char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode);
|
||||
void ExpandInit(expand_T *xp);
|
||||
void ExpandCleanup(expand_T *xp);
|
||||
int showmatches(expand_T *xp, int wildmenu);
|
||||
char_u *sm_gettail(char_u *s);
|
||||
char_u *addstar(char_u *fname, int len, int context);
|
||||
void set_cmd_context(expand_T *xp, char_u *str, int len, int col, int use_ccline);
|
||||
int expand_cmdline(expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches);
|
||||
int ExpandGeneric(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped);
|
||||
void globpath(char_u *path, char_u *file, garray_T *ga, int expand_options);
|
||||
void f_getcompletion(typval_T *argvars, typval_T *rettv);
|
||||
/* vim: set ft=c : */
|
@@ -12,6 +12,7 @@ char_u *getexmodeline(int promptc, void *cookie, int indent, int do_concat);
|
||||
int cmdline_overstrike(void);
|
||||
int cmdline_at_end(void);
|
||||
colnr_T cmdline_getvcol_cursor(void);
|
||||
int realloc_cmdbuff(int len);
|
||||
void free_arshape_buf(void);
|
||||
void putcmdline(int c, int shift);
|
||||
void unputcmdline(void);
|
||||
@@ -21,19 +22,12 @@ void redrawcmdline(void);
|
||||
void redrawcmdline_ex(int do_compute_cmdrow);
|
||||
void redrawcmd(void);
|
||||
void compute_cmdrow(void);
|
||||
void cursorcmd(void);
|
||||
void gotocmdline(int clr);
|
||||
char_u *ExpandOne(expand_T *xp, char_u *str, char_u *orig, int options, int mode);
|
||||
void ExpandInit(expand_T *xp);
|
||||
void ExpandCleanup(expand_T *xp);
|
||||
void ExpandEscape(expand_T *xp, char_u *str, int numfiles, char_u **files, int options);
|
||||
char_u *vim_strsave_fnameescape(char_u *fname, int shell);
|
||||
void escape_fname(char_u **pp);
|
||||
void tilde_replace(char_u *orig_pat, int num_files, char_u **files);
|
||||
char_u *sm_gettail(char_u *s);
|
||||
char_u *addstar(char_u *fname, int len, int context);
|
||||
void set_cmd_context(expand_T *xp, char_u *str, int len, int col, int use_ccline);
|
||||
int expand_cmdline(expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches);
|
||||
int ExpandGeneric(expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped);
|
||||
void globpath(char_u *path, char_u *file, garray_T *ga, int expand_options);
|
||||
cmdline_info_T *get_cmdline_info(void);
|
||||
char_u *get_cmdline_str(void);
|
||||
int get_cmdline_pos(void);
|
||||
int set_cmdline_pos(int pos);
|
||||
|
@@ -578,6 +578,33 @@ typedef struct expand
|
||||
#define XP_BS_ONE 1 // uses one backslash before a space
|
||||
#define XP_BS_THREE 2 // uses three backslashes before a space
|
||||
|
||||
/*
|
||||
* Variables shared between getcmdline(), redrawcmdline() and others.
|
||||
* These need to be saved when using CTRL-R |, that's why they are in a
|
||||
* structure.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char_u *cmdbuff; /* pointer to command line buffer */
|
||||
int cmdbufflen; /* length of cmdbuff */
|
||||
int cmdlen; /* number of chars in command line */
|
||||
int cmdpos; /* current cursor position */
|
||||
int cmdspos; /* cursor column on screen */
|
||||
int cmdfirstc; /* ':', '/', '?', '=', '>' or NUL */
|
||||
int cmdindent; /* number of spaces before cmdline */
|
||||
char_u *cmdprompt; /* message in front of cmdline */
|
||||
int cmdattr; /* attributes for prompt */
|
||||
int overstrike; /* Typing mode on the command line. Shared by
|
||||
getcmdline() and put_on_cmdline(). */
|
||||
expand_T *xpc; /* struct being used for expansion, xp_pattern
|
||||
may point into cmdbuff */
|
||||
int xp_context; /* type of expansion */
|
||||
# ifdef FEAT_EVAL
|
||||
char_u *xp_arg; /* user-defined expansion arg */
|
||||
int input_fn; /* when TRUE Invoked for input() function */
|
||||
# endif
|
||||
} cmdline_info_T;
|
||||
|
||||
/*
|
||||
* Command modifiers ":vertical", ":browse", ":confirm" and ":hide" set a flag.
|
||||
* This needs to be saved for recursive commands, put them in a structure for
|
||||
|
@@ -769,6 +769,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1886,
|
||||
/**/
|
||||
1885,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user