Selaa lähdekoodia

bring back behavior we used to get from astronauta

christianchiarulli 3 vuotta sitten
vanhempi
commit
a6a10e3fdb
2 muutettua tiedostoa jossa 50 lisäystä ja 0 poistoa
  1. 5 0
      lua/core/autocmds.lua
  2. 45 0
      lua/utils/ft.lua

+ 5 - 0
lua/core/autocmds.lua

@@ -2,6 +2,11 @@ local autocommands = {}
 
 lvim.autocommands = {
   _general_settings = {
+    {
+      "Filetype",
+      "*",
+      "lua require('utils.ft').do_filetype(vim.fn.expand(\"<amatch>\"))",
+    },
     {
       "TextYankPost",
       "*",

+ 45 - 0
lua/utils/ft.lua

@@ -0,0 +1,45 @@
+local ft = {}
+
+ft.find_lua_ftplugins = function(filetype)
+  local patterns = {
+    string.format("ftplugin/%s.lua", filetype),
+
+    -- Looks like we don't need this, because the first one works
+    -- string.format("after/ftplugin/%s.lua", filetype),
+  }
+
+  local result = {}
+  for _, pat in ipairs(patterns) do
+    vim.list_extend(result, vim.api.nvim_get_runtime_file(pat, true))
+  end
+
+  return result
+end
+
+ft.do_filetype = function(filetype)
+  local ftplugins = ft.find_lua_ftplugins(filetype)
+
+  local f_env = setmetatable({
+    -- Override print, so the prints still go through, otherwise it's confusing for people
+    print = vim.schedule_wrap(print),
+  }, {
+    -- Buf default back read/write to whatever is going on in the global landscape
+    __index = _G,
+    __newindex = _G,
+  })
+
+  for _, file in ipairs(ftplugins) do
+    local f = loadfile(file)
+    if not f then
+      vim.api.nvim_err_writeln("Unable to load file: " .. file)
+    else
+      local ok, msg = pcall(setfenv(f, f_env))
+
+      if not ok then
+        vim.api.nvim_err_writeln("Error while processing file: " .. file .. "\n" .. msg)
+      end
+    end
+  end
+end
+
+return ft