From 7ac8c6301fe30d1d3ea4ad3c8d7c9e07d146c82a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 27 Feb 2015 17:19:10 +0100 Subject: [PATCH] updated for version 7.4.642 Problem: When using "gf" escaped spaces are not handled. Solution: Recognize escaped spaces. --- src/misc2.c | 11 ++++++++++- src/version.c | 2 ++ src/vim.h | 1 + src/window.c | 16 +++++++++++----- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/misc2.c b/src/misc2.c index e27928e25f..6b75c268dd 100644 --- a/src/misc2.c +++ b/src/misc2.c @@ -5480,6 +5480,7 @@ free_findfile() * * options: * FNAME_MESS give error message when not found + * FNAME_UNESC unescape backslashes. * * Uses NameBuff[]! * @@ -5497,7 +5498,8 @@ find_directory_in_path(ptr, len, options, rel_fname) } 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; @@ -5536,6 +5538,13 @@ find_file_in_path_option(ptr, len, options, first, path_option, find_what, rel_f 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] == '.' diff --git a/src/version.c b/src/version.c index 19eecdfc6e..f6f0137be3 100644 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 642, /**/ 641, /**/ diff --git a/src/vim.h b/src/vim.h index 74325037e8..cacf3d1b29 100644 --- a/src/vim.h +++ b/src/vim.h @@ -942,6 +942,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname); #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 */ diff --git a/src/window.c b/src/window.c index be05e64212..851728ef15 100644 --- a/src/window.c +++ b/src/window.c @@ -6229,6 +6229,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; @@ -6236,11 +6238,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 find_file_name_in_path(ptr, len, options, + count, curbuf->b_ffname); } - return file_name_at_cursor(FNAME_MESS|FNAME_HYP|FNAME_EXP|FNAME_REL, count, - file_lnum); + return file_name_at_cursor(options | FNAME_HYP, count, file_lnum); } @@ -6320,14 +6321,19 @@ file_name_in_line(line, col, options, count, rel_fname, file_lnum) * 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.