Patch 7.3.872
Problem:    On some systems case of file names is always ignored, on others
            never.
Solution:   Add the 'fileignorecase' option to control this at runtime.
            Implies 'wildignorecase'.
Files:      src/buffer.c, src/edit.c, src/ex_cmds2.c, src/ex_getln.c,
            src/fileio.c, src/misc1.c, src/misc2.c, src/option.c,
            src/option.h, src/vim.h, runtime/doc/options.txt


*** ../vim-7.3.871/src/buffer.c 2013-03-19 14:25:50.000000000 +0100
--- src/buffer.c        2013-03-19 16:03:42.000000000 +0100
***************
*** 2401,2412 ****
      if (name != NULL)
      {
        regmatch.regprog = prog;
! #ifdef CASE_INSENSITIVE_FILENAME
!       regmatch.rm_ic = TRUE;          /* Always ignore case */
! #else
!       regmatch.rm_ic = FALSE;         /* Never ignore case */
! #endif
! 
        if (vim_regexec(&regmatch, name, (colnr_T)0))
            match = name;
        else
--- 2401,2407 ----
      if (name != NULL)
      {
        regmatch.regprog = prog;
!       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
        if (vim_regexec(&regmatch, name, (colnr_T)0))
            match = name;
        else
*** ../vim-7.3.871/src/edit.c   2013-03-19 13:33:18.000000000 +0100
--- src/edit.c  2013-03-19 15:43:19.000000000 +0100
***************
*** 4336,4348 ****
  
                /* May change home directory back to "~". */
                tilde_replace(compl_pattern, num_matches, matches);
!               ins_compl_add_matches(num_matches, matches,
! #ifdef CASE_INSENSITIVE_FILENAME
!                       TRUE
! #else
!                       FALSE
! #endif
!                       );
            }
            break;
  
--- 4336,4342 ----
  
                /* May change home directory back to "~". */
                tilde_replace(compl_pattern, num_matches, matches);
!               ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
            }
            break;
  
*** ../vim-7.3.871/src/ex_cmds2.c       2012-10-03 18:24:55.000000000 +0200
--- src/ex_cmds2.c      2013-03-19 16:03:50.000000000 +0100
***************
*** 1926,1936 ****
         * Delete the items: use each item as a regexp and find a match in the
         * argument list.
         */
! #ifdef CASE_INSENSITIVE_FILENAME
!       regmatch.rm_ic = TRUE;          /* Always ignore case */
! #else
!       regmatch.rm_ic = FALSE;         /* Never ignore case */
! #endif
        for (i = 0; i < new_ga.ga_len && !got_int; ++i)
        {
            p = ((char_u **)new_ga.ga_data)[i];
--- 1926,1932 ----
         * Delete the items: use each item as a regexp and find a match in the
         * argument list.
         */
!       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
        for (i = 0; i < new_ga.ga_len && !got_int; ++i)
        {
            p = ((char_u **)new_ga.ga_data)[i];
*** ../vim-7.3.871/src/ex_getln.c       2012-11-28 16:49:53.000000000 +0100
--- src/ex_getln.c      2013-03-19 16:03:53.000000000 +0100
***************
*** 3653,3671 ****
        {
            for (i = 0; i < xp->xp_numfiles; ++i)
            {
! #ifdef CASE_INSENSITIVE_FILENAME
!               if (xp->xp_context == EXPAND_DIRECTORIES
                        || xp->xp_context == EXPAND_FILES
                        || xp->xp_context == EXPAND_SHELLCMD
!                       || xp->xp_context == EXPAND_BUFFERS)
                {
                    if (TOLOWER_LOC(xp->xp_files[i][len]) !=
                                            TOLOWER_LOC(xp->xp_files[0][len]))
                        break;
                }
!               else
! #endif
!                    if (xp->xp_files[i][len] != xp->xp_files[0][len])
                    break;
            }
            if (i < xp->xp_numfiles)
--- 3653,3668 ----
        {
            for (i = 0; i < xp->xp_numfiles; ++i)
            {
!               if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
                        || xp->xp_context == EXPAND_FILES
                        || xp->xp_context == EXPAND_SHELLCMD
!                       || xp->xp_context == EXPAND_BUFFERS))
                {
                    if (TOLOWER_LOC(xp->xp_files[i][len]) !=
                                            TOLOWER_LOC(xp->xp_files[0][len]))
                        break;
                }
!               else if (xp->xp_files[i][len] != xp->xp_files[0][len])
                    break;
            }
            if (i < xp->xp_numfiles)
*** ../vim-7.3.871/src/fileio.c 2013-03-19 13:33:18.000000000 +0100
--- src/fileio.c        2013-03-19 15:49:28.000000000 +0100
***************
*** 6485,6493 ****
  #ifdef HAVE_ACL
      vim_acl_T acl;            /* ACL from original file */
  #endif
- #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
      int               use_tmp_file = FALSE;
- #endif
  
      /*
       * When the names are identical, there is nothing to do.  When they refer
--- 6485,6491 ----
***************
*** 6496,6506 ****
       */
      if (fnamecmp(from, to) == 0)
      {
! #ifdef CASE_INSENSITIVE_FILENAME
!       if (STRCMP(gettail(from), gettail(to)) != 0)
            use_tmp_file = TRUE;
        else
- #endif
            return 0;
      }
  
--- 6494,6502 ----
       */
      if (fnamecmp(from, to) == 0)
      {
!       if (p_fic && STRCMP(gettail(from), gettail(to)) != 0)
            use_tmp_file = TRUE;
        else
            return 0;
      }
  
***************
*** 6539,6545 ****
      }
  #endif
  
- #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
      if (use_tmp_file)
      {
        char    tempname[MAXPATHL + 1];
--- 6535,6540 ----
***************
*** 6572,6578 ****
        }
        return -1;
      }
- #endif
  
      /*
       * Delete the "to" file, this is required on some systems to make the
--- 6567,6572 ----
***************
*** 10007,10017 ****
      int               match = FALSE;
  #endif
  
! #ifdef CASE_INSENSITIVE_FILENAME
!     regmatch.rm_ic = TRUE;            /* Always ignore case */
! #else
!     regmatch.rm_ic = FALSE;           /* Don't ever ignore case */
! #endif
  #ifdef FEAT_OSFILETYPE
      if (*pattern == '<')
      {
--- 10001,10007 ----
      int               match = FALSE;
  #endif
  
!     regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
  #ifdef FEAT_OSFILETYPE
      if (*pattern == '<')
      {
*** ../vim-7.3.871/src/misc1.c  2013-03-16 21:35:28.000000000 +0100
--- src/misc1.c 2013-03-19 16:16:24.000000000 +0100
***************
*** 5026,5041 ****
      return retval;
  }
  
- #if (defined(CASE_INSENSITIVE_FILENAME) && defined(BACKSLASH_IN_FILENAME)) \
-       || defined(PROTO)
  /*
!  * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally.
   */
      int
  vim_fnamecmp(x, y)
      char_u    *x, *y;
  {
      return vim_fnamencmp(x, y, MAXPATHL);
  }
  
      int
--- 5026,5046 ----
      return retval;
  }
  
  /*
!  * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally
!  * and deal with 'fileignorecase'.
   */
      int
  vim_fnamecmp(x, y)
      char_u    *x, *y;
  {
+ #ifdef BACKSLASH_IN_FILENAME
      return vim_fnamencmp(x, y, MAXPATHL);
+ #else
+     if (p_fic)
+       return MB_STRICMP(x, y);
+     return STRCMP(x, y);
+ #endif
  }
  
      int
***************
*** 5043,5051 ****
      char_u    *x, *y;
      size_t    len;
  {
      while (len > 0 && *x && *y)
      {
!       if (TOLOWER_LOC(*x) != TOLOWER_LOC(*y)
                && !(*x == '/' && *y == '\\')
                && !(*x == '\\' && *y == '/'))
            break;
--- 5048,5058 ----
      char_u    *x, *y;
      size_t    len;
  {
+ #ifdef BACKSLASH_IN_FILENAME
+     /* TODO: multi-byte characters. */
      while (len > 0 && *x && *y)
      {
!       if ((p_fic ? TOLOWER_LOC(*x) != TOLOWER_LOC(*y) : *x != *y)
                && !(*x == '/' && *y == '\\')
                && !(*x == '\\' && *y == '/'))
            break;
***************
*** 5056,5063 ****
      if (len == 0)
        return 0;
      return (*x - *y);
! }
  #endif
  
  /*
   * Concatenate file names fname1 and fname2 into allocated memory.
--- 5063,5074 ----
      if (len == 0)
        return 0;
      return (*x - *y);
! #else
!     if (p_fic)
!       return MB_STRNICMP(x, y, len);
!     return STRNCMP(x, y, len);
  #endif
+ }
  
  /*
   * Concatenate file names fname1 and fname2 into allocated memory.
***************
*** 9835,9845 ****
        }
        else if (path_end >= path + wildoff
                         && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
! #ifndef CASE_INSENSITIVE_FILENAME
!                            || ((flags & EW_ICASE)
!                                              && isalpha(PTR2CHAR(path_end)))
! #endif
!                            ))
            e = p;
  #ifdef FEAT_MBYTE
        if (has_mbyte)
--- 9846,9853 ----
        }
        else if (path_end >= path + wildoff
                         && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
!                            || (!p_fic && (flags & EW_ICASE)
!                                            && isalpha(PTR2CHAR(path_end)))))
            e = p;
  #ifdef FEAT_MBYTE
        if (has_mbyte)
***************
*** 9882,9895 ****
      }
  
      /* compile the regexp into a program */
- #ifdef CASE_INSENSITIVE_FILENAME
-     regmatch.rm_ic = TRUE;            /* Behave like Terminal.app */
- #else
      if (flags & EW_ICASE)
        regmatch.rm_ic = TRUE;          /* 'wildignorecase' set */
      else
!       regmatch.rm_ic = FALSE;         /* Don't ignore case */
! #endif
      if (flags & (EW_NOERROR | EW_NOTWILD))
        ++emsg_silent;
      regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
--- 9890,9899 ----
      }
  
      /* compile the regexp into a program */
      if (flags & EW_ICASE)
        regmatch.rm_ic = TRUE;          /* 'wildignorecase' set */
      else
!       regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
      if (flags & (EW_NOERROR | EW_NOTWILD))
        ++emsg_silent;
      regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
*** ../vim-7.3.871/src/misc2.c  2012-11-28 18:31:49.000000000 +0100
--- src/misc2.c 2013-03-19 16:39:56.000000000 +0100
***************
*** 5362,5374 ****
      if (STRLEN(s1) != STRLEN(s2))
        return FAIL;
  
      for (i = 0; s1[i] != NUL && s2[i] != NUL; i++)
      {
        if (s1[i] != s2[i]
! #ifdef CASE_INSENSITIVE_FILENAME
!               && TOUPPER_LOC(s1[i]) != TOUPPER_LOC(s2[i])
! #endif
!               )
        {
            if (i >= 2)
                if (s1[i-1] == '*' && s1[i-2] == '*')
--- 5362,5372 ----
      if (STRLEN(s1) != STRLEN(s2))
        return FAIL;
  
+     /* TODO: handle multi-byte characters. */
      for (i = 0; s1[i] != NUL && s2[i] != NUL; i++)
      {
        if (s1[i] != s2[i]
!                     && (!p_fic || TOUPPER_LOC(s1[i]) != TOUPPER_LOC(s2[i])))
        {
            if (i >= 2)
                if (s1[i-1] == '*' && s1[i-2] == '*')
***************
*** 6123,6134 ****
            break;
        }
  
!       if (
! #ifdef CASE_INSENSITIVE_FILENAME
!               TOUPPER_LOC(p[i]) != TOUPPER_LOC(q[i])
! #else
!               p[i] != q[i]
! #endif
  #ifdef BACKSLASH_IN_FILENAME
                /* consider '/' and '\\' to be equal */
                && !((p[i] == '/' && q[i] == '\\')
--- 6121,6127 ----
            break;
        }
  
!       if ((p_fic ? TOUPPER_LOC(p[i]) != TOUPPER_LOC(q[i]) : p[i] != q[i])
  #ifdef BACKSLASH_IN_FILENAME
                /* consider '/' and '\\' to be equal */
                && !((p[i] == '/' && q[i] == '\\')
*** ../vim-7.3.871/src/option.c 2013-03-13 20:42:28.000000000 +0100
--- src/option.c        2013-03-19 15:40:25.000000000 +0100
***************
*** 1108,1113 ****
--- 1108,1122 ----
                            (char_u *)&p_ffs, PV_NONE,
                            {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
                            SCRIPTID_INIT},
+     {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
+                           (char_u *)&p_fic, PV_NONE,
+                           {
+ #ifdef CASE_INSENSITIVE_FILENAME
+                                   (char_u *)TRUE,
+ #else
+                                   (char_u *)FALSE,
+ #endif
+                                       (char_u *)0L} SCRIPTID_INIT},
      {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
  #ifdef FEAT_AUTOCMD
                            (char_u *)&p_ft, PV_FT,
*** ../vim-7.3.871/src/option.h 2012-08-15 16:20:59.000000000 +0200
--- src/option.h        2013-03-19 15:42:24.000000000 +0100
***************
*** 453,458 ****
--- 453,459 ----
  EXTERN char_u *p_fencs;       /* 'fileencodings' */
  #endif
  EXTERN char_u *p_ffs;         /* 'fileformats' */
+ EXTERN long   p_fic;          /* 'fileignorecase' */
  #ifdef FEAT_FOLDING
  EXTERN char_u *p_fcl;         /* 'foldclose' */
  EXTERN long   p_fdls;         /* 'foldlevelstart' */
*** ../vim-7.3.871/src/vim.h    2013-03-19 13:33:18.000000000 +0100
--- src/vim.h   2013-03-19 16:14:29.000000000 +0100
***************
*** 1627,1644 ****
   * (this does not account for maximum name lengths and things like "../dir",
   * thus it is not 100% accurate!)
   */
! #ifdef CASE_INSENSITIVE_FILENAME
! # ifdef BACKSLASH_IN_FILENAME
! #  define fnamecmp(x, y) vim_fnamecmp((x), (y))
! #  define fnamencmp(x, y, n) vim_fnamencmp((x), (y), (size_t)(n))
! # else
! #  define fnamecmp(x, y) MB_STRICMP((x), (y))
! #  define fnamencmp(x, y, n) MB_STRNICMP((x), (y), (n))
! # endif
! #else
! # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
! # define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
! #endif
  
  #ifdef HAVE_MEMSET
  # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
--- 1627,1634 ----
   * (this does not account for maximum name lengths and things like "../dir",
   * thus it is not 100% accurate!)
   */
! #define fnamecmp(x, y) vim_fnamecmp((char_u *)(x), (char_u *)(y))
! #define fnamencmp(x, y, n) vim_fnamencmp((char_u *)(x), (char_u *)(y), 
(size_t)(n))
  
  #ifdef HAVE_MEMSET
  # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
*** ../vim-7.3.871/runtime/doc/options.txt      2013-01-23 18:37:31.000000000 
+0100
--- runtime/doc/options.txt     2013-03-19 16:25:49.000000000 +0100
***************
*** 2895,2900 ****
--- 2941,2954 ----
        NOTE: This option is set to the Vi default value when 'compatible' is
        set and to the Vim default value when 'compatible' is reset.
  
+                       *'fileignorecase'* *'wic'* *'nofileignorecase'* 
*'nowic'*
+ 'fileignorecase' 'wic'        boolean (default on for systems where case in 
file
+                                names is normally ignored.
+                       global
+                       {not in Vi}
+       When set case is ignored when using file names and directories.
+       See 'wildignorecase' for only ignoring case when doing completion.
+ 
                                        *'filetype'* *'ft'*
  'filetype' 'ft'               string (default: "")
                        local to buffer
***************
*** 7832,7843 ****
        uses another default.
  
  
!                       *'wildignorecase* *'wic'* *'nowildignorecase* *'nowic'*
  'wildignorecase' 'wic'        boolean (default off)
                        global
                        {not in Vi}
        When set case is ignored when completing file names and directories.
!       Has no effect on systems where file name case is generally ignored.
        Does not apply when the shell is used to expand wildcards, which
        happens when there are special characters.
  
--- 7906,7917 ----
        uses another default.
  
  
!                       *'wildignorecase'* *'wic'* *'nowildignorecase'* 
*'nowic'*
  'wildignorecase' 'wic'        boolean (default off)
                        global
                        {not in Vi}
        When set case is ignored when completing file names and directories.
!       Has no effect when 'fileignorecase' is set.
        Does not apply when the shell is used to expand wildcards, which
        happens when there are special characters.
  
*** ../vim-7.3.871/src/version.c        2013-03-19 15:27:43.000000000 +0100
--- src/version.c       2013-03-19 16:22:46.000000000 +0100
***************
*** 730,731 ****
--- 730,733 ----
  {   /* Add new patch number below this line */
+ /**/
+     872,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
76. Your ISP regards you as a business partner rather than as a customer.

 /// 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/groups/opt_out.


Raspunde prin e-mail lui