local M = {} function M.map(mode, lhs, rhs, opts) local options = { noremap = true, silent = true } if opts then options = vim.tbl_extend('force', options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end function M.split(str, sep) local res = {} for w in str:gmatch('([^' .. sep .. ']*)') do if w ~= '' then table.insert(res, w) end end return res end function M.highlight(group, bg, fg, gui) if gui ~= nil and gui ~= '' then vim.api.nvim_command(('hi %s guibg=%s guifg=%s gui=%s'):format(group, bg, fg, gui)) elseif bg == nil then vim.api.nvim_command(('hi %s guifg=%s'):format(group, fg)) else vim.api.nvim_command(('hi %s guibg=%s guifg=%s'):format(group, bg, fg)) end end function M.get_relative_path(file_path) local plenary_path = require('plenary.path') local parsed_path, _ = file_path:gsub('file://', '') local path = plenary_path:new(parsed_path) local relative_path = path:make_relative(vim.fn.getcwd()) return './' .. relative_path end function M.get_active_lsp_client_names() local active_clients = vim.lsp.get_active_clients() local client_names = {} for i, client in pairs(active_clients) do table.insert(client_names, i, client.name) end table.sort(client_names) return client_names end local function reload(module_pattern) for module, _ in pairs(package.loaded) do if module:match(module_pattern) then package.loaded[module] = nil require(module) end end end function M.reload_user_config() reload('cosmic.config') end function M.reload_cosmic() reload('cosmic') end function M.get_install_dir() local config_dir = os.getenv('COSMICNVIM_INSTALL_DIR') if not config_dir then return vim.fn.stdpath('config') end return config_dir end -- update instance of CosmicNvim function M.update() local Job = require('plenary.job') local path = M.get_install_dir() local errors = {} Job :new({ command = 'git', args = { 'pull', '--ff-only' }, cwd = path, on_exit = function() if vim.tbl_isempty(errors) then vim.notify( 'Please restart CosmicNvim and run `:PackerSync`', vim.log.levels.INFO, { title = 'CosmicNvim Updated!', timeout = 30000 } ) else table.insert(errors, 1, 'Something went wrong! Please pull changes manually.') table.insert(errors, 2, '') vim.notify(errors, vim.log.levels.ERROR, { title = 'CosmicNvim Update Failed!', timeout = 30000, }) end end, on_stderr = function(_, err) table.insert(errors, err) end, }) :sync() end return M