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.
