]> granicus.if.org Git - vim/commitdiff
updated for version 7.2b-018 v7.2b.018
authorBram Moolenaar <Bram@vim.org>
Thu, 24 Jul 2008 18:29:37 +0000 (18:29 +0000)
committerBram Moolenaar <Bram@vim.org>
Thu, 24 Jul 2008 18:29:37 +0000 (18:29 +0000)
src/ex_getln.c
src/misc2.c
src/proto/misc2.pro
src/screen.c
src/version.c

index 4979b2ff9d893732f7bf479008df89ea6567539f..38e0fe8240282427b2ea8eb8a55326f60d8e1920 100644 (file)
@@ -3707,10 +3707,10 @@ vim_strsave_fnameescape(fname, shell)
     char_u *fname;
     int    shell;
 {
+    char_u     *p;
 #ifdef BACKSLASH_IN_FILENAME
     char_u     buf[20];
     int                j = 0;
-    char_u     *p;
 
     /* Don't escape '[' and '{' if they are in 'isfname'. */
     for (p = PATH_ESC_CHARS; *p != NUL; ++p)
@@ -3719,7 +3719,18 @@ vim_strsave_fnameescape(fname, shell)
     buf[j] = NUL;
     return vim_strsave_escaped(fname, buf);
 #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
 }
 
@@ -5960,7 +5971,9 @@ ex_window()
     linenr_T           lnum;
     int                        histtype;
     garray_T           winsizes;
+#ifdef FEAT_AUTOCMD
     char_u             typestr[2];
+#endif
     int                        save_restart_edit = restart_edit;
     int                        save_State = State;
     int                        save_exmode = exmode_active;
index 6895955c37cc985c01e40a9cf212f8ff861e2b83..bc9091f089df73878dbc487a6f60d5dba283ef2f 100644 (file)
@@ -1257,6 +1257,17 @@ vim_strsave_escaped_ext(string, esc_chars, cc, bsl)
     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)
 /*
  * 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
      * 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_like = (strstr((char *)gettail(p_sh), "csh") != NULL);
+    csh_like = csh_like_shell();
 
     /* First count the number of extra bytes required. */
     length = (unsigned)STRLEN(string) + 3;  /* two quotes and a trailing NUL */
index 397a09a2573e69a9d60c96798d4e0d18a95ea214..c386a0d4c0acc6ed66b247210d4d766aca6c544d 100644 (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_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));
+int csh_like_shell __ARGS((void));
 char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special));
 char_u *vim_strsave_up __ARGS((char_u *string));
 char_u *vim_strnsave_up __ARGS((char_u *string, int len));
index 95a89144c326d186635dd2c33b0e6b6c520ffa55..45ccf0034a77ce06ed8533f47e630bc9bf29b16b 100644 (file)
@@ -5447,8 +5447,7 @@ status_match_len(xp, s)
 
     while (*s != NUL)
     {
-       if (skip_status_match_char(xp, s))
-           ++s;
+       s += skip_status_match_char(xp, s);
        len += ptr2cells(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.
  */
     static int
@@ -5465,13 +5464,21 @@ skip_status_match_char(xp, s)
     expand_T   *xp;
     char_u     *s;
 {
-    return ((rem_backslash(s) && xp->xp_context != EXPAND_HELP)
+    if ((rem_backslash(s) && xp->xp_context != EXPAND_HELP)
 #ifdef FEAT_MENU
            || ((xp->xp_context == EXPAND_MENUS
                    || xp->xp_context == EXPAND_MENUNAMES)
                          && (s[0] == '\t' || (s[0] == '\\' && s[1] != NUL)))
 #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
            for ( ; *s != NUL; ++s)
        {
-           if (skip_status_match_char(xp, s))
-               ++s;
+           s += skip_status_match_char(xp, s);
            clen += ptr2cells(s);
 #ifdef FEAT_MBYTE
            if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
@@ -6264,7 +6270,7 @@ screen_puts_len(text, len, row, col, attr)
 #ifdef FEAT_MBYTE
     /* When drawing over the right halve of a double-wide char clear out the
      * left halve.  Only needed in a terminal. */
-    if (has_mbyte
+    if (has_mbyte && col > 0 && col < screen_Columns
 # ifdef FEAT_GUI
            && !gui.in_use
 # 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
             * double wide-char clear out the right halve.  Only needed in a
             * 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);
            if (end_col < screen_Columns && mb_fix_col(end_col, row) != end_col)
                screen_puts_len((char_u *)" ", 1, row, end_col, 0);
index 11abe51aae8ec694bd1c098c6601f34b4f50e949..ec51a6ccecc73dc2dfc4bac70979a3f97a8820f7 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    18,
 /**/
     17,
 /**/