Patch 8.0.0086
Problem:    Cannot add a comment after ":hide". (Norio Takagi)
Solution:   Make it work, add a test. (Hirohito Higashi)
Files:      src/Makefile, src/ex_cmds.h, src/ex_docmd.c,
            src/testdir/Make_all.mak, src/testdir/test_hide.vim


*** ../vim-8.0.0085/src/Makefile        2016-11-12 21:12:48.534182259 +0100
--- src/Makefile        2016-11-15 20:38:20.349739241 +0100
***************
*** 2097,2102 ****
--- 2097,2103 ----
        test_gui \
        test_hardcopy \
        test_help_tagjump \
+       test_hide \
        test_history \
        test_hlsearch \
        test_increment \
*** ../vim-8.0.0085/src/ex_cmds.h       2016-11-12 19:16:42.212999914 +0100
--- src/ex_cmds.h       2016-11-15 20:38:20.349739241 +0100
***************
*** 623,629 ****
                        BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN,
                        ADDR_LINES),
  EX(CMD_hide,          "hide",         ex_hide,
!                       BANG|RANGE|NOTADR|COUNT|EXTRA|NOTRLCOM,
                        ADDR_WINDOWS),
  EX(CMD_history,               "history",      ex_history,
                        EXTRA|TRLBAR|CMDWIN,
--- 623,629 ----
                        BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN,
                        ADDR_LINES),
  EX(CMD_hide,          "hide",         ex_hide,
!                       BANG|RANGE|NOTADR|COUNT|EXTRA|TRLBAR,
                        ADDR_WINDOWS),
  EX(CMD_history,               "history",      ex_history,
                        EXTRA|TRLBAR|CMDWIN,
*** ../vim-8.0.0085/src/ex_docmd.c      2016-11-12 19:16:42.216999886 +0100
--- src/ex_docmd.c      2016-11-15 20:38:20.353739214 +0100
***************
*** 5632,5646 ****
  #endif
  
  /*
!  * Check if *p is a separator between Ex commands.
!  * Return NULL if it isn't, (p + 1) if it is.
   */
      char_u *
  check_nextcmd(char_u *p)
  {
!     p = skipwhite(p);
!     if (*p == '|' || *p == '\n')
!       return (p + 1);
      else
        return NULL;
  }
--- 5632,5647 ----
  #endif
  
  /*
!  * Check if *p is a separator between Ex commands, skipping over white space.
!  * Return NULL if it isn't, the following character if it is.
   */
      char_u *
  check_nextcmd(char_u *p)
  {
!     char_u *s = skipwhite(p);
! 
!     if (*s == '|' || *s == '\n')
!       return (s + 1);
      else
        return NULL;
  }
***************
*** 7572,7609 ****
      static void
  ex_hide(exarg_T *eap)
  {
!     if (*eap->arg != NUL && check_nextcmd(eap->arg) == NULL)
!       eap->errmsg = e_invarg;
!     else
!     {
!       /* ":hide" or ":hide | cmd": hide current window */
!       eap->nextcmd = check_nextcmd(eap->arg);
  #ifdef FEAT_WINDOWS
!       if (!eap->skip)
!       {
  # ifdef FEAT_GUI
!           need_mouse_correct = TRUE;
  # endif
!           if (eap->addr_count == 0)
!               win_close(curwin, FALSE);       /* don't free buffer */
!           else
!           {
!               int     winnr = 0;
!               win_T   *win;
  
!               FOR_ALL_WINDOWS(win)
!               {
!                   winnr++;
!                   if (winnr == eap->line2)
!                       break;
!               }
!               if (win == NULL)
!                   win = lastwin;
!               win_close(win, FALSE);
            }
        }
- #endif
      }
  }
  
  /*
--- 7573,7604 ----
      static void
  ex_hide(exarg_T *eap)
  {
!     /* ":hide" or ":hide | cmd": hide current window */
  #ifdef FEAT_WINDOWS
!     if (!eap->skip)
!     {
  # ifdef FEAT_GUI
!       need_mouse_correct = TRUE;
  # endif
!       if (eap->addr_count == 0)
!           win_close(curwin, FALSE);   /* don't free buffer */
!       else
!       {
!           int winnr = 0;
!           win_T       *win;
  
!           FOR_ALL_WINDOWS(win)
!           {
!               winnr++;
!               if (winnr == eap->line2)
!                   break;
            }
+           if (win == NULL)
+               win = lastwin;
+           win_close(win, FALSE);
        }
      }
+ #endif
  }
  
  /*
*** ../vim-8.0.0085/src/testdir/Make_all.mak    2016-10-15 17:06:42.094912699 
+0200
--- src/testdir/Make_all.mak    2016-11-15 20:38:20.357739188 +0100
***************
*** 156,161 ****
--- 156,162 ----
            test_gn.res \
            test_gui.res \
            test_hardcopy.res \
+           test_hide.res \
            test_history.res \
            test_hlsearch.res \
            test_increment.res \
*** ../vim-8.0.0085/src/testdir/test_hide.vim   2016-11-15 21:16:01.358754552 
+0100
--- src/testdir/test_hide.vim   2016-11-15 20:38:20.357739188 +0100
***************
*** 0 ****
--- 1,97 ----
+ " Tests for :hide command/modifier and 'hidden' option
+ 
+ function SetUp()
+   let s:save_hidden = &hidden
+   let s:save_bufhidden = &bufhidden
+   let s:save_autowrite = &autowrite
+   set nohidden
+   set bufhidden=
+   set noautowrite
+ endfunc
+ 
+ function TearDown()
+   let &hidden = s:save_hidden
+   let &bufhidden = s:save_bufhidden
+   let &autowrite = s:save_autowrite
+ endfunc
+ 
+ function Test_hide()
+   let orig_bname = bufname('')
+   let orig_winnr = winnr('$')
+ 
+   new Xf1
+   set modified
+   call assert_fails('edit Xf2')
+   bwipeout! Xf1
+ 
+   new Xf1
+   set modified
+   edit! Xf2
+   call assert_equal(['Xf2', 2], [bufname(''), winnr('$')])
+   call assert_equal([1, 0], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+   bwipeout! Xf2
+ 
+   new Xf1
+   set modified
+   " :hide as a command
+   hide
+   call assert_equal([orig_bname, orig_winnr], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+ 
+   new Xf1
+   set modified
+   " :hide as a command with trailing comment
+   hide " comment
+   call assert_equal([orig_bname, orig_winnr], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+ 
+   new Xf1
+   set modified
+   " :hide as a command with bar
+   hide | new Xf2 " comment
+   call assert_equal(['Xf2', 2], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+   bwipeout! Xf2
+ 
+   new Xf1
+   set modified
+   " :hide as a modifier with trailing comment
+   hide edit Xf2 " comment
+   call assert_equal(['Xf2', 2], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+   bwipeout! Xf2
+ 
+   new Xf1
+   set modified
+   " To check that the bar is not recognized to separate commands
+   hide echo "one|two"
+   call assert_equal(['Xf1', 2], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+ 
+   " set hidden
+   new Xf1
+   set hidden
+   set modified
+   edit Xf2 " comment
+   call assert_equal(['Xf2', 2], [bufname(''), winnr('$')])
+   call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf1
+   bwipeout! Xf2
+ 
+   " set hidden bufhidden=wipe
+   new Xf1
+   set bufhidden=wipe
+   set modified
+   hide edit! Xf2 " comment
+   call assert_equal(['Xf2', 2], [bufname(''), winnr('$')])
+   call assert_equal([0, 0], [buflisted('Xf1'), bufloaded('Xf1')])
+   bwipeout! Xf2
+ endfunc
+ 
+ " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.0.0085/src/version.c       2016-11-14 21:49:57.080090226 +0100
--- src/version.c       2016-11-15 20:39:04.805438063 +0100
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     86,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
10. Ask people what sex they are. Laugh hysterically after they answer.

 /// 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