# HG changeset patch # User Bram Moolenaar # Date 1409309924 -7200 # Node ID 96a4fa8e530c12137af235a9aaad57d578f9eebd # Parent 0ecbaf8b09d93f6c161b459bb0b5d0aa76a0224b updated for version 7.4.423 Problem: expand("$shell") does not work as documented. Solution: Do not escape the $ when expanding environment variables. diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -78,7 +78,8 @@ get_indent_str(ptr, ts, list) if (!list || lcs_tab1) /* count a tab for what it is worth */ count += ts - (count % ts); else - /* in list mode, when tab is not set, count screen char width for Tab: ^I */ + /* In list mode, when tab is not set, count screen char width + * for Tab, displays: ^I */ count += ptr2cells(ptr); } else if (*ptr == ' ') @@ -10767,7 +10768,7 @@ gen_expand_wildcards(num_pat, pat, num_f vim_free(p); ga_clear_strings(&ga); i = mch_expand_wildcards(num_pat, pat, num_file, file, - flags); + flags|EW_KEEPDOLLAR); recursive = FALSE; return i; } diff --git a/src/os_unix.c b/src/os_unix.c --- a/src/os_unix.c +++ b/src/os_unix.c @@ -5939,10 +5939,12 @@ mch_expand_wildcards(num_pat, pat, num_f *p++ = '\\'; ++j; } - else if (!intick && vim_strchr(SHELL_SPECIAL, - pat[i][j]) != NULL) + else if (!intick + && ((flags & EW_KEEPDOLLAR) == 0 || pat[i][j] != '$') + && vim_strchr(SHELL_SPECIAL, pat[i][j]) != NULL) /* Put a backslash before a special character, but not - * when inside ``. */ + * when inside ``. And not for $var when EW_KEEPDOLLAR is + * set. */ *p++ = '\\'; /* Copy one character. */ diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 423, +/**/ 422, /**/ 421, diff --git a/src/vim.h b/src/vim.h --- a/src/vim.h +++ b/src/vim.h @@ -835,6 +835,7 @@ extern char *(*dyn_libintl_textdomain)(c #define EW_ICASE 0x100 /* ignore case */ #define EW_NOERROR 0x200 /* no error for bad regexp */ #define EW_NOTWILD 0x400 /* add match with literal name if exists */ +#define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND * is used when executing commands and EW_SILENT for interactive expanding. */