Mercurial > vim
changeset 10383:b59df2194b01 v8.0.0086
commit https://github.com/vim/vim/commit/2256c9947164229c0960803e2a2992b793c23298
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Nov 15 21:17:07 2016 +0100
patch 8.0.0086
Problem: Cannot add a comment after ":hide". (Norio Takagi)
Solution: Make it work, add a test. (Hirohito Higashi)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 15 Nov 2016 21:30:04 +0100 |
parents | 61ca29e3f2a4 |
children | 54db4e2b88b3 |
files | src/Makefile src/ex_cmds.h src/ex_docmd.c src/testdir/Make_all.mak src/testdir/test_hide.vim src/version.c |
diffstat | 6 files changed, 131 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- 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 \
--- a/src/ex_cmds.h +++ b/src/ex_cmds.h @@ -623,7 +623,7 @@ EX(CMD_highlight, "highlight", ex_highli 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,
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -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; - - FOR_ALL_WINDOWS(win) - { - winnr++; - if (winnr == eap->line2) - break; - } - if (win == NULL) - win = lastwin; - win_close(win, FALSE); - } - } -#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 } /*
--- 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 \
new file mode 100644 --- /dev/null +++ b/src/testdir/test_hide.vim @@ -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