mirror of
https://github.com/neovim/neovim.git
synced 2026-01-03 09:56:25 +10:00
Fixes issue on mac where it was constantly reloading buffers as paths were not being normalized and resolved correctly (in relation to buffer name). Quickfix entry: /var/folders/pt/2s7dzyw12v36tsslrghfgpkr0000gn/T/git-difftool.m95lj8/right/app.vue Buffer name: /private/var/folders/pt/2s7dzyw12v36tsslrghfgpkr0000gn/T/git-difftool.m95lj8/right/app.vue /var was synlinked to /private/var and this was not being properly handled. Also added lazy redraw to avoid too many redraws when this happens in future and added test for symlink handling. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
45 lines
1.1 KiB
Lua
45 lines
1.1 KiB
Lua
local M = {}
|
|
|
|
--- Edit a file in a specific window
|
|
--- @param winnr number
|
|
--- @param file string
|
|
--- @return number buffer number of the edited buffer
|
|
M.edit_in = function(winnr, file)
|
|
local function resolved_path(path)
|
|
if not path or path == '' then
|
|
return ''
|
|
end
|
|
return vim.fn.resolve(vim.fs.abspath(path))
|
|
end
|
|
|
|
return vim.api.nvim_win_call(winnr, function()
|
|
local current_buf = vim.api.nvim_win_get_buf(winnr)
|
|
local current = resolved_path(vim.api.nvim_buf_get_name(current_buf))
|
|
|
|
-- Check if the current buffer is already the target file
|
|
if current == resolved_path(file) then
|
|
return current_buf
|
|
end
|
|
|
|
-- Read the file into the buffer
|
|
vim.cmd.edit(vim.fn.fnameescape(file))
|
|
return vim.api.nvim_get_current_buf()
|
|
end)
|
|
end
|
|
|
|
--- Read a chunk of data from a file
|
|
--- @param file string
|
|
--- @param size number
|
|
--- @return string? chunk or nil on error
|
|
function M.read_chunk(file, size)
|
|
local fd = io.open(file, 'rb')
|
|
if not fd then
|
|
return nil
|
|
end
|
|
local chunk = fd:read(size)
|
|
fd:close()
|
|
return tostring(chunk)
|
|
end
|
|
|
|
return M
|