local helpers = {} --- Creates a keymap to edit a certain config file --- @param map string the keys that follow e --- @param path string the relative path from the config root helpers.edit_cf = function(map, path) vim.keymap.set('n', 'e' .. map, function() vim.cmd('tabedit ' .. vim.fn.stdpath 'config' .. '/' .. path) end, { desc = 'Edit ' .. path .. ' in a new tab' }) end helpers.map = function(keys, func, opts, mode) mode = mode or 'n' vim.keymap.set(mode, keys, func, opts) end helpers.edit_cf('h', '/lua/helpers.lua') ---@param opts? { cmd?: string } helpers.open_term = function(opts) opts = opts or { cmd = '' } local buf = vim.api.nvim_create_buf(false, true) vim.api.nvim_set_option_value('bufhidden', 'wipe', { buf = buf }) vim.api.nvim_set_option_value('modifiable', false, { buf = buf }) local height = math.ceil(vim.o.lines * 0.9) local width = math.ceil(vim.o.columns * 0.9) local win = vim.api.nvim_open_win(buf, true, { style = 'minimal', relative = 'editor', width = width, height = height, row = math.ceil((vim.o.lines - height) / 2), col = math.ceil((vim.o.columns - width) / 2), border = 'single', }) vim.api.nvim_set_current_win(win) vim.fn.jobstart(opts.cmd, { term = true, on_exit = function(_, _, _) if vim.api.nvim_win_is_valid(win) then vim.api.nvim_win_close(win, true) end end, }) vim.cmd.startinsert() end helpers.has_copilot = function() return vim.fn.getenv 'COPILOT_API_KEY' ~= vim.NIL end helpers.open_file_modal = function(path, title) local width = math.floor(vim.o.columns * 0.85) local height = math.floor(vim.o.lines * 0.85) local row = math.floor((vim.o.lines - height) / 2) local col = math.floor((vim.o.columns - width) / 2) local buf = vim.api.nvim_create_buf(false, true) vim.api.nvim_open_win(buf, true, { relative = 'editor', width = width, height = height, row = row, col = col, style = 'minimal', border = 'rounded', title = ' ' .. title .. ' ', title_pos = 'center', }) vim.api.nvim_buf_set_name(buf, path) local lines = vim.fn.readfile(path) vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines) vim.bo[buf].filetype = 'markdown' vim.bo[buf].buftype = 'nofile' vim.bo[buf].bufhidden = 'wipe' vim.bo[buf].swapfile = false vim.bo[buf].modifiable = false vim.bo[buf].readonly = true vim.wo.wrap = false vim.wo.number = false vim.wo.relativenumber = false vim.wo.cursorline = true vim.keymap.set('n', 'q', 'close', { buffer = buf, silent = true, desc = 'Close cheatsheet', }) vim.keymap.set('n', '', 'close', { buffer = buf, silent = true, desc = 'Close cheatsheet', }) end return helpers -- nnoremap ev :tabedit $MYVIMRC