patch 9.1.1599: :bnext doesn't go to unlisted help buffers
Problem: :bnext doesn't go to unlisted help buffers when cycling
through help buffers (after 9.1.0557).
Solution: Don't check if a help buffer is listed (zeertzjq).
From <https://github.com/vim/vim/issues/4478#issuecomment-498831057>:
> I think we should fix that, since once you get to a non-help buffer
> all unlisted buffers are skipped, thus you won't encounter another
> help buffer.
This implies that cycling through help buffers should work even if help
buffers are unlisted. Otherwise this part of :bnext isn't really useful,
as :h makes help buffers unlisted by default.
related: #4478
related: #15198
closes: #17913
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
9c4de84b2d
commit
9662f33480
20
src/buffer.c
20
src/buffer.c
@ -1371,8 +1371,11 @@ do_buffer_ext(
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int help_only = (flags & DOBUF_SKIPHELP) != 0 && buf->b_help;
|
||||||
|
|
||||||
bp = NULL;
|
bp = NULL;
|
||||||
while (count > 0 || (!unload && !buf->b_p_bl && bp != buf))
|
while (count > 0 || (bp != buf && !unload
|
||||||
|
&& !(help_only ? buf->b_help : buf->b_p_bl)))
|
||||||
{
|
{
|
||||||
// remember the buffer where we start, we come back there when all
|
// remember the buffer where we start, we come back there when all
|
||||||
// buffers are unlisted.
|
// buffers are unlisted.
|
||||||
@ -1390,14 +1393,17 @@ do_buffer_ext(
|
|||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
buf = lastbuf;
|
buf = lastbuf;
|
||||||
}
|
}
|
||||||
|
// Avoid non-help buffers if the starting point was a help buffer
|
||||||
|
// and vice-versa.
|
||||||
// Don't count unlisted buffers.
|
// Don't count unlisted buffers.
|
||||||
// Avoid non-help buffers if the starting point was a non-help buffer and
|
if (unload
|
||||||
// vice-versa.
|
|| (help_only
|
||||||
if (unload || (buf->b_p_bl
|
? buf->b_help
|
||||||
&& ((flags & DOBUF_SKIPHELP) == 0 || buf->b_help == bp->b_help)))
|
: (buf->b_p_bl && ((flags & DOBUF_SKIPHELP) == 0
|
||||||
|
|| !buf->b_help))))
|
||||||
{
|
{
|
||||||
--count;
|
--count;
|
||||||
bp = NULL; // use this buffer as new starting point
|
bp = NULL; // use this buffer as new starting point
|
||||||
}
|
}
|
||||||
if (bp == buf)
|
if (bp == buf)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -167,6 +167,17 @@ func Test_bnext_bprev_help()
|
|||||||
b XHelp1
|
b XHelp1
|
||||||
blast | call assert_equal(b4, bufnr())
|
blast | call assert_equal(b4, bufnr())
|
||||||
|
|
||||||
|
" Cycling through help buffers works even if they aren't listed.
|
||||||
|
b XHelp1
|
||||||
|
setlocal nobuflisted
|
||||||
|
bnext | call assert_equal(b3, bufnr())
|
||||||
|
bnext | call assert_equal(b1, bufnr())
|
||||||
|
bprev | call assert_equal(b3, bufnr())
|
||||||
|
setlocal nobuflisted
|
||||||
|
bprev | call assert_equal(b1, bufnr())
|
||||||
|
bprev | call assert_equal(b3, bufnr())
|
||||||
|
bnext | call assert_equal(b1, bufnr())
|
||||||
|
|
||||||
%bwipe!
|
%bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
|||||||
@ -719,6 +719,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1599,
|
||||||
/**/
|
/**/
|
||||||
1598,
|
1598,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user