Patch 8.1.0211
Problem:    Expanding a file name "~" results in $HOME. (Aidan Shafran)
Solution:   Change "~" to "./~" before expanding. (closes #3072)
Files:      src/testdir/test_expand.vim, src/ex_docmd.c, src/eval.c,
            src/proto/eval.pro, src/evalfunc.c, src/if_cscope.c, src/misc1.c


*** ../vim-8.1.0210/src/testdir/test_expand.vim Sun Jan 17 18:33:03 2016
--- src/testdir/test_expand.vim Wed Jul 25 21:05:55 2018
***************
*** 39,41 ****
--- 39,49 ----
    call delete('Xdir ~ dir', 'd')
    call assert_false(isdirectory('Xdir ~ dir'))
  endfunc
+ 
+ func Test_expand_tilde_filename()
+   split ~
+   call assert_equal('~', expand('%')) 
+   call assert_notequal(expand('%:p'), expand('~/'))
+   call assert_match('\~', expand('%:p')) 
+   bwipe!
+ endfunc
*** ../vim-8.1.0210/src/ex_docmd.c      Sat Jul  7 16:41:10 2018
--- src/ex_docmd.c      Wed Jul 25 21:03:33 2018
***************
*** 10654,10659 ****
--- 10654,10660 ----
      int               resultlen;
      buf_T     *buf;
      int               valid = VALID_HEAD + VALID_PATH;    /* assume valid 
result */
+     int               tilde_file = FALSE;
      int               spec_idx;
  #ifdef FEAT_MODIFY_FNAME
      int               skip_mod = FALSE;
***************
*** 10720,10726 ****
--- 10721,10730 ----
                    valid = 0;      /* Must have ":p:h" to be valid */
                }
                else
+               {
                    result = curbuf->b_fname;
+                   tilde_file = STRCMP(result, "~") == 0;
+               }
                break;
  
        case SPEC_HASH:         /* '#' or "#99": alternate file */
***************
*** 10784,10790 ****
--- 10788,10797 ----
                        valid = 0;          /* Must have ":p:h" to be valid */
                    }
                    else
+                   {
                        result = buf->b_fname;
+                       tilde_file = STRCMP(result, "~") == 0;
+                   }
                }
                break;
  
***************
*** 10877,10883 ****
  #ifdef FEAT_MODIFY_FNAME
        else if (!skip_mod)
        {
!           valid |= modify_fname(src, usedlen, &result, &resultbuf,
                                                                  &resultlen);
            if (result == NULL)
            {
--- 10884,10890 ----
  #ifdef FEAT_MODIFY_FNAME
        else if (!skip_mod)
        {
!           valid |= modify_fname(src, tilde_file, usedlen, &result, &resultbuf,
                                                                  &resultlen);
            if (result == NULL)
            {
*** ../vim-8.1.0210/src/eval.c  Wed Jul 25 19:49:41 2018
--- src/eval.c  Wed Jul 25 21:05:06 2018
***************
*** 9690,9700 ****
   */
      int
  modify_fname(
!     char_u    *src,           /* string with modifiers */
!     int               *usedlen,       /* characters after src that are used */
!     char_u    **fnamep,       /* file name so far */
!     char_u    **bufp,         /* buffer for allocated file name or NULL */
!     int               *fnamelen)      /* length of fnamep */
  {
      int               valid = 0;
      char_u    *tail;
--- 9690,9701 ----
   */
      int
  modify_fname(
!     char_u    *src,           // string with modifiers
!     int               tilde_file,     // "~" is a file name, not $HOME
!     int               *usedlen,       // characters after src that are used
!     char_u    **fnamep,       // file name so far
!     char_u    **bufp,         // buffer for allocated file name or NULL
!     int               *fnamelen)      // length of fnamep
  {
      int               valid = 0;
      char_u    *tail;
***************
*** 9724,9731 ****
                    || (*fnamep)[1] == '\\'
  # endif
                    || (*fnamep)[1] == NUL)
- 
  #endif
           )
        {
            *fnamep = expand_env_save(*fnamep);
--- 9725,9732 ----
                    || (*fnamep)[1] == '\\'
  # endif
                    || (*fnamep)[1] == NUL)
  #endif
+               && !(tilde_file && (*fnamep)[1] == NUL)
           )
        {
            *fnamep = expand_env_save(*fnamep);
*** ../vim-8.1.0210/src/proto/eval.pro  Tue Jun 12 22:05:10 2018
--- src/proto/eval.pro  Wed Jul 25 21:03:50 2018
***************
*** 136,142 ****
  int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int 
type_is, int ic);
  char_u *typval_tostring(typval_T *arg);
  int var_exists(char_u *var);
! int modify_fname(char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, 
int *fnamelen);
  char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, 
char_u *flags);
  void filter_map(typval_T *argvars, typval_T *rettv, int map);
  /* vim: set ft=c : */
--- 136,142 ----
  int typval_compare(typval_T *typ1, typval_T *typ2, exptype_T type, int 
type_is, int ic);
  char_u *typval_tostring(typval_T *arg);
  int var_exists(char_u *var);
! int modify_fname(char_u *src, int tilde_file, int *usedlen, char_u **fnamep, 
char_u **bufp, int *fnamelen);
  char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, typval_T *expr, 
char_u *flags);
  void filter_map(typval_T *argvars, typval_T *rettv, int map);
  /* vim: set ft=c : */
*** ../vim-8.1.0210/src/evalfunc.c      Wed Jul 25 19:49:41 2018
--- src/evalfunc.c      Wed Jul 25 21:01:17 2018
***************
*** 3801,3807 ****
      else
      {
        len = (int)STRLEN(fname);
!       (void)modify_fname(mods, &usedlen, &fname, &fbuf, &len);
      }
  
      rettv->v_type = VAR_STRING;
--- 3801,3807 ----
      else
      {
        len = (int)STRLEN(fname);
!       (void)modify_fname(mods, FALSE, &usedlen, &fname, &fbuf, &len);
      }
  
      rettv->v_type = VAR_STRING;
*** ../vim-8.1.0210/src/if_cscope.c     Sun Mar  4 16:07:23 2018
--- src/if_cscope.c     Wed Jul 25 21:10:45 2018
***************
*** 519,525 ****
  #ifdef FEAT_MODIFY_FNAME
      len = (int)STRLEN(fname);
      fbuf = (char_u *)fname;
!     (void)modify_fname((char_u *)":p", &usedlen,
                                              (char_u **)&fname, &fbuf, &len);
      if (fname == NULL)
        goto add_err;
--- 519,525 ----
  #ifdef FEAT_MODIFY_FNAME
      len = (int)STRLEN(fname);
      fbuf = (char_u *)fname;
!     (void)modify_fname((char_u *)":p", FALSE, &usedlen,
                                              (char_u **)&fname, &fbuf, &len);
      if (fname == NULL)
        goto add_err;
*** ../vim-8.1.0210/src/misc1.c Sat Jul  7 16:41:10 2018
--- src/misc1.c Wed Jul 25 21:11:10 2018
***************
*** 4908,4914 ****
        char_u  *fbuf = NULL;
  
        flen = (int)STRLEN(homedir_env);
!       (void)modify_fname((char_u *)":p", &usedlen,
                                                  &homedir_env, &fbuf, &flen);
        flen = (int)STRLEN(homedir_env);
        if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
--- 4908,4914 ----
        char_u  *fbuf = NULL;
  
        flen = (int)STRLEN(homedir_env);
!       (void)modify_fname((char_u *)":p", FALSE, &usedlen,
                                                  &homedir_env, &fbuf, &flen);
        flen = (int)STRLEN(homedir_env);
        if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
*** ../vim-8.1.0210/src/version.c       Wed Jul 25 19:49:41 2018
--- src/version.c       Wed Jul 25 21:18:08 2018
***************
*** 795,796 ****
--- 795,798 ----
  {   /* Add new patch number below this line */
+ /**/
+     211,
  /**/

-- 
You were lucky to have a LAKE! There were a hundred and sixty of
us living in a small shoebox in the middle of the road.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui