summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-02-27 17:19:10 +0100
committerBram Moolenaar <Bram@vim.org>2015-02-27 17:19:10 +0100
commitd45c07ac7499358c5cb096cadb675ce74ae3eaf6 (patch)
tree13875945fd62b050fb38fed1b109fedb350c2301
parentdfd7691bb85b345bd86cf30945a66acf7c782920 (diff)
downloadvim-git-d45c07ac7499358c5cb096cadb675ce74ae3eaf6.tar.gz
updated for version 7.4.642v7.4.642
Problem: When using "gf" escaped spaces are not handled. Solution: Recognize escaped spaces.
-rw-r--r--src/misc2.c11
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h1
-rw-r--r--src/window.c16
4 files changed, 24 insertions, 6 deletions
diff --git a/src/misc2.c b/src/misc2.c
index d421a00bc..8f19578df 100644
--- 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, 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;
@@ -5530,6 +5532,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 34c695972..d9e919282 100644
--- 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,
diff --git a/src/vim.h b/src/vim.h
index a7bb00170..61cd5b900 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -939,6 +939,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 6ca288ead..eb218d560 100644
--- 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 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);
}
@@ -6310,14 +6311,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.