summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-10 13:12:28 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-10 13:12:28 +0200
commit0e390f40e944036fb558a63b91238cfda128d95f (patch)
treea0cfb553a4eb3b22df2f70bb5196cebe304a07d4
parent517f00f78893087d2f9d45768a5ba4dc48cb6856 (diff)
downloadvim-git-0e390f40e944036fb558a63b91238cfda128d95f.tar.gz
patch 8.2.0942: expanding to local dir after homedir keeps "~/"v8.2.0942
Problem: Expanding to local dir after homedir keeps "~/". Solution: Adjust modify_fname(). (Christian Brabandt, closes #6205, closes #5979)
-rw-r--r--src/filepath.c10
-rw-r--r--src/testdir/test_fnamemodify.vim3
-rw-r--r--src/version.c2
3 files changed, 9 insertions, 6 deletions
diff --git a/src/filepath.c b/src/filepath.c
index 8bc941d35..4a4948ad6 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -416,7 +416,7 @@ repeat:
// Need full path first (use expand_env() to remove a "~/")
if (!has_fullname && !has_homerelative)
{
- if (c == '.' && **fnamep == '~')
+ if ((c == '.' || c == '~') && **fnamep == '~')
p = pbuf = expand_env_save(*fnamep);
else
p = pbuf = FullName_save(*fnamep, FALSE);
@@ -2397,11 +2397,9 @@ home_replace(
if (--dstlen > 0)
*dst++ = '~';
- /*
- * If it's just the home directory, add "/".
- */
- if (!vim_ispathsep(src[0]) && --dstlen > 0)
- *dst++ = '/';
+ // Do not add directory separator into dst, because dst is
+ // expected to just return the directory name without the
+ // directory separator '/'.
break;
}
if (p == homedir_env)
diff --git a/src/testdir/test_fnamemodify.vim b/src/testdir/test_fnamemodify.vim
index b90d232f9..f8ce0b14a 100644
--- a/src/testdir/test_fnamemodify.vim
+++ b/src/testdir/test_fnamemodify.vim
@@ -31,6 +31,9 @@ func Test_fnamemodify()
call assert_equal('tar', fnamemodify('abc.fb2.tar.gz', ':e:e:r'))
let cwd = getcwd()
+ call chdir($HOME)
+ call assert_equal('foobar', fnamemodify('~/foobar', ':~:.'))
+ call chdir(cwd)
call mkdir($HOME . '/XXXXXXXX/a', 'p')
call mkdir($HOME . '/XXXXXXXX/b', 'p')
call chdir($HOME . '/XXXXXXXX/a/')
diff --git a/src/version.c b/src/version.c
index 4c8822a11..570ea1046 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 942,
+/**/
941,
/**/
940,