aboutsummaryrefslogtreecommitdiff
path: root/lua/user/mods.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/user/mods.lua')
-rw-r--r--lua/user/mods.lua428
1 files changed, 217 insertions, 211 deletions
diff --git a/lua/user/mods.lua b/lua/user/mods.lua
index c4431df..c20c687 100644
--- a/lua/user/mods.lua
+++ b/lua/user/mods.lua
@@ -27,13 +27,13 @@ end
--------------------------------------------------
-- Format on save
-local format_augroup = vim.api.nvim_create_augroup('LspFormatting', {})
-require('null-ls').setup({
+local format_augroup = vim.api.nvim_create_augroup("LspFormatting", {})
+require("null-ls").setup({
-- you can reuse a shared lspconfig on_attach callback here
on_attach = function(client, bufnr)
- if client.supports_method('textDocument/formatting') then
+ if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = format_augroup, buffer = bufnr })
- vim.api.nvim_create_autocmd('BufWritePre', {
+ vim.api.nvim_create_autocmd("BufWritePre", {
group = format_augroup,
buffer = bufnr,
callback = function()
@@ -59,13 +59,13 @@ function M.empty(item)
return true
end
local item_type = type(item)
- if item_type == 'string' then
- return item == ''
+ if item_type == "string" then
+ return item == ""
end
- if item_type == 'number' then
+ if item_type == "number" then
return item <= 0
end
- if item_type == 'table' then
+ if item_type == "table" then
return vim.tbl_isempty(item)
end
return item ~= nil
@@ -78,7 +78,7 @@ function M.may_create_dir(dir)
local res = fn.isdirectory(dir)
if res == 0 then
- fn.mkdir(dir, 'p')
+ fn.mkdir(dir, "p")
end
end
@@ -87,16 +87,16 @@ end
--- Toggle cmp completion
vim.g.cmp_toggle_flag = false -- initialize
local normal_buftype = function()
- return vim.api.nvim_buf_get_option(0, 'buftype') ~= 'prompt'
+ return vim.api.nvim_buf_get_option(0, "buftype") ~= "prompt"
end
M.toggle_completion = function()
- local ok, cmp = pcall(require, 'cmp')
+ local ok, cmp = pcall(require, "cmp")
if ok then
local next_cmp_toggle_flag = not vim.g.cmp_toggle_flag
if next_cmp_toggle_flag then
- print('completion on')
+ print("completion on")
else
- print('completion off')
+ print("completion off")
end
cmp.setup({
enabled = function()
@@ -109,7 +109,7 @@ M.toggle_completion = function()
end,
})
else
- print('completion not available')
+ print("completion not available")
end
end
@@ -119,12 +119,12 @@ end
function M.get_nvim_version()
local actual_ver = vim.version()
- local nvim_ver_str = string.format('%d.%d.%d', actual_ver.major, actual_ver.minor, actual_ver.patch)
+ local nvim_ver_str = string.format("%d.%d.%d", actual_ver.major, actual_ver.minor, actual_ver.patch)
return nvim_ver_str
end
function M.add_pack(name)
- local status, error = pcall(vim.cmd, 'packadd ' .. name)
+ local status, error = pcall(vim.cmd, "packadd " .. name)
return status
end
@@ -133,11 +133,11 @@ end
-- Define a global function to retrieve LSP clients based on Neovim version
function M.get_lsp_clients(bufnr)
- local mods = require('user.mods')
+ local mods = require("user.mods")
--local expected_ver = '0.10.0'
local nvim_ver = mods.get_nvim_version()
- local version_major, version_minor = string.match(nvim_ver, '(%d+)%.(%d+)')
+ local version_major, version_minor = string.match(nvim_ver, "(%d+)%.(%d+)")
version_major = tonumber(version_major)
version_minor = tonumber(version_minor)
@@ -152,17 +152,17 @@ end
--- Toggle autopairs on/off (requires "windwp/nvim-autopairs")
function M.Toggle_autopairs()
- local ok, autopairs = pcall(require, 'nvim-autopairs')
+ local ok, autopairs = pcall(require, "nvim-autopairs")
if ok then
if autopairs.state.disabled then
autopairs.enable()
- print('autopairs on')
+ print("autopairs on")
else
autopairs.disable()
- print('autopairs off')
+ print("autopairs off")
end
else
- print('autopairs not available')
+ print("autopairs not available")
end
end
@@ -185,10 +185,10 @@ end
--]])
function M.findFilesInCwd()
- vim.cmd('let g:rooter_manual_only = 1') -- Toggle the rooter plugin
- require('plugins.telescope').findhere()
+ vim.cmd("let g:rooter_manual_only = 1") -- Toggle the rooter plugin
+ require("plugins.telescope").findhere()
vim.defer_fn(function()
- vim.cmd('let g:rooter_manual_only = 0') -- Change back to automatic rooter
+ vim.cmd("let g:rooter_manual_only = 0") -- Change back to automatic rooter
end, 100)
end
@@ -202,19 +202,19 @@ end
-- Toggle the executable permission
function M.Toggle_executable()
- local current_file = vim.fn.expand('%:p')
+ local current_file = vim.fn.expand("%:p")
local executable = vim.fn.executable(current_file) == 1
if executable then
-- File is executable, unset the executable permission
- vim.fn.system('chmod -x ' .. current_file)
+ vim.fn.system("chmod -x " .. current_file)
--print(current_file .. ' is no longer executable.')
- print('No longer executable')
+ print("No longer executable")
else
-- File is not executable, set the executable permission
- vim.fn.system('chmod +x ' .. current_file)
+ vim.fn.system("chmod +x " .. current_file)
--print(current_file .. ' is now executable.')
- print('Now executable')
+ print("Now executable")
end
end
@@ -239,21 +239,21 @@ end
------
-local prev_cwd = ''
+local prev_cwd = ""
function M.Set_git_env_vars()
local cwd = vim.fn.getcwd()
- if prev_cwd == '' then
+ if prev_cwd == "" then
-- First buffer being opened, set prev_cwd to cwd
prev_cwd = cwd
elseif cwd ~= prev_cwd then
-- Working directory has changed since last buffer was opened
prev_cwd = cwd
- local git_dir_job = vim.fn.jobstart({ 'git', 'rev-parse', '--git-dir' })
+ local git_dir_job = vim.fn.jobstart({ "git", "rev-parse", "--git-dir" })
local command_status = vim.fn.jobwait({ git_dir_job })[1]
if command_status > 0 then
- vim.env.GIT_DIR = vim.fn.expand('$HOME/.cfg')
- vim.env.GIT_WORK_TREE = vim.fn.expand('~')
+ vim.env.GIT_DIR = vim.fn.expand("$HOME/.cfg")
+ vim.env.GIT_WORK_TREE = vim.fn.expand("~")
else
vim.env.GIT_DIR = nil
vim.env.GIT_WORK_TREE = nil
@@ -271,28 +271,32 @@ vim.cmd([[augroup END]])
--- Update Tmux Status Vi-mode
function M.update_tmux_status()
- local mode = vim.api.nvim_eval('mode()')
+ -- Check if the current buffer has a man filetype
+ if vim.bo.filetype == "man" then
+ return
+ end
+ local mode = vim.api.nvim_eval("mode()")
-- Determine the mode name based on the mode value
local mode_name
- if mode == 'n' then
- mode_name = '-- NORMAL --'
- elseif mode == 'i' or mode == 'ic' then
- mode_name = '-- INSERT --'
+ if mode == "n" then
+ mode_name = "-- NORMAL --"
+ elseif mode == "i" or mode == "ic" then
+ mode_name = "-- INSERT --"
else
- mode_name = '-- NORMAL --' --'-- COMMAND --'
+ mode_name = "-- NORMAL --" --'-- COMMAND --'
end
-- Write the mode name to the file
- local file = io.open(os.getenv('HOME') .. '/.vi-mode', 'w')
+ local file = io.open(os.getenv("HOME") .. "/.vi-mode", "w")
file:write(mode_name)
file:close()
if nvim_running then
-- Neovim is running, update the mode file and refresh tmux
- VI_MODE = '' -- Clear VI_MODE to show Neovim mode
- vim.cmd('silent !tmux refresh-client -S')
+ VI_MODE = "" -- Clear VI_MODE to show Neovim mode
+ vim.cmd("silent !tmux refresh-client -S")
end
---- Force tmux to update the status
- vim.cmd('silent !tmux refresh-client -S')
+ vim.cmd("silent !tmux refresh-client -S")
end
vim.cmd([[
@@ -417,42 +421,43 @@ function M.Update_neovim()
-- Create a new floating window
local bufnr, winid = vim.api.nvim_create_buf(false, true)
vim.api.nvim_open_win(bufnr, true, {
- relative = 'editor',
+ relative = "editor",
width = 80,
height = 20,
row = 2,
col = 2,
- style = 'minimal',
- border = 'single',
+ style = "minimal",
+ border = "single",
})
-- Function to append a line to the buffer in the floating window
local function append_line(line)
- vim.api.nvim_buf_set_option(bufnr, 'modifiable', true)
+ vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
vim.api.nvim_buf_set_lines(bufnr, -1, -1, false, { line })
- vim.api.nvim_buf_set_option(bufnr, 'modifiable', false)
+ vim.api.nvim_buf_set_option(bufnr, "modifiable", false)
end
-- Download the latest version of Neovim
- append_line('Downloading the latest version of Neovim...')
- os.execute('curl -L -o nvim-linux64.tar.gz https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz')
- append_line('Download complete.')
+ append_line("Downloading the latest version of Neovim...")
+ os.execute(
+ "curl -L -o nvim-linux64.tar.gz https://github.com/neovim/neovim/releases/latest/download/nvim-linux64.tar.gz")
+ append_line("Download complete.")
-- Extract the downloaded archive
- append_line('Extracting the downloaded archive...')
- os.execute('tar xzvf nvim-linux64.tar.gz')
- append_line('Extraction complete.')
+ append_line("Extracting the downloaded archive...")
+ os.execute("tar xzvf nvim-linux64.tar.gz")
+ append_line("Extraction complete.")
-- Replace the existing Neovim installation with the new version
- append_line('Replacing the existing Neovim installation...')
- os.execute('rm -rf $HOME/nvim')
- os.execute('mv nvim-linux64 $HOME/nvim')
- append_line('Update complete.')
+ append_line("Replacing the existing Neovim installation...")
+ os.execute("rm -rf $HOME/nvim")
+ os.execute("mv nvim-linux64 $HOME/nvim")
+ append_line("Update complete.")
-- Clean up the downloaded file
- append_line('Cleaning up the downloaded file...')
- os.execute('rm nvim-linux64.tar.gz')
- append_line('Cleanup complete.')
+ append_line("Cleaning up the downloaded file...")
+ os.execute("rm nvim-linux64.tar.gz")
+ append_line("Cleanup complete.")
-- Close the floating window after a delay
vim.defer_fn(function()
@@ -461,14 +466,15 @@ function M.Update_neovim()
end
-- Bind a keymap to the update_neovim function (optional)
-vim.api.nvim_set_keymap('n', '<leader>U', '<cmd> lua require("user.mods").Update_neovim()<CR>', { noremap = true, silent = true })
+vim.api.nvim_set_keymap("n", "<leader>U", '<cmd> lua require("user.mods").Update_neovim()<CR>',
+ { noremap = true, silent = true })
--------------------------------------------------
-- Fix or suppress closing nvim error message (/src/unix/core.c:147: uv_close: Assertion `!uv__is_closing(handle)' failed.)
-vim.api.nvim_create_autocmd({ 'VimLeave' }, {
+vim.api.nvim_create_autocmd({ "VimLeave" }, {
callback = function()
- vim.fn.jobstart('!notify-send 2>/dev/null &', { detach = true })
+ vim.fn.jobstart("!notify-send 2>/dev/null &", { detach = true })
end,
})
@@ -483,7 +489,7 @@ vim.api.nvim_create_autocmd({ 'VimLeave' }, {
local modifiedBufs = function(bufs) -- nvim-tree is also there in modified buffers so this function filter it out
local t = 0
for k, v in pairs(bufs) do
- if v.name:match('NvimTree_', 'NvimTree1') == nil then
+ if v.name:match("NvimTree_", "NvimTree1") == nil then
t = t + 1
end
end
@@ -509,15 +515,15 @@ function M.DeleteCurrentBuffer()
end
if idx == size then
- vim.cmd('bprevious')
+ vim.cmd("bprevious")
else
- vim.cmd('bnext')
+ vim.cmd("bnext")
end
- vim.cmd('silent! bdelete ' .. cbn)
+ vim.cmd("silent! bdelete " .. cbn)
-- Open a new blank window
- vim.cmd('silent! enew') -- Opens a new vertical split
+ vim.cmd("silent! enew") -- Opens a new vertical split
-- OR
-- vim.cmd("new") -- Opens a new horizontal split
-- Delay before opening a new split
@@ -530,12 +536,12 @@ end
vim.cmd([[autocmd FileType NvimTree lua require("user.mods").DeleteCurrentBuffer()]])
-- On :bd nvim-tree should behave as if it wasn't opened
-vim.api.nvim_create_autocmd('BufEnter', {
+vim.api.nvim_create_autocmd("BufEnter", {
nested = true,
callback = function()
-- Only 1 window with nvim-tree left: we probably closed a file buffer
- if #vim.api.nvim_list_wins() == 1 and require('nvim-tree.utils').is_nvim_tree_buf() then
- local api = require('nvim-tree.api')
+ if #vim.api.nvim_list_wins() == 1 and require("nvim-tree.utils").is_nvim_tree_buf() then
+ local api = require("nvim-tree.api")
-- Required to let the close event complete. An error is thrown without this.
vim.defer_fn(function()
-- close nvim-tree: will go to the last buffer used before closing
@@ -543,7 +549,7 @@ vim.api.nvim_create_autocmd('BufEnter', {
-- re-open nivm-tree
api.tree.toggle({ find_file = true, focus = true })
-- nvim-tree is still the active window. Go to the previous window.
- vim.cmd('wincmd p')
+ vim.cmd("wincmd p")
end, 0)
end
end,
@@ -551,13 +557,13 @@ vim.api.nvim_create_autocmd('BufEnter', {
-- Dismiss notifications when opening nvim-tree window
local function isNvimTreeOpen()
- local win = vim.fn.win_findbuf(vim.fn.bufnr('NvimTree'))
+ local win = vim.fn.win_findbuf(vim.fn.bufnr("NvimTree"))
return vim.fn.empty(win) == 0
end
function M.DisableNotify()
if isNvimTreeOpen() then
- require('notify').dismiss()
+ require("notify").dismiss()
end
end
@@ -569,10 +575,10 @@ vim.cmd([[
-- Toggle Dashboard
function M.toggle_dashboard()
- if vim.bo.filetype == 'dashboard' then
- vim.cmd('bdelete')
+ if vim.bo.filetype == "dashboard" then
+ vim.cmd("bdelete")
else
- vim.cmd('Dashboard')
+ vim.cmd("Dashboard")
end
end
@@ -580,9 +586,9 @@ end
-- Helper function to suppress errors
local function silent_execute(cmd)
- vim.fn['serverlist']() -- Required to prevent 'Press ENTER' prompt
- local result = vim.fn.system(cmd .. ' 2>/dev/null')
- vim.fn['serverlist']()
+ vim.fn["serverlist"]() -- Required to prevent 'Press ENTER' prompt
+ local result = vim.fn.system(cmd .. " 2>/dev/null")
+ vim.fn["serverlist"]()
return result
end
@@ -595,14 +601,14 @@ local is_codi_open = false
function M.toggleCodi()
if is_codi_open then
-- Close Codi
- vim.cmd('Codi!')
+ vim.cmd("Codi!")
is_codi_open = false
- print('Codi off')
+ print("Codi off")
else
-- Open Codi
- vim.cmd('Codi')
+ vim.cmd("Codi")
is_codi_open = true
- print('Codi on')
+ print("Codi on")
end
end
@@ -614,39 +620,39 @@ local scratch_buf = nil
local scratch_win = nil
-- Other global variables
-local scratch_date = os.date('%Y-%m-%d')
-local scratch_dir = vim.fn.expand('~/notes/private')
-local scratch_file = 'scratch-' .. scratch_date .. '.md'
+local scratch_date = os.date("%Y-%m-%d")
+local scratch_dir = vim.fn.expand("~/notes/private")
+local scratch_file = "scratch-" .. scratch_date .. ".md"
-- Function to close and delete a buffer
function CloseAndDeleteBuffer(bufnr)
if bufnr and vim.api.nvim_buf_is_valid(bufnr) then
- vim.api.nvim_command('silent! bwipe ' .. bufnr)
+ vim.api.nvim_command("silent! bwipe " .. bufnr)
end
end
function M.Scratch(Split_direction)
-- Check if the directory exists, and create it if it doesn't
if vim.fn.isdirectory(scratch_dir) == 0 then
- vim.fn.mkdir(scratch_dir, 'p')
+ vim.fn.mkdir(scratch_dir, "p")
end
-- Determine the window type based on Split_direction
- local current_window_type = 'float'
- if Split_direction == 'float' then
- current_window_type = 'float'
- elseif Split_direction == 'vertical' then
- current_window_type = 'vertical'
- elseif Split_direction == 'horizontal' then
- current_window_type = 'horizontal'
+ local current_window_type = "float"
+ if Split_direction == "float" then
+ current_window_type = "float"
+ elseif Split_direction == "vertical" then
+ current_window_type = "vertical"
+ elseif Split_direction == "horizontal" then
+ current_window_type = "horizontal"
end
- local file_path = scratch_dir .. '/' .. scratch_file
+ local file_path = scratch_dir .. "/" .. scratch_file
if scratch_win and vim.api.nvim_win_is_valid(scratch_win) then
-- Window exists, save buffer to file and close it
WriteScratchBufferToFile(scratch_buf, file_path)
- vim.cmd(':w!')
+ vim.cmd(":w!")
vim.api.nvim_win_close(scratch_win, true)
CloseAndDeleteBuffer(scratch_buf)
scratch_win = nil
@@ -667,11 +673,11 @@ end
function WriteScratchBufferToFile(buf, file_path)
if buf and vim.api.nvim_buf_is_valid(buf) then
local lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false)
- local content = table.concat(lines, '\n')
+ local content = table.concat(lines, "\n")
local escaped_file_path = vim.fn.fnameescape(file_path)
-- Write the buffer content to the file
- local file = io.open(escaped_file_path, 'w')
+ local file = io.open(escaped_file_path, "w")
if file then
file:write(content)
file:close()
@@ -694,13 +700,13 @@ function OpenScratchBuffer(file_path)
else
-- Insert initial content
vim.api.nvim_buf_set_lines(buf, 0, -1, true, {
- '# Quick Notes - ' .. scratch_date,
- '--------------------------',
- '',
+ "# Quick Notes - " .. scratch_date,
+ "--------------------------",
+ "",
})
-- Save the initial content to the file
- vim.cmd(':w')
+ vim.cmd(":w")
end
return buf
@@ -709,24 +715,24 @@ end
-- Function to open the scratch buffer in a window
function OpenScratchWindow(buf, current_window_type)
if buf and vim.api.nvim_buf_is_valid(buf) then
- if current_window_type == 'float' then
+ if current_window_type == "float" then
local opts = {
- relative = 'win',
+ relative = "win",
width = 120,
height = 10,
- border = 'single',
+ border = "single",
row = 20,
col = 20,
}
scratch_win = vim.api.nvim_open_win(buf, true, opts)
-- Go to the last line of the buffer
vim.api.nvim_win_set_cursor(scratch_win, { vim.api.nvim_buf_line_count(buf), 1 })
- elseif current_window_type == 'vertical' then
- vim.cmd('vsplit')
+ elseif current_window_type == "vertical" then
+ vim.cmd("vsplit")
vim.api.nvim_win_set_buf(0, buf)
scratch_win = 0
- elseif current_window_type == 'horizontal' then
- vim.cmd('split')
+ elseif current_window_type == "horizontal" then
+ vim.cmd("split")
vim.api.nvim_win_set_buf(0, buf)
scratch_win = 0
end
@@ -736,26 +742,26 @@ end
--------------------------------------------------
-- Intercept file open
-local augroup = vim.api.nvim_create_augroup('user-autocmds', { clear = true })
+local augroup = vim.api.nvim_create_augroup("user-autocmds", { clear = true })
local intercept_file_open = true
-vim.api.nvim_create_user_command('InterceptToggle', function()
+vim.api.nvim_create_user_command("InterceptToggle", function()
intercept_file_open = not intercept_file_open
- local intercept_state = '`Enabled`'
+ local intercept_state = "`Enabled`"
if not intercept_file_open then
- intercept_state = '`Disabled`'
+ intercept_state = "`Disabled`"
end
- vim.notify('Intercept file open set to ' .. intercept_state, vim.log.levels.INFO, {
- title = 'Intercept File Open',
+ vim.notify("Intercept file open set to " .. intercept_state, vim.log.levels.INFO, {
+ title = "Intercept File Open",
---@param win integer The window handle
on_open = function(win)
- vim.api.nvim_buf_set_option(vim.api.nvim_win_get_buf(win), 'filetype', 'markdown')
+ vim.api.nvim_buf_set_option(vim.api.nvim_win_get_buf(win), "filetype", "markdown")
end,
})
-end, { desc = 'Toggles intercepting BufNew to open files in custom programs' })
+end, { desc = "Toggles intercepting BufNew to open files in custom programs" })
-- NOTE: Add "BufReadPre" to the autocmd events to also intercept files given on the command line, e.g.
-- `nvim myfile.txt`
-vim.api.nvim_create_autocmd({ 'BufNew' }, {
+vim.api.nvim_create_autocmd({ "BufNew" }, {
group = augroup,
callback = function(args)
---@type string
@@ -764,9 +770,9 @@ vim.api.nvim_create_autocmd({ 'BufNew' }, {
local bufnr = args.buf
---@type string? The file extension if detected
- local extension = vim.fn.fnamemodify(path, ':e')
+ local extension = vim.fn.fnamemodify(path, ":e")
---@type string? The filename if detected
- local filename = vim.fn.fnamemodify(path, ':t')
+ local filename = vim.fn.fnamemodify(path, ":t")
---Open a given file path in a given program and remove the buffer for the file.
---@param buf integer The buffer handle for the opening buffer
@@ -774,17 +780,17 @@ vim.api.nvim_create_autocmd({ 'BufNew' }, {
---@param fname string The file name used in notifications
---@param prog string The program to execute against the file path
local function open_in_prog(buf, fpath, fname, prog)
- vim.notify(string.format('Opening `%s` in `%s`', fname, prog), vim.log.levels.INFO, {
- title = 'Open File in External Program',
+ vim.notify(string.format("Opening `%s` in `%s`", fname, prog), vim.log.levels.INFO, {
+ title = "Open File in External Program",
---@param win integer The window handle
on_open = function(win)
- vim.api.nvim_buf_set_option(vim.api.nvim_win_get_buf(win), 'filetype', 'markdown')
+ vim.api.nvim_buf_set_option(vim.api.nvim_win_get_buf(win), "filetype", "markdown")
end,
})
- local mods = require('user.mods')
+ local mods = require("user.mods")
local nvim_ver = mods.get_nvim_version()
- local version_major, version_minor = string.match(nvim_ver, '(%d+)%.(%d+)')
+ local version_major, version_minor = string.match(nvim_ver, "(%d+)%.(%d+)")
version_major = tonumber(version_major)
version_minor = tonumber(version_minor)
@@ -797,21 +803,21 @@ vim.api.nvim_create_autocmd({ 'BufNew' }, {
end
local extension_callbacks = {
- ['pdf'] = function(buf, fpath, fname)
- open_in_prog(buf, fpath, fname, 'zathura')
+ ["pdf"] = function(buf, fpath, fname)
+ open_in_prog(buf, fpath, fname, "zathura")
end,
- ['epub'] = function(buf, fpath, fname)
- open_in_prog(buf, fpath, fname, 'zathura')
+ ["epub"] = function(buf, fpath, fname)
+ open_in_prog(buf, fpath, fname, "zathura")
end,
- ['mobi'] = 'pdf',
- ['png'] = function(buf, fpath, fname)
- open_in_prog(buf, fpath, fname, 'vimiv')
+ ["mobi"] = "pdf",
+ ["png"] = function(buf, fpath, fname)
+ open_in_prog(buf, fpath, fname, "vimiv")
end,
- ['jpg'] = 'png',
- ['mp4'] = function(buf, fpath, fname)
- open_in_prog(buf, fpath, fname, 'vlc')
+ ["jpg"] = "png",
+ ["mp4"] = function(buf, fpath, fname)
+ open_in_prog(buf, fpath, fname, "vlc")
end,
- ['gif'] = 'mp4',
+ ["gif"] = "mp4",
}
---Get the extension callback for a given extension. Will do a recursive lookup if an extension callback is actually
@@ -820,15 +826,15 @@ vim.api.nvim_create_autocmd({ 'BufNew' }, {
---@return fun(bufnr: integer, path: string, filename: string?) extension_callback The extension callback to invoke, expects a buffer handle, file path, and filename.
local function extension_lookup(ext)
local callback = extension_callbacks[ext]
- if type(callback) == 'string' then
+ if type(callback) == "string" then
callback = extension_lookup(callback)
end
return callback
end
- if extension ~= nil and not extension:match('^%s*$') and intercept_file_open then
+ if extension ~= nil and not extension:match("^%s*$") and intercept_file_open then
local callback = extension_lookup(extension)
- if type(callback) == 'function' then
+ if type(callback) == "function" then
callback(bufnr, path, filename)
end
end
@@ -838,10 +844,10 @@ vim.api.nvim_create_autocmd({ 'BufNew' }, {
--------------------------------------------------
-- Delete [No Name] buffers
-vim.api.nvim_create_autocmd('BufHidden', {
- desc = 'Delete [No Name] buffers',
+vim.api.nvim_create_autocmd("BufHidden", {
+ desc = "Delete [No Name] buffers",
callback = function(event)
- if event.file == '' and vim.bo[event.buf].buftype == '' and not vim.bo[event.buf].modified then
+ if event.file == "" and vim.bo[event.buf].buftype == "" and not vim.bo[event.buf].modified then
vim.schedule(function()
pcall(vim.api.nvim_buf_delete, event.buf, {})
end)
@@ -856,127 +862,127 @@ local codeRunnerEnabled = false
function M.toggleCodeRunner()
codeRunnerEnabled = not codeRunnerEnabled
if codeRunnerEnabled then
- print('Code Runner enabled')
+ print("Code Runner enabled")
M.RunCode() -- Execute when enabled
else
- print('Code Runner disabled')
+ print("Code Runner disabled")
-- Close the terminal window when disabled
local buffers = vim.fn.getbufinfo()
for _, buf in ipairs(buffers) do
- local type = vim.api.nvim_buf_get_option(buf.bufnr, 'buftype')
- if type == 'terminal' then
- vim.api.nvim_command('silent! bdelete ' .. buf.bufnr)
+ local type = vim.api.nvim_buf_get_option(buf.bufnr, "buftype")
+ if type == "terminal" then
+ vim.api.nvim_command("silent! bdelete " .. buf.bufnr)
end
end
end
end
local function substitute(cmd)
- cmd = cmd:gsub('%%', vim.fn.expand('%'))
- cmd = cmd:gsub('$fileBase', vim.fn.expand('%:r'))
- cmd = cmd:gsub('$filePath', vim.fn.expand('%:p'))
- cmd = cmd:gsub('$file', vim.fn.expand('%'))
- cmd = cmd:gsub('$dir', vim.fn.expand('%:p:h'))
- cmd = cmd:gsub('#', vim.fn.expand('#'))
- cmd = cmd:gsub('$altFile', vim.fn.expand('#'))
+ cmd = cmd:gsub("%%", vim.fn.expand("%"))
+ cmd = cmd:gsub("$fileBase", vim.fn.expand("%:r"))
+ cmd = cmd:gsub("$filePath", vim.fn.expand("%:p"))
+ cmd = cmd:gsub("$file", vim.fn.expand("%"))
+ cmd = cmd:gsub("$dir", vim.fn.expand("%:p:h"))
+ cmd = cmd:gsub("#", vim.fn.expand("#"))
+ cmd = cmd:gsub("$altFile", vim.fn.expand("#"))
return cmd
end
function M.RunCode()
if not codeRunnerEnabled then
- print('Code Runner is currently disabled. Toggle it on to execute code.')
+ print("Code Runner is currently disabled. Toggle it on to execute code.")
return
end
- local file_extension = vim.fn.expand('%:e')
- local selected_cmd = ''
+ local file_extension = vim.fn.expand("%:e")
+ local selected_cmd = ""
local supported_filetypes = {
html = {
- default = '%',
+ default = "%",
},
c = {
- default = 'gcc % -o $fileBase && ./$fileBase',
- debug = 'gcc -g % -o $fileBase && ./$fileBase',
+ default = "gcc % -o $fileBase && ./$fileBase",
+ debug = "gcc -g % -o $fileBase && ./$fileBase",
},
cs = {
- default = 'dotnet run',
+ default = "dotnet run",
},
cpp = {
- default = 'g++ % -o $fileBase && ./$fileBase',
- debug = 'g++ -g % -o ./$fileBase',
- competitive = 'g++ -std=c++17 -Wall -DAL -O2 % -o $fileBase && $fileBase<input.txt',
+ default = "g++ % -o $fileBase && ./$fileBase",
+ debug = "g++ -g % -o ./$fileBase",
+ competitive = "g++ -std=c++17 -Wall -DAL -O2 % -o $fileBase && $fileBase<input.txt",
},
py = {
- default = 'python %',
+ default = "python %",
},
go = {
- default = 'go run %',
+ default = "go run %",
},
java = {
- default = 'java %',
+ default = "java %",
},
js = {
- default = 'node %',
- debug = 'node --inspect %',
+ default = "node %",
+ debug = "node --inspect %",
},
lua = {
- default = 'lua %',
+ default = "lua %",
},
ts = {
- default = 'tsc % && node $fileBase',
+ default = "tsc % && node $fileBase",
},
rs = {
- default = 'rustc % && $fileBase',
+ default = "rustc % && $fileBase",
},
php = {
- default = 'php %',
+ default = "php %",
},
r = {
- default = 'Rscript %',
+ default = "Rscript %",
},
jl = {
- default = 'julia %',
+ default = "julia %",
},
rb = {
- default = 'ruby %',
+ default = "ruby %",
},
pl = {
- default = 'perl %',
+ default = "perl %",
},
}
- local term_cmd = 'bot 10 new | term '
+ local term_cmd = "bot 10 new | term "
local choices = {}
-- Add 'default' as the first option if available
- if supported_filetypes[file_extension]['default'] then
- table.insert(choices, 'default')
+ if supported_filetypes[file_extension]["default"] then
+ table.insert(choices, "default")
end
-- Add 'debug' as the second option if available
- if supported_filetypes[file_extension]['debug'] then
- table.insert(choices, 'debug')
+ if supported_filetypes[file_extension]["debug"] then
+ table.insert(choices, "debug")
end
-- Add other available options
for key, _ in pairs(supported_filetypes[file_extension]) do
- if key ~= 'default' and key ~= 'debug' then
+ if key ~= "default" and key ~= "debug" then
table.insert(choices, key)
end
end
if #choices == 0 then
- vim.notify("It doesn't contain any command", vim.log.levels.WARN, { title = 'Code Runner' })
+ vim.notify("It doesn't contain any command", vim.log.levels.WARN, { title = "Code Runner" })
elseif #choices == 1 then
selected_cmd = supported_filetypes[file_extension][choices[1]]
vim.cmd(term_cmd .. substitute(selected_cmd))
else
vim.ui.select(choices, {
- prompt = 'Choose a command: ',
+ prompt = "Choose a command: ",
layout_config = {
height = 10,
width = 40,
- prompt_position = 'top',
+ prompt_position = "top",
-- other options as required
},
}, function(choice)
@@ -988,7 +994,7 @@ function M.RunCode()
end
if not supported_filetypes[file_extension] then
- vim.notify("The filetype isn't included in the list", vim.log.levels.WARN, { title = 'Code Runner' })
+ vim.notify("The filetype isn't included in the list", vim.log.levels.WARN, { title = "Code Runner" })
end
end
@@ -996,37 +1002,37 @@ end
-- Run executable file
local interpreters = {
- python = 'python',
- lua = 'lua',
- bash = 'bash',
- zsh = 'zsh',
- perl = 'perl',
- ruby = 'ruby',
- node = 'node',
- rust = 'rust',
- php = 'php',
+ python = "python",
+ lua = "lua",
+ bash = "bash",
+ zsh = "zsh",
+ perl = "perl",
+ ruby = "ruby",
+ node = "node",
+ rust = "rust",
+ php = "php",
}
function M.RunCurrentFile()
- local file_path = vim.fn.expand('%:p')
- local file = io.open(file_path, 'r')
+ local file_path = vim.fn.expand("%:p")
+ local file = io.open(file_path, "r")
if not file then
- print('Error: Unable to open the file')
+ print("Error: Unable to open the file")
return
end
local shebang = file:read()
file:close()
- local interpreter = shebang:match('#!%s*(.-)$')
+ local interpreter = shebang:match("#!%s*(.-)$")
if not interpreter then
- print('Error: No shebang line found in the file')
+ print("Error: No shebang line found in the file")
return
end
-- Remove leading spaces and any arguments, extracting the interpreter name
- interpreter = interpreter:gsub('^%s*([^%s]+).*', '%1')
+ interpreter = interpreter:gsub("^%s*([^%s]+).*", "%1")
local cmd = interpreters[interpreter]
@@ -1035,18 +1041,18 @@ function M.RunCurrentFile()
end
-- Run the file using the determined interpreter
- vim.fn.jobstart(cmd .. ' ' .. file_path, {
- cwd = vim.fn.expand('%:p:h'),
+ vim.fn.jobstart(cmd .. " " .. file_path, {
+ cwd = vim.fn.expand("%:p:h"),
})
end
--------------------------------------------------
-- Close all floating windows
-vim.api.nvim_create_user_command('CloseFloatingWindows', function(opts)
+vim.api.nvim_create_user_command("CloseFloatingWindows", function(opts)
for _, window_id in ipairs(vim.api.nvim_list_wins()) do
-- If window is floating
- if vim.api.nvim_win_get_config(window_id).relative ~= '' then
+ if vim.api.nvim_win_get_config(window_id).relative ~= "" then
-- Force close if called with !
vim.api.nvim_win_close(window_id, opts.bang)
end