On 15:36 Mon 18 Aug , Bram Moolenaar wrote: > > Marcin Szamotulski wrote: > > > I was wondering for some time why the :buffer command does not allow for > > +cmd argument (:help +cmd), like :edit does. Though this is not > > strictly necessary since one can always do > > :buffer1|cmd > > but the same is true for :edit command; one can do both: > > :edit +cmd file > > :edit file|cmd > > > > I attach a patch as a proof of concept and to let it try. > > I suppose we would make this consistent, also do this for ":sbuf", > ":bnext", etc.
Here is a patch which includes: :buffer :sbuffer :bnext :sbnext :bNext :sbNext :bprevious :sbprevious :bfirst :brewind :sbfirst :sbrewind :blast :sblast :bmodified :sbmodified Best regards, Marcin Szamotulski
diff -r 18fd959b07ef -r bf9ff84941f6 runtime/doc/windows.txt --- a/runtime/doc/windows.txt Wed Aug 13 22:05:54 2014 +0200 +++ b/runtime/doc/windows.txt Mon Aug 18 12:07:52 2014 +0100 @@ -1042,36 +1042,41 @@ a number). Insert a backslash before a space in a buffer name. -:[N]b[uffer][!] [N] *:b* *:bu* *:buf* *:buffer* *E86* +:[N]b[uffer][!] [+cmd] [N] *:b* *:bu* *:buf* *:buffer* *E86* Edit buffer [N] from the buffer list. If [N] is not given, the current buffer remains being edited. See |:buffer-!| for [!]. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]b[uffer][!] {bufname} +:[N]b[uffer][!] [+cmd] {bufname} Edit buffer for {bufname} from the buffer list. See |:buffer-!| for [!]. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]sb[uffer] [N] *:sb* *:sbuffer* +:[N]sb[uffer] [+cmd] [N] *:sb* *:sbuffer* Split window and edit buffer [N] from the buffer list. If [N] is not given, the current buffer is edited. Respects the "useopen" setting of 'switchbuf' when splitting. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. + Also see ||+cmd|. -:[N]sb[uffer] {bufname} +:[N]sb[uffer] [+cmd] {bufname} Split window and edit buffer for {bufname} from the buffer list. This will also edit a buffer that is not in the buffer list, without setting the 'buflisted' flag. Note: If what you want to do is split the buffer, make a copy under another name, you can do it this way: > :w foobar | sp # +< Also see ||+cmd|. -:[N]bn[ext][!] [N] *:bn* *:bnext* *E87* +:[N]bn[ext][!] [+cmd] [N] *:bn* *:bnext* *E87* Go to [N]th next buffer in buffer list. [N] defaults to one. Wraps around the end of the buffer list. See |:buffer-!| for [!]. + Also see ||+cmd|. If you are in a help buffer, this takes you to the next help buffer (if there is one). Similarly, if you are in a normal (non-help) buffer, this takes you to the next normal buffer. @@ -1079,55 +1084,61 @@ the way when you're browsing code/text buffers. The next three commands also work like this. + *:sbn* *:sbnext* -:[N]sbn[ext] [N] +:[N]sbn[ext] [+cmd] [N] Split window and go to [N]th next buffer in buffer list. Wraps around the end of the buffer list. Uses 'switchbuf' + Also see ||+cmd|. -:[N]bN[ext][!] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88* -:[N]bp[revious][!] [N] +:[N]bN[ext][!] [+cmd] [N] *:bN* *:bNext* *:bp* *:bprevious* *E88* +:[N]bp[revious][!] [+cmd] [N] Go to [N]th previous buffer in buffer list. [N] defaults to one. Wraps around the start of the buffer list. See |:buffer-!| for [!] and 'switchbuf'. + Also see ||+cmd|. -:[N]sbN[ext] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious* -:[N]sbp[revious] [N] +:[N]sbN[ext] [+cmd] [N] *:sbN* *:sbNext* *:sbp* *:sbprevious* +:[N]sbp[revious] [+cmd] [N] Split window and go to [N]th previous buffer in buffer list. Wraps around the start of the buffer list. Uses 'switchbuf'. + Also see ||+cmd|. - *:br* *:brewind* -:br[ewind][!] Go to first buffer in buffer list. If the buffer list is +:br[ewind][!] [+cmd] *:br* *:brewind* + Go to first buffer in buffer list. If the buffer list is empty, go to the first unlisted buffer. See |:buffer-!| for [!]. - *:bf* *:bfirst* -:bf[irst] Same as ":brewind". +:bf[irst] [+cmd] *:bf* *:bfirst* + Same as |:brewind|. + Also see |+cmd|. - *:sbr* *:sbrewind* -:sbr[ewind] Split window and go to first buffer in buffer list. If the +:sbr[ewind] [+cmd] *:sbr* *:sbrewind* + Split window and go to first buffer in buffer list. If the buffer list is empty, go to the first unlisted buffer. Respects the 'switchbuf' option. + Also see |+cmd|. - *:sbf* *:sbfirst* -:sbf[irst] Same as ":sbrewind". +:sbf[irst] [+cmd] *:sbf* *:sbfirst* + Same as ":sbrewind". - *:bl* *:blast* -:bl[ast][!] Go to last buffer in buffer list. If the buffer list is +:bl[ast][!] [+cmd] *:bl* *:blast* + Go to last buffer in buffer list. If the buffer list is empty, go to the last unlisted buffer. See |:buffer-!| for [!]. - *:sbl* *:sblast* -:sbl[ast] Split window and go to last buffer in buffer list. If the +:sbl[ast] [+cmd] *:sbl* *:sblast* + Split window and go to last buffer in buffer list. If the buffer list is empty, go to the last unlisted buffer. Respects 'switchbuf' option. -:[N]bm[odified][!] [N] *:bm* *:bmodified* *E84* +:[N]bm[odified][!] [+cmd] [N] *:bm* *:bmodified* *E84* Go to [N]th next modified buffer. Note: this command also finds unlisted buffers. If there is no modified buffer the command fails. -:[N]sbm[odified] [N] *:sbm* *:sbmodified* +:[N]sbm[odified] [+cmd] [N] *:sbm* *:sbmodified* Split window and go to [N]th next modified buffer. Respects 'switchbuf' option. Note: this command also finds buffers not in the buffer list. diff -r 18fd959b07ef -r bf9ff84941f6 src/ex_cmds.h --- a/src/ex_cmds.h Wed Aug 13 22:05:54 2014 +0200 +++ b/src/ex_cmds.h Mon Aug 18 12:07:52 2014 +0100 @@ -132,9 +132,9 @@ EX(CMD_aunmenu, "aunmenu", ex_menu, EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN), EX(CMD_buffer, "buffer", ex_buffer, - BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR), + BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR), EX(CMD_bNext, "bNext", ex_bprevious, - BANG|RANGE|NOTADR|COUNT|TRLBAR), + BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_ball, "ball", ex_buffer_all, RANGE|NOTADR|COUNT|TRLBAR), EX(CMD_badd, "badd", ex_edit, @@ -146,19 +146,19 @@ EX(CMD_belowright, "belowright", ex_wrongmodifier, NEEDARG|EXTRA|NOTRLCOM), EX(CMD_bfirst, "bfirst", ex_brewind, - BANG|RANGE|NOTADR|TRLBAR), + BANG|RANGE|NOTADR|EDITCMD|TRLBAR), EX(CMD_blast, "blast", ex_blast, - BANG|RANGE|NOTADR|TRLBAR), + BANG|RANGE|NOTADR|EDITCMD|TRLBAR), EX(CMD_bmodified, "bmodified", ex_bmodified, - BANG|RANGE|NOTADR|COUNT|TRLBAR), + BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_bnext, "bnext", ex_bnext, - BANG|RANGE|NOTADR|COUNT|TRLBAR), + BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_botright, "botright", ex_wrongmodifier, NEEDARG|EXTRA|NOTRLCOM), EX(CMD_bprevious, "bprevious", ex_bprevious, - BANG|RANGE|NOTADR|COUNT|TRLBAR), + BANG|RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_brewind, "brewind", ex_brewind, - BANG|RANGE|NOTADR|TRLBAR), + BANG|RANGE|NOTADR|EDITCMD|TRLBAR), EX(CMD_break, "break", ex_break, TRLBAR|SBOXOK|CMDWIN), EX(CMD_breakadd, "breakadd", ex_breakadd, @@ -812,23 +812,23 @@ EX(CMD_saveas, "saveas", ex_write, BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR), EX(CMD_sbuffer, "sbuffer", ex_buffer, - BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR), + BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|EDITCMD|TRLBAR), EX(CMD_sbNext, "sbNext", ex_bprevious, - RANGE|NOTADR|COUNT|TRLBAR), + RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_sball, "sball", ex_buffer_all, - RANGE|NOTADR|COUNT|TRLBAR), + RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_sbfirst, "sbfirst", ex_brewind, - TRLBAR), + EDITCMD|TRLBAR), EX(CMD_sblast, "sblast", ex_blast, - TRLBAR), + EDITCMD|TRLBAR), EX(CMD_sbmodified, "sbmodified", ex_bmodified, - RANGE|NOTADR|COUNT|TRLBAR), + RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_sbnext, "sbnext", ex_bnext, - RANGE|NOTADR|COUNT|TRLBAR), + RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_sbprevious, "sbprevious", ex_bprevious, - RANGE|NOTADR|COUNT|TRLBAR), + RANGE|NOTADR|COUNT|EDITCMD|TRLBAR), EX(CMD_sbrewind, "sbrewind", ex_brewind, - TRLBAR), + EDITCMD|TRLBAR), EX(CMD_scriptnames, "scriptnames", ex_scriptnames, TRLBAR|CMDWIN), EX(CMD_scriptencoding, "scriptencoding", ex_scriptencoding, diff -r 18fd959b07ef -r bf9ff84941f6 src/ex_docmd.c --- a/src/ex_docmd.c Wed Aug 13 22:05:54 2014 +0200 +++ b/src/ex_docmd.c Mon Aug 18 12:07:52 2014 +0100 @@ -5115,6 +5115,8 @@ goto_buffer(eap, DOBUF_CURRENT, FORWARD, 0); else goto_buffer(eap, DOBUF_FIRST, FORWARD, (int)eap->line2); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } } @@ -5127,6 +5129,8 @@ exarg_T *eap; { goto_buffer(eap, DOBUF_MOD, FORWARD, (int)eap->line2); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } /* @@ -5138,6 +5142,8 @@ exarg_T *eap; { goto_buffer(eap, DOBUF_CURRENT, FORWARD, (int)eap->line2); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } /* @@ -5151,6 +5157,8 @@ exarg_T *eap; { goto_buffer(eap, DOBUF_CURRENT, BACKWARD, (int)eap->line2); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } /* @@ -5164,6 +5172,8 @@ exarg_T *eap; { goto_buffer(eap, DOBUF_FIRST, FORWARD, 0); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } /* @@ -5175,6 +5185,8 @@ exarg_T *eap; { goto_buffer(eap, DOBUF_LAST, BACKWARD, 0); + if (eap->do_ecmd_cmd != NULL) + do_cmdline_cmd(eap->do_ecmd_cmd); } #endif
signature.asc
Description: Digital signature