neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

net.lua (1408B)


      1 vim.g.loaded_remote_file_loader = true
      2 
      3 --- Callback for BufReadCmd on remote URLs.
      4 --- @param args { buf: integer }
      5 local function on_remote_read(args)
      6  if vim.fn.executable('curl') ~= 1 then
      7    vim.api.nvim_echo({
      8      { 'Warning: `curl` not found; remote URL loading disabled.', 'WarningMsg' },
      9    }, true, {})
     10    return true
     11  end
     12 
     13  local bufnr = args.buf
     14  local url = vim.api.nvim_buf_get_name(bufnr)
     15  local view = vim.fn.winsaveview()
     16 
     17  vim.api.nvim_echo({ { 'Fetching ' .. url .. ' …', 'MoreMsg' } }, true, {})
     18 
     19  vim.net.request(
     20    url,
     21    { retry = 3 },
     22    vim.schedule_wrap(function(err, content)
     23      if err then
     24        vim.notify('Failed to fetch ' .. url .. ': ' .. tostring(err), vim.log.levels.ERROR)
     25        vim.fn.winrestview(view)
     26        return
     27      end
     28 
     29      local lines = vim.split(content.body, '\n', { plain = true })
     30      vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, lines)
     31      vim.api.nvim_exec_autocmds('BufRead', { group = 'filetypedetect', buffer = bufnr })
     32      vim.bo[bufnr].modified = false
     33 
     34      vim.fn.winrestview(view)
     35      vim.api.nvim_echo({ { 'Loaded ' .. url, 'Normal' } }, true, {})
     36    end)
     37  )
     38 end
     39 
     40 vim.api.nvim_create_autocmd('BufReadCmd', {
     41  group = vim.api.nvim_create_augroup('nvim.net.remotefile', {}),
     42  pattern = { 'http://*', 'https://*' },
     43  desc = 'Edit remote files (:edit https://example.com)',
     44  callback = on_remote_read,
     45 })