Sitelet https://github.com/nvim-tree/nvim-tree.lua/issues/2130
Skip to content

nvim-tree does not BufWinEnter when opening on VimEnter #2130

Description

@Iron-E

Description

I am a maintainer for barbar.nvim, and we have a feature that allows users to adjust the offset of the tabline when a sidebar (such as nvim-tree) is open.

This works well most of the time, however, recently a user reported that this does not work when using the Open At Startup snippets from the wiki. Upon investigation, it appears that this is because nvim-tree does not emit a BufWinEnter event in this case. It is worth noting that when doing :NvimTreeToggle afterward, it does.

Neovim version

NVIM v0.9.0
Build type: Release
LuaJIT 2.1.0-beta3

Operating system and version

6.2.10-arch1-1

nvim-tree version

48d53a5

Minimal config

vim.api.nvim_create_autocmd(
  {'BufWinEnter', 'FileType', 'WinNew', 'WinResized', 'WinScrolled'},
  {callback = function(event) vim.print(event) end}
)

vim.opt.rtp:append(vim.fn.stdpath('data') .. '/lazy/nvim-tree.lua')
require'nvim-tree'.setup {}

-- auto open nvim-tree when open neovim
local function open_nvim_tree(data)
  -- buffer is a real file on the disk
  local real_file = vim.fn.filereadable(data.file) == 1

  -- buffer is a [No Name]
  local no_name = data.file == '' and vim.bo[data.buf].buftype == ''

  -- only files please
  if not real_file and not no_name then
    return
  end

  -- open the tree but dont focus it
  require('nvim-tree.api').tree.toggle({ focus = false })
end

vim.api.nvim_create_autocmd({'VimEnter'}, { callback = open_nvim_tree })

It also happens with tree.open

Steps to reproduce

  1. nvim --clean -u minimal.lua
  2. Observe that a BufWinEnter event is not printed on startup for the NvimTree buffer.

Expected behavior

It follows the event sequence that happens when executing :NvimTreeToggle after startup concludes:

{
  buf = 2,
  event = "FileType",
  file = "NvimTree_1",
  id = 14,
  match = "NvimTree"
}
{
  buf = 1,
  event = "WinNew",
  file = "",
  id = 14,
  match = ""
}
{
  buf = 2,
  event = "BufWinEnter",
  file = "/home/iron-e/NvimTree_1",
  id = 14,
  match = "/home/iron-e/NvimTree_1"
}

You can verify the above by using this snippet:

vim.opt.rtp:append(vim.fn.stdpath('data') .. '/lazy/nvim-tree.lua')
require'nvim-tree'.setup {}

-- start listening to autocmds AFTER vim enter; reduces noise
vim.api.nvim_create_autocmd('VimEnter', {callback = function()
  vim.api.nvim_create_autocmd(
    {'BufWinEnter', 'FileType', 'WinNew', 'WinResized', 'WinScrolled'},
    {callback = function(event) vim.print(event) end}
  )
end})

Then manually typing :NvimTreeToggle.

Actual behavior

{
  buf = 1,
  event = "BufWinEnter",
  file = "",
  id = 3,
  match = ""
}

{
  buf = 2,
  event = "FileType",
  file = "NvimTree_1",
  id = 3,
  match = "NvimTree"
}
-- no ButWinEnter for `buf = 2`

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions