0
0
mirror of https://github.com/vim/vim.git synced 2025-10-24 08:54:47 -04:00

updated for version 7.2b-018

This commit is contained in:
Bram Moolenaar
2008-07-24 18:29:37 +00:00
parent 4bfa60812d
commit 7693ec6e8a
5 changed files with 45 additions and 12 deletions

View File

@@ -3707,10 +3707,10 @@ vim_strsave_fnameescape(fname, shell)
char_u *fname; char_u *fname;
int shell; int shell;
{ {
char_u *p;
#ifdef BACKSLASH_IN_FILENAME #ifdef BACKSLASH_IN_FILENAME
char_u buf[20]; char_u buf[20];
int j = 0; int j = 0;
char_u *p;
/* Don't escape '[' and '{' if they are in 'isfname'. */ /* Don't escape '[' and '{' if they are in 'isfname'. */
for (p = PATH_ESC_CHARS; *p != NUL; ++p) for (p = PATH_ESC_CHARS; *p != NUL; ++p)
@@ -3719,7 +3719,18 @@ vim_strsave_fnameescape(fname, shell)
buf[j] = NUL; buf[j] = NUL;
return vim_strsave_escaped(fname, buf); return vim_strsave_escaped(fname, buf);
#else #else
return vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS); p = vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
if (shell && csh_like_shell() && p != NULL)
{
char_u *s;
/* For csh and similar shells need to put two backslashes before '!'.
* One is taken by Vim, one by the shell. */
s = vim_strsave_escaped(p, (char_u *)"!");
vim_free(p);
p = s;
}
return p;
#endif #endif
} }
@@ -5960,7 +5971,9 @@ ex_window()
linenr_T lnum; linenr_T lnum;
int histtype; int histtype;
garray_T winsizes; garray_T winsizes;
#ifdef FEAT_AUTOCMD
char_u typestr[2]; char_u typestr[2];
#endif
int save_restart_edit = restart_edit; int save_restart_edit = restart_edit;
int save_State = State; int save_State = State;
int save_exmode = exmode_active; int save_exmode = exmode_active;

View File

@@ -1257,6 +1257,17 @@ vim_strsave_escaped_ext(string, esc_chars, cc, bsl)
return escaped_string; return escaped_string;
} }
#if !defined(BACKSLASH_IN_FILENAME) || defined(FEAT_EVAL) || defined(PROTO)
/*
* Return TRUE when 'shell' has "csh" in the tail.
*/
int
csh_like_shell()
{
return (strstr((char *)gettail(p_sh), "csh") != NULL);
}
#endif
#if defined(FEAT_EVAL) || defined(PROTO) #if defined(FEAT_EVAL) || defined(PROTO)
/* /*
* Escape "string" for use as a shell argument with system(). * Escape "string" for use as a shell argument with system().
@@ -1283,7 +1294,7 @@ vim_strsave_shellescape(string, do_special)
* the like we must not put a backslash before it, it will be taken * the like we must not put a backslash before it, it will be taken
* literally. If do_special is set the '!' will be escaped twice. * literally. If do_special is set the '!' will be escaped twice.
* Csh also needs to have "\n" escaped twice when do_special is set. */ * Csh also needs to have "\n" escaped twice when do_special is set. */
csh_like = (strstr((char *)gettail(p_sh), "csh") != NULL); csh_like = csh_like_shell();
/* First count the number of extra bytes required. */ /* First count the number of extra bytes required. */
length = (unsigned)STRLEN(string) + 3; /* two quotes and a trailing NUL */ length = (unsigned)STRLEN(string) + 3; /* two quotes and a trailing NUL */

View File

@@ -29,6 +29,7 @@ char_u *vim_strsave __ARGS((char_u *string));
char_u *vim_strnsave __ARGS((char_u *string, int len)); char_u *vim_strnsave __ARGS((char_u *string, int len));
char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars)); char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl)); char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
int csh_like_shell __ARGS((void));
char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special)); char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special));
char_u *vim_strsave_up __ARGS((char_u *string)); char_u *vim_strsave_up __ARGS((char_u *string));
char_u *vim_strnsave_up __ARGS((char_u *string, int len)); char_u *vim_strnsave_up __ARGS((char_u *string, int len));

View File

@@ -5447,8 +5447,7 @@ status_match_len(xp, s)
while (*s != NUL) while (*s != NUL)
{ {
if (skip_status_match_char(xp, s)) s += skip_status_match_char(xp, s);
++s;
len += ptr2cells(s); len += ptr2cells(s);
mb_ptr_adv(s); mb_ptr_adv(s);
} }
@@ -5457,7 +5456,7 @@ status_match_len(xp, s)
} }
/* /*
* Return TRUE for characters that are not displayed in a status match. * Return the number of characters that should be skipped in a status match.
* These are backslashes used for escaping. Do show backslashes in help tags. * These are backslashes used for escaping. Do show backslashes in help tags.
*/ */
static int static int
@@ -5465,13 +5464,21 @@ skip_status_match_char(xp, s)
expand_T *xp; expand_T *xp;
char_u *s; char_u *s;
{ {
return ((rem_backslash(s) && xp->xp_context != EXPAND_HELP) if ((rem_backslash(s) && xp->xp_context != EXPAND_HELP)
#ifdef FEAT_MENU #ifdef FEAT_MENU
|| ((xp->xp_context == EXPAND_MENUS || ((xp->xp_context == EXPAND_MENUS
|| xp->xp_context == EXPAND_MENUNAMES) || xp->xp_context == EXPAND_MENUNAMES)
&& (s[0] == '\t' || (s[0] == '\\' && s[1] != NUL))) && (s[0] == '\t' || (s[0] == '\\' && s[1] != NUL)))
#endif #endif
); )
{
#ifndef BACKSLASH_IN_FILENAME
if (xp->xp_shell && csh_like_shell() && s[1] == '\\' && s[2] == '!')
return 2;
#endif
return 1;
}
return 0;
} }
/* /*
@@ -5609,8 +5616,7 @@ win_redr_status_matches(xp, num_matches, matches, match, showtail)
#endif #endif
for ( ; *s != NUL; ++s) for ( ; *s != NUL; ++s)
{ {
if (skip_status_match_char(xp, s)) s += skip_status_match_char(xp, s);
++s;
clen += ptr2cells(s); clen += ptr2cells(s);
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1) if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
@@ -6264,7 +6270,7 @@ screen_puts_len(text, len, row, col, attr)
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
/* When drawing over the right halve of a double-wide char clear out the /* When drawing over the right halve of a double-wide char clear out the
* left halve. Only needed in a terminal. */ * left halve. Only needed in a terminal. */
if (has_mbyte if (has_mbyte && col > 0 && col < screen_Columns
# ifdef FEAT_GUI # ifdef FEAT_GUI
&& !gui.in_use && !gui.in_use
# endif # endif
@@ -7138,7 +7144,7 @@ screen_fill(start_row, end_row, start_col, end_col, c1, c2, attr)
* out the left halve. When drawing over the left halve of a * out the left halve. When drawing over the left halve of a
* double wide-char clear out the right halve. Only needed in a * double wide-char clear out the right halve. Only needed in a
* terminal. */ * terminal. */
if (mb_fix_col(start_col, row) != start_col) if (start_col > 0 && mb_fix_col(start_col, row) != start_col)
screen_puts_len((char_u *)" ", 1, row, start_col - 1, 0); screen_puts_len((char_u *)" ", 1, row, start_col - 1, 0);
if (end_col < screen_Columns && mb_fix_col(end_col, row) != end_col) if (end_col < screen_Columns && mb_fix_col(end_col, row) != end_col)
screen_puts_len((char_u *)" ", 1, row, end_col, 0); screen_puts_len((char_u *)" ", 1, row, end_col, 0);

View File

@@ -676,6 +676,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
18,
/**/ /**/
17, 17,
/**/ /**/