mirror of
https://github.com/neovim/neovim.git
synced 2026-08-20 22:31:11 +00:00
fix(dir): let 3P dir-browser plugin rename the dir buffer #40529
Problem: `FileType directory` fires *before* the `BufEnter` path where `dir.lua` populates the buffer, in order to allow a 3P dir-browser plugin to handle the event and (optionally) rename the buffer to e.g. `example:///tmp/foo/`. But currently, `open_buffer()` continues after `filetypedetect BufRead` as if the original directory buffer is *still* current and valid, which may fall through to the built-in `nvim.dir` path after a 3P plugin ALREADY handled the directory. Solution: Keep a buf ref around the early `filetypedetect BufRead` call for directory buffers. If the `FileType directory` handler switches away from/deletes the original directory buffer, stop the open path instead of continuing into the built-in `nvim.dir` flow.
This commit is contained in:
@@ -413,7 +413,12 @@ int open_buffer(bool read_stdin, exarg_T *eap, int flags_arg)
|
||||
&& after_pathsep(curbuf->b_ffname,
|
||||
curbuf->b_ffname + strlen(curbuf->b_ffname))) {
|
||||
if (augroup_exists("filetypedetect")) {
|
||||
bufref_T bufref;
|
||||
set_bufref(&bufref, curbuf);
|
||||
do_doautocmd("filetypedetect BufRead", false, NULL);
|
||||
if (!bufref_valid(&bufref) || curbuf != old_curbuf.br_buf || aborting()) {
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user