changeset 6633:75444015837a v7.4.642

updated for version 7.4.642 Problem: When using "gf" escaped spaces are not handled. Solution: Recognize escaped spaces.
author Bram Moolenaar <bram@vim.org>
date Fri, 27 Feb 2015 17:19:10 +0100
parents dd52e8b22614
children 276a903321b8
files src/misc2.c src/version.c src/vim.h src/window.c
diffstat 4 files changed, 25 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -5474,6 +5474,7 @@ free_findfile()
  *
  * options:
  * FNAME_MESS	    give error message when not found
+ * FNAME_UNESC	    unescape backslashes.
  *
  * Uses NameBuff[]!
  *
@@ -5491,7 +5492,8 @@ find_directory_in_path(ptr, len, options
 }
 
     char_u *
-find_file_in_path_option(ptr, len, options, first, path_option, find_what, rel_fname, suffixes)
+find_file_in_path_option(ptr, len, options, first, path_option,
+			 find_what, rel_fname, suffixes)
     char_u	*ptr;		/* file name */
     int		len;		/* length of file name */
     int		options;
@@ -5530,6 +5532,13 @@ find_file_in_path_option(ptr, len, optio
 	    file_name = NULL;
 	    goto theend;
 	}
+	if (options & FNAME_UNESC)
+	{
+	    /* Change all "\ " to " ". */
+	    for (ptr = ff_file_to_find; *ptr != NUL; ++ptr)
+		if (ptr[0] == '\\' && ptr[1] == ' ')
+		    mch_memmove(ptr, ptr + 1, STRLEN(ptr));
+	}
     }
 
     rel_to_curdir = (ff_file_to_find[0] == '.'
--- 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 */
 /**/
+    642,
+/**/
     641,
 /**/
     640,
--- a/src/vim.h
+++ b/src/vim.h
@@ -939,6 +939,7 @@ extern char *(*dyn_libintl_textdomain)(c
 #define FNAME_INCL	8	/* apply 'includeexpr' */
 #define FNAME_REL	16	/* ".." and "./" are relative to the (current)
 				   file instead of the current directory */
+#define FNAME_UNESC	32	/* remove backslashes used for escaping */
 
 /* Values for buflist_getfile() */
 #define GETF_SETMARK	0x01	/* set pcmark before jumping */
--- a/src/window.c
+++ b/src/window.c
@@ -6219,6 +6219,8 @@ grab_file_name(count, file_lnum)
     long	count;
     linenr_T	*file_lnum;
 {
+    int options = FNAME_MESS|FNAME_EXP|FNAME_REL|FNAME_UNESC;
+
     if (VIsual_active)
     {
 	int	len;
@@ -6226,11 +6228,10 @@ grab_file_name(count, file_lnum)
 
 	if (get_visual_text(NULL, &ptr, &len) == FAIL)
 	    return NULL;
-	return find_file_name_in_path(ptr, len,
-		     FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname);
-    }
-    return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count,
-			       file_lnum);
+	return find_file_name_in_path(ptr, len, options,
+						     count, curbuf->b_ffname);
+    }
+    return file_name_at_cursor(options | FNAME_HYP, count, file_lnum);
 
 }
 
@@ -6310,14 +6311,19 @@ file_name_in_line(line, col, options, co
      * Also allow "://" when ':' is not in 'isfname'.
      */
     len = 0;
-    while (vim_isfilec(ptr[len])
+    while (vim_isfilec(ptr[len]) || (ptr[len] == '\\' && ptr[len + 1] == ' ')
 			 || ((options & FNAME_HYP) && path_is_url(ptr + len)))
+    {
+	if (ptr[len] == '\\')
+	    /* Skip over the "\" in "\ ". */
+	    ++len;
 #ifdef FEAT_MBYTE
 	if (has_mbyte)
 	    len += (*mb_ptr2len)(ptr + len);
 	else
 #endif
 	    ++len;
+    }
 
     /*
      * If there is trailing punctuation, remove it.