snacks.nvim/docs/rename.md
roycrippen4 fb35aea5a5
docs(rename): add nvim-tree example (#27)
## Description

Adds an example to `rename.md` for nvim-tree. 

I spent way too long obsessing over the way the code looked to make it
feel like the other examples.

## Related Issue(s)

N/A

## Screenshots


![2024-11-07-201109_hyprshot](https://github.com/user-attachments/assets/fb3b141d-c8d8-4951-8f97-3242cf7ddb30)

Co-authored-by: roy.crippen4 <roy.crippen4@archarithms.com>
2024-11-08 09:15:48 +01:00

1.9 KiB

🍿 rename

LSP-integrated file renaming with support for plugins like neo-tree.nvim and mini.files.

🚀 Usage

mini.files

vim.api.nvim_create_autocmd("User", {
  pattern = "MiniFilesActionRename",
  callback = function(event)
    Snacks.rename.on_rename_file(event.data.from, event.data.to)
  end,
})

neo-tree.nvim

{
  "nvim-neo-tree/neo-tree.nvim",
  opts = function(_, opts)
    local function on_move(data)
      Snacks.rename.on_rename_file(data.source, data.destination)
    end
    local events = require("neo-tree.events")
    opts.event_handlers = opts.event_handlers or {}
    vim.list_extend(opts.event_handlers, {
      { event = events.FILE_MOVED, handler = on_move },
      { event = events.FILE_RENAMED, handler = on_move },
    })
  end,
}

nvim-tree

local prev = { new_name = "", old_name = "" } -- Prevents duplicate events
vim.api.nvim_create_autocmd("User", {
  pattern = "NvimTreeSetup",
  callback = function()
    local events = require("nvim-tree.api").events
    events.subscribe(events.Event.NodeRenamed, function(data)
      if prev.new_name ~= data.new_name or prev.old_name ~= data.old_name then
        data = data
        Snacks.rename.on_rename_file(data.old_name, data.new_name)
      end
    end)
  end,
})

📦 Module

Snacks.rename.on_rename_file()

Lets LSP clients know that a file has been renamed

---@param from string
---@param to string
---@param rename? fun()
Snacks.rename.on_rename_file(from, to, rename)

Snacks.rename.rename_file()

Prompt for the new filename, do the rename, and trigger LSP handlers

Snacks.rename.rename_file()