Fix theme switcher reload | Move reload_theme to utils (#252)
* rearrange functions in utils.lua alphabetically
This commit is contained in:
		
							parent
							
								
									e80a6935d6
								
							
						
					
					
						commit
						c656d6a3bd
					
				| @ -1,52 +1,6 @@ | ||||
| -- This file can be loaded as a telescope extension | ||||
| local M = {} | ||||
| 
 | ||||
| -- reload themes without restarting vim | ||||
| -- if no theme name given then reload the current theme | ||||
| M.reload_theme = function(theme_name) | ||||
|     local reload_plugin = require("utils").reload_plugin | ||||
| 
 | ||||
|     -- if theme name is empty or nil, then reload the current theme | ||||
|     if (theme_name == nil or theme_name == "") then | ||||
|         theme_name = vim.g.nvchad_theme | ||||
|     end | ||||
| 
 | ||||
|     if not pcall(require, "themes/" .. theme_name) then | ||||
|         print("No such theme ( " .. theme_name .. " )") | ||||
|         return false | ||||
|     end | ||||
| 
 | ||||
|     vim.g.nvchad_theme = theme_name | ||||
| 
 | ||||
|     -- reload the base16 theme | ||||
|     local ok, base16 = pcall(require, "base16") | ||||
|     if not ok then | ||||
|         print("Error: Cannot load base16 plugin!") | ||||
|         return false | ||||
|     end | ||||
|     base16(base16.themes(theme_name), true) | ||||
| 
 | ||||
|     if | ||||
|         not reload_plugin { | ||||
|             "highlights", | ||||
|             "plugins.bufferline", | ||||
|             "galaxyline", | ||||
|             "plugins.statusline" | ||||
|         } | ||||
|      then | ||||
|         print "Error: Not able to reload all plugins." | ||||
|         return false | ||||
|     end | ||||
| 
 | ||||
|     -- now send the provider info to actual refresh | ||||
|     require("galaxyline.provider").async_load_providers:send() | ||||
| 
 | ||||
|     return true | ||||
|     -- open a buffer and close it to reload the statusline | ||||
|     -- vim.cmd("new|bwipeout") | ||||
|     -- commented out here as it will not work with telescope picker | ||||
| end | ||||
| 
 | ||||
| -- Custom theme picker | ||||
| -- Most of the code is copied from telescope colorscheme plugin, mostly for preview creation | ||||
| M.theme_switcher = function(opts) | ||||
| @ -65,7 +19,7 @@ M.theme_switcher = function(opts) | ||||
|     end | ||||
| 
 | ||||
|     local local_utils = require "utils" | ||||
|     local reload_theme = M.reload_theme | ||||
|     local reload_theme = local_utils.reload_theme | ||||
| 
 | ||||
|     -- get a table of available themes | ||||
|     local themes = local_utils.list_themes() | ||||
|  | ||||
							
								
								
									
										227
									
								
								lua/utils.lua
									
									
									
									
									
								
							
							
						
						
									
										227
									
								
								lua/utils.lua
									
									
									
									
									
								
							| @ -1,79 +1,5 @@ | ||||
| local M = {} | ||||
| 
 | ||||
| -- reload a plugin ( will try to load even if not loaded) | ||||
| -- can take a string or list ( table ) | ||||
| -- return true or false | ||||
| M.reload_plugin = function(plugins) | ||||
|     local status = true | ||||
|     local function _reload_plugin(plugin) | ||||
|         local loaded = package.loaded[plugin] | ||||
|         if loaded then | ||||
|             package.loaded[plugin] = nil | ||||
|         end | ||||
|         if not pcall(require, plugin) then | ||||
|             print("Error: Cannot load " .. plugin .. " plugin!") | ||||
|             status = false | ||||
|         end | ||||
|     end | ||||
| 
 | ||||
|     if type(plugins) == "string" then | ||||
|         _reload_plugin(plugins) | ||||
|     elseif type(plugins) == "table" then | ||||
|         for _, plugin in ipairs(plugins) do | ||||
|             _reload_plugin(plugin) | ||||
|         end | ||||
|     end | ||||
|     return status | ||||
| end | ||||
| 
 | ||||
| -- return a table of available themes | ||||
| M.list_themes = function(return_type) | ||||
|     local themes = {} | ||||
|     -- folder where theme files are stored | ||||
|     local themes_folder = vim.fn.stdpath("config") .. "/lua/themes" | ||||
|     -- list all the contents of the folder and filter out files with .lua extension, then append to themes table | ||||
|     local fd = vim.loop.fs_scandir(themes_folder) | ||||
|     if fd then | ||||
|         while true do | ||||
|             local name, typ = vim.loop.fs_scandir_next(fd) | ||||
|             if name == nil then | ||||
|                 break | ||||
|             end | ||||
|             if typ ~= "directory" and string.find(name, ".lua") then | ||||
|                 -- return the table values as keys if specified | ||||
|                 if return_type == "keys_as_value" then | ||||
|                     themes[vim.fn.fnamemodify(name, ":r")] = true | ||||
|                 else | ||||
|                     table.insert(themes, vim.fn.fnamemodify(name, ":r")) | ||||
|                 end | ||||
|             end | ||||
|         end | ||||
|     end | ||||
|     return themes | ||||
| end | ||||
| 
 | ||||
| -- 1st arg - r or w | ||||
| -- 2nd arg - file path | ||||
| -- 3rd arg - content if 1st arg is w | ||||
| -- return file data on read, nothing on write | ||||
| M.file = function(mode, filepath, content) | ||||
|     local data | ||||
|     local fd = assert(vim.loop.fs_open(filepath, mode, 438)) | ||||
|     local stat = assert(vim.loop.fs_fstat(fd)) | ||||
|     if stat.type ~= "file" then | ||||
|         data = false | ||||
|     else | ||||
|         if mode == "r" then | ||||
|             data = assert(vim.loop.fs_read(fd, stat.size, 0)) | ||||
|         else | ||||
|             assert(vim.loop.fs_write(fd, content, 0)) | ||||
|             data = true | ||||
|         end | ||||
|     end | ||||
|     assert(vim.loop.fs_close(fd)) | ||||
|     return data | ||||
| end | ||||
| 
 | ||||
| -- 1st arg as current theme, 2nd as new theme | ||||
| M.change_theme = function(current_theme, new_theme) | ||||
|     if current_theme == nil or new_theme == nil then | ||||
| @ -108,4 +34,157 @@ M.clear_cmdline = function() | ||||
|     ) | ||||
| end | ||||
| 
 | ||||
| -- 1st arg - r or w | ||||
| -- 2nd arg - file path | ||||
| -- 3rd arg - content if 1st arg is w | ||||
| -- return file data on read, nothing on write | ||||
| M.file = function(mode, filepath, content) | ||||
|     local data | ||||
|     local fd = assert(vim.loop.fs_open(filepath, mode, 438)) | ||||
|     local stat = assert(vim.loop.fs_fstat(fd)) | ||||
|     if stat.type ~= "file" then | ||||
|         data = false | ||||
|     else | ||||
|         if mode == "r" then | ||||
|             data = assert(vim.loop.fs_read(fd, stat.size, 0)) | ||||
|         else | ||||
|             assert(vim.loop.fs_write(fd, content, 0)) | ||||
|             data = true | ||||
|         end | ||||
|     end | ||||
|     assert(vim.loop.fs_close(fd)) | ||||
|     return data | ||||
| end | ||||
| 
 | ||||
| -- return a table of available themes | ||||
| M.list_themes = function(return_type) | ||||
|     local themes = {} | ||||
|     -- folder where theme files are stored | ||||
|     local themes_folder = vim.fn.stdpath("config") .. "/lua/themes" | ||||
|     -- list all the contents of the folder and filter out files with .lua extension, then append to themes table | ||||
|     local fd = vim.loop.fs_scandir(themes_folder) | ||||
|     if fd then | ||||
|         while true do | ||||
|             local name, typ = vim.loop.fs_scandir_next(fd) | ||||
|             if name == nil then | ||||
|                 break | ||||
|             end | ||||
|             if typ ~= "directory" and string.find(name, ".lua") then | ||||
|                 -- return the table values as keys if specified | ||||
|                 if return_type == "keys_as_value" then | ||||
|                     themes[vim.fn.fnamemodify(name, ":r")] = true | ||||
|                 else | ||||
|                     table.insert(themes, vim.fn.fnamemodify(name, ":r")) | ||||
|                 end | ||||
|             end | ||||
|         end | ||||
|     end | ||||
|     return themes | ||||
| end | ||||
| 
 | ||||
| -- reload a plugin ( will try to load even if not loaded) | ||||
| -- can take a string or list ( table ) | ||||
| -- return true or false | ||||
| M.reload_plugin = function(plugins) | ||||
|     local status = true | ||||
|     local function _reload_plugin(plugin) | ||||
|         local loaded = package.loaded[plugin] | ||||
|         if loaded then | ||||
|             package.loaded[plugin] = nil | ||||
|         end | ||||
|         if not pcall(require, plugin) then | ||||
|             print("Error: Cannot load " .. plugin .. " plugin!") | ||||
|             status = false | ||||
|         end | ||||
|     end | ||||
| 
 | ||||
|     if type(plugins) == "string" then | ||||
|         _reload_plugin(plugins) | ||||
|     elseif type(plugins) == "table" then | ||||
|         for _, plugin in ipairs(plugins) do | ||||
|             _reload_plugin(plugin) | ||||
|         end | ||||
|     end | ||||
|     return status | ||||
| end | ||||
| 
 | ||||
| -- reload themes without restarting vim | ||||
| -- if no theme name given then reload the current theme | ||||
| M.reload_theme = function(theme_name) | ||||
|     local reload_plugin = require("utils").reload_plugin | ||||
| 
 | ||||
|     -- if theme name is empty or nil, then reload the current theme | ||||
|     if (theme_name == nil or theme_name == "") then | ||||
|         theme_name = vim.g.nvchad_theme | ||||
|     end | ||||
| 
 | ||||
|     if not pcall(require, "themes/" .. theme_name) then | ||||
|         print("No such theme ( " .. theme_name .. " )") | ||||
|         return false | ||||
|     end | ||||
| 
 | ||||
|     vim.g.nvchad_theme = theme_name | ||||
| 
 | ||||
|     -- reload the base16 theme | ||||
|     local ok, base16 = pcall(require, "base16") | ||||
|     if not ok then | ||||
|         print("Error: Cannot load base16 plugin!") | ||||
|         return false | ||||
|     end | ||||
|     base16(base16.themes(theme_name), true) | ||||
| 
 | ||||
|     if | ||||
|         not reload_plugin { | ||||
|             "highlights", | ||||
|             "plugins.bufferline", | ||||
|             "galaxyline", | ||||
|             "plugins.statusline" | ||||
|         } | ||||
|      then | ||||
|         print "Error: Not able to reload all plugins." | ||||
|         return false | ||||
|     end | ||||
| 
 | ||||
|     -- yes, this is very hacky, but due to new_async in | ||||
|     -- https://github.com/glepnir/galaxyline.nvim/blob/main/lua/galaxyline/provider.lua#L5-L36 | ||||
|     -- it doesn't work properly and some statusline stuff dissapears | ||||
|     local vcs = require("galaxyline.provider_vcs") | ||||
|     local fileinfo = require("galaxyline.provider_fileinfo") | ||||
|     local buffer = require("galaxyline.provider_buffer") | ||||
|     local extension = require("galaxyline.provider_extensions") | ||||
|     local whitespace = require("galaxyline.provider_whitespace") | ||||
|     local lspclient = require("galaxyline.provider_lsp") | ||||
|     _G.galaxyline_providers = { | ||||
|         BufferIcon = buffer.get_buffer_type_icon, | ||||
|         BufferNumber = buffer.get_buffer_number, | ||||
|         FileTypeName = buffer.get_buffer_filetype, | ||||
|         GitBranch = vcs.get_git_branch, | ||||
|         DiffAdd = vcs.diff_add, | ||||
|         DiffModified = vcs.diff_modified, | ||||
|         DiffRemove = vcs.diff_remove, | ||||
|         LineColumn = fileinfo.line_column, | ||||
|         FileFormat = fileinfo.get_file_format, | ||||
|         FileEncode = fileinfo.get_file_encode, | ||||
|         FileSize = fileinfo.get_file_size, | ||||
|         FileIcon = fileinfo.get_file_icon, | ||||
|         FileName = fileinfo.get_current_file_name, | ||||
|         SFileName = fileinfo.filename_in_special_buffer, | ||||
|         LinePercent = fileinfo.current_line_percent, | ||||
|         ScrollBar = extension.scrollbar_instance, | ||||
|         VistaPlugin = extension.vista_nearest, | ||||
|         WhiteSpace = whitespace.get_item, | ||||
|         GetLspClient = lspclient.get_lsp_client | ||||
|     } | ||||
|     local diagnostic = require("galaxyline.provider_diagnostic") | ||||
|     _G.galaxyline_providers.DiagnosticError = diagnostic.get_diagnostic_error | ||||
|     _G.galaxyline_providers.DiagnosticWarn = diagnostic.get_diagnostic_warn | ||||
|     _G.galaxyline_providers.DiagnosticHint = diagnostic.get_diagnostic_hint | ||||
|     _G.galaxyline_providers.DiagnosticInfo = diagnostic.get_diagnostic_info | ||||
| 
 | ||||
|     return true | ||||
|     -- open a buffer and close it to reload the statusline | ||||
|     -- vim.cmd("new|bwipeout") | ||||
|     -- commented out here as it will not work with telescope picker | ||||
| end | ||||
| 
 | ||||
| return M | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user