neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

file_pairs.lua (1981B)


      1 local ft_letter = { html = 't', scss = 's', dart = 'd', css = 'c' }
      2 
      3 local letter_set = {}
      4 
      5 local set_mark = function(letter, path, buffer)
      6   path = path or vim.fn.expand('%')
      7   if buffer == nil then buffer = true end
      8   vim.keymap.set('n', '<leader>m' .. letter, '<cmd>edit ' .. path .. '<cr>', { buffer = buffer })
      9   vim.keymap.set('n', '<leader>mv' .. letter, '<cmd>vsplit ' .. path .. '<cr>', { buffer = buffer })
     10   vim.keymap.set('n', '<leader>mx' .. letter, '<cmd>split ' .. path .. '<cr>', { buffer = buffer })
     11 end
     12 
     13 local unset_marks = function()
     14   local leader = vim.g.mapleader
     15   for _, map in ipairs(vim.api.nvim_buf_get_keymap(0, 'n')) do
     16     for _, letter in pairs(ft_letter) do
     17       if map.lhs == leader .. 'm' .. letter then vim.api.nvim_buf_del_keymap(0, 'n', '<leader>m' .. letter) end
     18       if map.lhs == leader .. 'mv' .. letter then vim.api.nvim_buf_del_keymap(0, 'n', '<leader>mv' .. letter) end
     19       if map.lhs == leader .. 'mx' .. letter then vim.api.nvim_buf_del_keymap(0, 'n', '<leader>mx' .. letter) end
     20     end
     21   end
     22 end
     23 
     24 local configure = function()
     25   -- TODO(tms) 19.11.21:
     26   unset_marks()
     27   local filename = vim.fn.expand('%:t:r')
     28   local dir = vim.fn.expand('%:h')
     29   local files = {}
     30   local on_event = function(_, data, event)
     31     if event == 'stderr' then print(data) end
     32     if event == 'stdout' then
     33       if #data > 1 then
     34         for _, file in ipairs(data) do
     35           local _, _, ext = file:match('(.-)([^\\/]-%.?([^%.\\/]*))$')
     36           files[ext] = file
     37         end
     38       end
     39     end
     40     if event == 'exit' then
     41       for ext, file in pairs(files) do
     42         local letter = ft_letter[ext]
     43         if letter then
     44           set_mark(letter, file, true)
     45           table.insert(letter_set, letter)
     46         end
     47       end
     48       files = {}
     49     end
     50   end
     51 
     52   vim.fn.jobstart(string.format('fd -t f "^%s\\." "%s"', filename, dir), { on_stdout = on_event, on_exit = on_event })
     53 end
     54 
     55 vim.api.nvim_create_autocmd('BufEnter', { callback = configure })