Hi Bram and list,

How to reproduce:
- Start vanilla Vim with two buffers.
  $ vim -Nu NONE -o a b
- buffer 'a' to modified.
  :set modofied
- exec :hide command with trail comment
  :hide " command

Expected behavior:
- :hide command succeed.

Actual behavior:
- Occurred 'E474: Invalid argument'


I wrote a patch.  Of course contains a test.
Check it please.
--
Best regards,
Hirohito Higashi (a.k.a. h_east)

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/Makefile b/src/Makefile
index fef53af..eb67126 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2097,6 +2097,7 @@ test_arglist \
 	test_gui \
 	test_hardcopy \
 	test_help_tagjump \
+	test_hide \
 	test_history \
 	test_hlsearch \
 	test_increment \
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 01126ba..d8fc506 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -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,
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 6b4e5fb..9fc4001 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -7572,38 +7572,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
 }
 
 /*
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index a8ea543..1c0c715 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -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
index 0000000..f08bde7
--- /dev/null
+++ b/src/testdir/test_hide.vim
@@ -0,0 +1,89 @@
+" 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
+
+  " 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

Raspunde prin e-mail lui