]> granicus.if.org Git - vim/commitdiff
patch 8.0.0086 v8.0.0086
authorBram Moolenaar <Bram@vim.org>
Tue, 15 Nov 2016 20:17:07 +0000 (21:17 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 15 Nov 2016 20:17:07 +0000 (21:17 +0100)
Problem:    Cannot add a comment after ":hide". (Norio Takagi)
Solution:   Make it work, add a test. (Hirohito Higashi)

src/Makefile
src/ex_cmds.h
src/ex_docmd.c
src/testdir/Make_all.mak
src/testdir/test_hide.vim [new file with mode: 0644]
src/version.c

index 5c788cc207dfc3d7a753b1bb69f678f2157f154c..c519a3080deec13e7592b1701542814e52c976ea 100644 (file)
@@ -2097,6 +2097,7 @@ test_arglist \
        test_gui \
        test_hardcopy \
        test_help_tagjump \
+       test_hide \
        test_history \
        test_hlsearch \
        test_increment \
index 3f21d94f9e5e6bce30f4580d3728b692fa069d2e..cb2fadcec065fbaa9963034b90546141945f82e2 100644 (file)
@@ -623,7 +623,7 @@ EX(CMD_highlight,   "highlight",    ex_highlight,
                        BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN,
                        ADDR_LINES),
 EX(CMD_hide,           "hide",         ex_hide,
-                       BANG|RANGE|NOTADR|COUNT|EXTRA|NOTRLCOM,
+                       BANG|RANGE|NOTADR|COUNT|EXTRA|TRLBAR,
                        ADDR_WINDOWS),
 EX(CMD_history,                "history",      ex_history,
                        EXTRA|TRLBAR|CMDWIN,
index 34c21e182116c617159f116f2545507b5f04ece8..439467cf112853db4c651bc6e64d79d11fd53622 100644 (file)
@@ -5632,15 +5632,16 @@ find_nextcmd(char_u *p)
 #endif
 
 /*
- * Check if *p is a separator between Ex commands.
- * Return NULL if it isn't, (p + 1) if it is.
+ * 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)
 {
-    p = skipwhite(p);
-    if (*p == '|' || *p == '\n')
-       return (p + 1);
+    char_u *s = skipwhite(p);
+
+    if (*s == '|' || *s == '\n')
+       return (s + 1);
     else
        return NULL;
 }
@@ -7572,38 +7573,32 @@ ex_all(exarg_T *eap)
     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);
+    /* ":hide" or ":hide | cmd": hide current window */
 #ifdef FEAT_WINDOWS
-       if (!eap->skip)
-       {
+    if (!eap->skip)
+    {
 # ifdef FEAT_GUI
-           need_mouse_correct = TRUE;
+       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;
+       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);
+           FOR_ALL_WINDOWS(win)
+           {
+               winnr++;
+               if (winnr == eap->line2)
+                   break;
            }
+           if (win == NULL)
+               win = lastwin;
+           win_close(win, FALSE);
        }
-#endif
     }
+#endif
 }
 
 /*
index a8ea54318ea58efecbdb4c9967917d6b1ab6aedb..1c0c7157e6d159ef4e38f86d02e4e47c5373d594 100644 (file)
@@ -156,6 +156,7 @@ NEW_TESTS = test_arglist.res \
            test_gn.res \
            test_gui.res \
            test_hardcopy.res \
+           test_hide.res \
            test_history.res \
            test_hlsearch.res \
            test_increment.res \
diff --git a/src/testdir/test_hide.vim b/src/testdir/test_hide.vim
new file mode 100644 (file)
index 0000000..128b8ff
--- /dev/null
@@ -0,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
index 8b30bae903a19ed726b140e68e247ca890766f2d..b1bf796dedb62319eb74296da60503a546235362 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    86,
 /**/
     85,
 /**/