Christian Brabandt wrote:

> On Mi, 28 Jun 2017, Ingo Karkat wrote:
> 
> > I have an `:autocmd` that adapts the height of the quickfix window if
> > there are fewer entries in it than the window height (to save screen
> > space).  It boils down to this:
> > 
> >     :autocmd BufRead quickfix resize [N]
> > 
> > Since Vim 8.0.0677 (_setting 'filetype' may switch buffers_; found
> > through bisecting), this fails with `E788: Not allowed to edit another
> > buffer now`.
> > 
> > The patch locks the current buffer.  However, I don't see why resizing
> > the current window should be affected by the lock.
> > 
> > I tried following the call chain of `:resize`, but couldn't locate
> > where this encounters the check of `curbuf_lock`.  All I can offer is
> > the following test (based on `Test_cclose_from_copen()`) that
> > highlights the regression.  It also uses `:autocmd FileType qf`
> > instead of `:autocmd BufRead quickfix`; both show the issue.
> 
> Hm, here:
> 
> ,----[ quickfix.c ]-
> |   3428 #ifdef FEAT_AUTOCMD
> |   3429         ++curbuf_lock;
> |   3430 #endif
> |   3431         set_option_value((char_u *)"ft", 0L, (char_u *)"qf", 
> OPT_LOCAL);
> |   3432         curbuf->b_p_ma = FALSE;
> |   3433
> |   3434 #ifdef FEAT_AUTOCMD
> |   3435         keep_filetype = TRUE;           /* don't detect 'filetype' */
> `----
> 
> we are setting curbuf_lock. set_option_value() triggers the FileType 
> autocommand, and will finally call do_one_cmd() to execute the :resize 
> command. However in do_one_cmd() we do check curbuf_lock before 
> continuing:
> 
> ,----[ ex_docmd.c ]-
> |    2463 #ifdef FEAT_AUTOCMD
> |    2464         /* Disallow editing another buffer when "curbuf_lock" is 
> set.
> |    2465          * Do allow ":edit" (check for argument later).
> |    2466          * Do allow ":checktime" (it's postponed). */
> |    2467         if (!(ea.argt & CMDWIN)
> |    2468                 && ea.cmdidx != CMD_edit
> |    2469                 && ea.cmdidx != CMD_checktime
> |    2470                 && !IS_USER_CMDIDX(ea.cmdidx)
> |    2471                 && curbuf_locked())
> |    2472             goto doend;
> |    2473 #endif
> `----
> 
> However it is not clear to me, why there is the check to curbuf_locked() 
> there, because as you say, there is no indication that we are going to 
> move to another buffer. Perhaps that should be changed to this 
> condition:
> 
> diff --git a/src/ex_docmd.c b/src/ex_docmd.c
> index bdd152dfd..a7946d872 100644
> --- a/src/ex_docmd.c
> +++ b/src/ex_docmd.c
> @@ -2468,7 +2468,7 @@ do_one_cmd(
>                 && ea.cmdidx != CMD_edit
>                 && ea.cmdidx != CMD_checktime
>                 && !IS_USER_CMDIDX(ea.cmdidx)
> -               && curbuf_locked())
> +               && (ea.addr_type && curbuf_locked()))
>             goto doend;
>  #endif
> 
> 
> (Well, this seems to fix your case, while still preventing e.g. 
> au Filetype qf wincmd p)

What does ea.addr_type has to do with editing another buffer?

I think the problem is that the resize command is missing the CMDWIN
flag.  Don't see a reason why it is missing.

-- 
>From "know your smileys":
 <>:-)  Bishop

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui