0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

updated for version 7.4.642

Problem:    When using "gf" escaped spaces are not handled.
Solution:   Recognize escaped spaces.
This commit is contained in:
Bram Moolenaar
2015-02-27 17:19:10 +01:00
parent dfd7691bb8
commit d45c07ac74
4 changed files with 24 additions and 6 deletions

View File

@@ -5474,6 +5474,7 @@ free_findfile()
* *
* options: * options:
* FNAME_MESS give error message when not found * FNAME_MESS give error message when not found
* FNAME_UNESC unescape backslashes.
* *
* Uses NameBuff[]! * Uses NameBuff[]!
* *
@@ -5491,7 +5492,8 @@ find_directory_in_path(ptr, len, options, rel_fname)
} }
char_u * 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 */ char_u *ptr; /* file name */
int len; /* length of file name */ int len; /* length of file name */
int options; int options;
@@ -5530,6 +5532,13 @@ find_file_in_path_option(ptr, len, options, first, path_option, find_what, rel_f
file_name = NULL; file_name = NULL;
goto theend; 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] == '.' rel_to_curdir = (ff_file_to_find[0] == '.'

View File

@@ -741,6 +741,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 */
/**/
642,
/**/ /**/
641, 641,
/**/ /**/

View File

@@ -939,6 +939,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
#define FNAME_INCL 8 /* apply 'includeexpr' */ #define FNAME_INCL 8 /* apply 'includeexpr' */
#define FNAME_REL 16 /* ".." and "./" are relative to the (current) #define FNAME_REL 16 /* ".." and "./" are relative to the (current)
file instead of the current directory */ file instead of the current directory */
#define FNAME_UNESC 32 /* remove backslashes used for escaping */
/* Values for buflist_getfile() */ /* Values for buflist_getfile() */
#define GETF_SETMARK 0x01 /* set pcmark before jumping */ #define GETF_SETMARK 0x01 /* set pcmark before jumping */

View File

@@ -6219,6 +6219,8 @@ grab_file_name(count, file_lnum)
long count; long count;
linenr_T *file_lnum; linenr_T *file_lnum;
{ {
int options = FNAME_MESS|FNAME_EXP|FNAME_REL|FNAME_UNESC;
if (VIsual_active) if (VIsual_active)
{ {
int len; int len;
@@ -6226,11 +6228,10 @@ grab_file_name(count, file_lnum)
if (get_visual_text(NULL, &ptr, &len) == FAIL) if (get_visual_text(NULL, &ptr, &len) == FAIL)
return NULL; return NULL;
return find_file_name_in_path(ptr, len, return find_file_name_in_path(ptr, len, options,
FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname); count, curbuf->b_ffname);
} }
return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count, return file_name_at_cursor(options | FNAME_HYP, count, file_lnum);
file_lnum);
} }
@@ -6310,14 +6311,19 @@ file_name_in_line(line, col, options, count, rel_fname, file_lnum)
* Also allow "://" when ':' is not in 'isfname'. * Also allow "://" when ':' is not in 'isfname'.
*/ */
len = 0; 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))) || ((options & FNAME_HYP) && path_is_url(ptr + len)))
{
if (ptr[len] == '\\')
/* Skip over the "\" in "\ ". */
++len;
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
if (has_mbyte) if (has_mbyte)
len += (*mb_ptr2len)(ptr + len); len += (*mb_ptr2len)(ptr + len);
else else
#endif #endif
++len; ++len;
}
/* /*
* If there is trailing punctuation, remove it. * If there is trailing punctuation, remove it.