summaryrefslogtreecommitdiff
path: root/lua/lvim/core
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lvim/core')
-rw-r--r--lua/lvim/core/autocmds.lua62
-rw-r--r--lua/lvim/core/autopairs.lua45
-rw-r--r--lua/lvim/core/bufferline.lua8
-rw-r--r--lua/lvim/core/cmp.lua3
-rw-r--r--lua/lvim/core/commands.lua2
-rw-r--r--lua/lvim/core/dashboard.lua5
-rw-r--r--lua/lvim/core/info.lua24
-rw-r--r--lua/lvim/core/log.lua2
-rw-r--r--lua/lvim/core/lualine/components.lua6
-rw-r--r--lua/lvim/core/lualine/conditions.lua2
-rw-r--r--lua/lvim/core/nvimtree.lua69
-rw-r--r--lua/lvim/core/project.lua3
-rw-r--r--lua/lvim/core/telescope.lua1
-rw-r--r--lua/lvim/core/telescope/custom-finders.lua23
-rw-r--r--lua/lvim/core/terminal.lua81
-rw-r--r--lua/lvim/core/which-key.lua4
16 files changed, 263 insertions, 77 deletions
diff --git a/lua/lvim/core/autocmds.lua b/lua/lvim/core/autocmds.lua
index 569622be..e4577e63 100644
--- a/lua/lvim/core/autocmds.lua
+++ b/lua/lvim/core/autocmds.lua
@@ -1,8 +1,14 @@
local M = {}
+local Log = require "lvim.core.log"
--- Load the default set of autogroups and autocommands.
function M.load_augroups()
- local user_config_file = vim.fn.resolve(require("lvim.config"):get_user_config_path())
+ local user_config_file = require("lvim.config"):get_user_config_path()
+
+ if vim.loop.os_uname().version:match "Windows" then
+ -- autocmds require forward slashes even on windows
+ user_config_file = user_config_file:gsub("\\", "/")
+ end
return {
_general_settings = {
@@ -58,6 +64,60 @@ function M.load_augroups()
}
end
+local get_format_on_save_opts = function()
+ local defaults = require("lvim.config.defaults").format_on_save
+ -- accept a basic boolean `lvim.format_on_save=true`
+ if type(lvim.format_on_save) ~= "table" then
+ return defaults
+ end
+
+ return {
+ pattern = lvim.format_on_save.pattern or defaults.pattern,
+ timeout = lvim.format_on_save.timeout or defaults.timeout,
+ }
+end
+
+function M.enable_format_on_save(opts)
+ local fmd_cmd = string.format(":silent lua vim.lsp.buf.formatting_sync({}, %s)", opts.timeout_ms)
+ M.define_augroups {
+ format_on_save = { { "BufWritePre", opts.pattern, fmd_cmd } },
+ }
+ Log:debug "enabled format-on-save"
+end
+
+function M.disable_format_on_save()
+ M.remove_augroup "format_on_save"
+ Log:debug "disabled format-on-save"
+end
+
+function M.configure_format_on_save()
+ if lvim.format_on_save then
+ if vim.fn.exists "#format_on_save#BufWritePre" == 1 then
+ M.remove_augroup "format_on_save"
+ Log:debug "reloading format-on-save configuration"
+ end
+ local opts = get_format_on_save_opts()
+ M.enable_format_on_save(opts)
+ else
+ M.disable_format_on_save()
+ end
+end
+
+function M.toggle_format_on_save()
+ if vim.fn.exists "#format_on_save#BufWritePre" == 0 then
+ local opts = get_format_on_save_opts()
+ M.enable_format_on_save(opts)
+ else
+ M.disable_format_on_save()
+ end
+end
+
+function M.remove_augroup(name)
+ if vim.fn.exists("#" .. name) == 1 then
+ vim.cmd("au! " .. name)
+ end
+end
+
function M.define_augroups(definitions) -- {{{1
-- Create autocommand groups based on the passed definitions
--
diff --git a/lua/lvim/core/autopairs.lua b/lua/lvim/core/autopairs.lua
index 51649790..365d00d5 100644
--- a/lua/lvim/core/autopairs.lua
+++ b/lua/lvim/core/autopairs.lua
@@ -4,18 +4,45 @@ function M.config()
lvim.builtin.autopairs = {
active = true,
on_config_done = nil,
- ---@usage -- modifies the function or method delimiter by filetypes
+ ---@usage modifies the function or method delimiter by filetypes
map_char = {
all = "(",
tex = "{",
},
+ ---@usage check bracket in same line
+ enable_check_bracket_line = false,
---@usage check treesitter
check_ts = true,
ts_config = {
- lua = { "string" },
- javascript = { "template_string" },
+ lua = { "string", "source" },
+ javascript = { "string", "template_string" },
java = false,
},
+ disable_filetype = { "TelescopePrompt", "spectre_panel" },
+ ignored_next_char = string.gsub([[ [%w%%%'%[%"%.] ]], "%s+", ""),
+ enable_moveright = true,
+ ---@usage disable when recording or executing a macro
+ disable_in_macro = false,
+ ---@usage add bracket pairs after quote
+ enable_afterquote = true,
+ ---@usage map the <BS> key
+ map_bs = true,
+ ---@usage map <c-w> to delete a pair if possible
+ map_c_w = false,
+ ---@usage disable when insert after visual block mode
+ disable_in_visualblock = false,
+ ---@usage change default fast_wrap
+ fast_wrap = {
+ map = "<M-e>",
+ chars = { "{", "[", "(", '"', "'" },
+ pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
+ offset = 0, -- Offset from pattern match
+ end_key = "$",
+ keys = "qwertyuiopzxcvbnmasdfghjkl",
+ check_comma = true,
+ highlight = "Search",
+ highlight_grey = "Comment",
+ },
}
end
@@ -26,11 +53,19 @@ M.setup = function()
autopairs.setup {
check_ts = lvim.builtin.autopairs.check_ts,
+ enable_check_bracket_line = lvim.builtin.autopairs.enable_check_bracket_line,
ts_config = lvim.builtin.autopairs.ts_config,
+ disable_filetype = lvim.builtin.autopairs.disable_filetype,
+ disable_in_macro = lvim.builtin.autopairs.disable_in_macro,
+ ignored_next_char = lvim.builtin.autopairs.ignored_next_char,
+ enable_moveright = lvim.builtin.autopairs.enable_moveright,
+ enable_afterquote = lvim.builtin.autopairs.enable_afterquote,
+ map_c_w = lvim.builtin.autopairs.map_c_w,
+ map_bs = lvim.builtin.autopairs.map_bs,
+ disable_in_visualblock = lvim.builtin.autopairs.disable_in_visualblock,
+ fast_wrap = lvim.builtin.autopairs.fast_wrap,
}
- -- vim.g.completion_confirm_key = ""
-
autopairs.add_rule(Rule("$$", "$$", "tex"))
autopairs.add_rules {
Rule("$", "$", { "tex", "latex" }) -- don't add a pair if the next character is %
diff --git a/lua/lvim/core/bufferline.lua b/lua/lvim/core/bufferline.lua
index ae6542d1..4f7493d6 100644
--- a/lua/lvim/core/bufferline.lua
+++ b/lua/lvim/core/bufferline.lua
@@ -5,17 +5,13 @@ M.config = function()
active = true,
on_config_done = nil,
keymap = {
- normal_mode = {
- ["<S-l>"] = ":BufferNext<CR>",
- ["<S-h>"] = ":BufferPrevious<CR>",
- },
+ normal_mode = {},
},
}
end
M.setup = function()
- local keymap = require "lvim.keymappings"
- keymap.append_to_defaults(lvim.builtin.bufferline.keymap)
+ require("lvim.keymappings").load(lvim.builtin.bufferline.keymap)
if lvim.builtin.bufferline.on_config_done then
lvim.builtin.bufferline.on_config_done()
diff --git a/lua/lvim/core/cmp.lua b/lua/lvim/core/cmp.lua
index 89159ebb..afad3ead 100644
--- a/lua/lvim/core/cmp.lua
+++ b/lua/lvim/core/cmp.lua
@@ -301,8 +301,7 @@ M.config = function()
}
end
-M.setup = function()
- require("luasnip/loaders/from_vscode").lazy_load()
+function M.setup()
require("cmp").setup(lvim.builtin.cmp)
end
diff --git a/lua/lvim/core/commands.lua b/lua/lvim/core/commands.lua
index 61148889..6997795d 100644
--- a/lua/lvim/core/commands.lua
+++ b/lua/lvim/core/commands.lua
@@ -16,6 +16,8 @@ M.defaults = {
[[ command! LvimUpdate lua require('lvim.bootstrap').update() ]],
[[ command! LvimSyncCorePlugins lua require('lvim.plugin-loader'):sync_core_plugins() ]],
[[ command! LvimReload lua require('lvim.config'):reload() ]],
+ [[ command! LvimToggleFormatOnSave lua require('lvim.core.autocmds').toggle_format_on_save() ]],
+ [[ command! LvimVersion lua require('lvim.core.telescope.custom-finders').view_lunarvim_changelog() ]],
}
M.load = function(commands)
diff --git a/lua/lvim/core/dashboard.lua b/lua/lvim/core/dashboard.lua
index 11053796..0f62d973 100644
--- a/lua/lvim/core/dashboard.lua
+++ b/lua/lvim/core/dashboard.lua
@@ -58,6 +58,7 @@ M.config = function(config)
footer = { "lunarvim.org" },
}
+ lvim.builtin.which_key.mappings[";"] = { "<cmd>Dashboard<CR>", "Dashboard" }
end
M.setup = function()
@@ -69,8 +70,6 @@ M.setup = function()
vim.g.dashboard_custom_section = lvim.builtin.dashboard.custom_section
- lvim.builtin.which_key.mappings[";"] = { "<cmd>Dashboard<CR>", "Dashboard" }
-
vim.g.dashboard_session_directory = lvim.builtin.dashboard.session_directory
local lvim_site = "lunarvim.org"
@@ -85,7 +84,7 @@ M.setup = function()
if lvim_version then
table.insert(footer, 2, "")
- table.insert(footer, 3, "v" .. lvim_version)
+ table.insert(footer, 2, lvim_version)
end
local text = require "lvim.interface.text"
diff --git a/lua/lvim/core/info.lua b/lua/lvim/core/info.lua
index fc87691e..df7b7061 100644
--- a/lua/lvim/core/info.lua
+++ b/lua/lvim/core/info.lua
@@ -20,6 +20,7 @@ end
local function make_formatters_info(ft)
local null_formatters = require "lvim.lsp.null-ls.formatters"
local registered_formatters = null_formatters.list_registered_providers(ft)
+ -- print("reg", vim.inspect(registered_formatters))
local supported_formatters = null_formatters.list_available(ft)
local section = {
"Formatters info",
@@ -34,6 +35,23 @@ local function make_formatters_info(ft)
return section
end
+local function make_code_actions_info(ft)
+ local null_actions = require "lvim.lsp.null-ls.code_actions"
+ local registered_actions = null_actions.list_registered_providers(ft)
+ local supported_actions = null_actions.list_available(ft)
+ local section = {
+ "Code actions info",
+ fmt(
+ "* Active: %s%s",
+ table.concat(registered_actions, "  , "),
+ vim.tbl_count(registered_actions) > 0 and "  " or ""
+ ),
+ fmt("* Supported: %s", str_list(supported_actions)),
+ }
+
+ return section
+end
+
local function make_linters_info(ft)
local null_linters = require "lvim.lsp.null-ls.linters"
local supported_linters = null_linters.list_available(ft)
@@ -120,6 +138,8 @@ function M.toggle_popup(ft)
local linters_info = make_linters_info(ft)
+ local code_actions_info = make_code_actions_info(ft)
+
local content_provider = function(popup)
local content = {}
@@ -136,6 +156,8 @@ function M.toggle_popup(ft)
formatters_info,
{ "" },
linters_info,
+ { "" },
+ code_actions_info,
} do
vim.list_extend(content, section)
end
@@ -150,6 +172,7 @@ function M.toggle_popup(ft)
vim.cmd [[let m=matchadd("LvimInfoHeader", "Language Server Protocol (LSP) info")]]
vim.cmd [[let m=matchadd("LvimInfoHeader", "Formatters info")]]
vim.cmd [[let m=matchadd("LvimInfoHeader", "Linters info")]]
+ vim.cmd [[let m=matchadd("LvimInfoHeader", "Code actions info")]]
vim.cmd('let m=matchadd("LvimInfoIdentifier", " ' .. ft .. '$")')
vim.cmd 'let m=matchadd("string", "true")'
vim.cmd 'let m=matchadd("string", "active")'
@@ -159,6 +182,7 @@ function M.toggle_popup(ft)
-- tbl_set_highlight(registered_providers, "LvimInfoIdentifier")
tbl_set_highlight(require("lvim.lsp.null-ls.formatters").list_available(ft), "LvimInfoIdentifier")
tbl_set_highlight(require("lvim.lsp.null-ls.linters").list_available(ft), "LvimInfoIdentifier")
+ tbl_set_highlight(require("lvim.lsp.null-ls.code_actions").list_available(ft), "LvimInfoIdentifier")
end
local Popup = require("lvim.interface.popup"):new {
diff --git a/lua/lvim/core/log.lua b/lua/lvim/core/log.lua
index 9950af28..f51b8af6 100644
--- a/lua/lvim/core/log.lua
+++ b/lua/lvim/core/log.lua
@@ -1,6 +1,6 @@
local Log = {}
-local logfile = string.format("%s/%s.log", vim.fn.stdpath "cache", "lvim")
+local logfile = string.format("%s/%s.log", get_cache_dir(), "lvim")
Log.levels = {
TRACE = 1,
diff --git a/lua/lvim/core/lualine/components.lua b/lua/lvim/core/lualine/components.lua
index 9366df56..9cf67616 100644
--- a/lua/lvim/core/lualine/components.lua
+++ b/lua/lvim/core/lualine/components.lua
@@ -65,7 +65,7 @@ return {
},
diagnostics = {
"diagnostics",
- sources = { "nvim_lsp" },
+ sources = { "nvim_diagnostic" },
symbols = { error = " ", warn = " ", info = " ", hint = " " },
color = {},
cond = conditions.hide_in_width,
@@ -112,9 +112,9 @@ return {
local supported_linters = linters.list_registered_providers(buf_ft)
vim.list_extend(buf_client_names, supported_linters)
- return table.concat(buf_client_names, ", ")
+ return "[" .. table.concat(buf_client_names, ", ") .. "]"
end,
- icon = " ",
+ -- icon = " ",
color = { gui = "bold" },
cond = conditions.hide_in_width,
},
diff --git a/lua/lvim/core/lualine/conditions.lua b/lua/lvim/core/lualine/conditions.lua
index 3ee4fbb8..6e120b26 100644
--- a/lua/lvim/core/lualine/conditions.lua
+++ b/lua/lvim/core/lualine/conditions.lua
@@ -1,4 +1,4 @@
-local window_width_limit = 80
+local window_width_limit = 70
local conditions = {
buffer_not_empty = function()
diff --git a/lua/lvim/core/nvimtree.lua b/lua/lvim/core/nvimtree.lua
index 893ddffc..cb91e344 100644
--- a/lua/lvim/core/nvimtree.lua
+++ b/lua/lvim/core/nvimtree.lua
@@ -6,12 +6,22 @@ function M.config()
active = true,
on_config_done = nil,
setup = {
+ disable_netrw = true,
+ hijack_netrw = true,
open_on_setup = false,
- auto_close = true,
- open_on_tab = false,
- update_focused_file = {
+ ignore_ft_on_setup = {
+ "startify",
+ "dashboard",
+ "alpha",
+ },
+ update_to_buf_dir = {
enable = true,
+ auto_open = true,
},
+ auto_close = true,
+ open_on_tab = false,
+ hijack_cursor = false,
+ update_cwd = false,
diagnostics = {
enable = true,
icons = {
@@ -21,14 +31,36 @@ function M.config()
error = "",
},
},
+ update_focused_file = {
+ enable = true,
+ update_cwd = true,
+ ignore_list = {},
+ },
+ system_open = {
+ cmd = nil,
+ args = {},
+ },
+ git = {
+ enable = true,
+ ignore = true,
+ timeout = 200,
+ },
view = {
width = 30,
+ height = 30,
side = "left",
auto_resize = true,
+ number = false,
+ relativenumber = false,
mappings = {
custom_only = false,
+ list = {},
},
},
+ filters = {
+ dotfiles = false,
+ custom = { ".git", "node_modules", ".cache" },
+ },
},
show_icons = {
git = 1,
@@ -37,13 +69,10 @@ function M.config()
folder_arrows = 1,
tree_width = 30,
},
- ignore = { ".git", "node_modules", ".cache" },
quit_on_open = 0,
- hide_dotfiles = 1,
git_hl = 1,
+ disable_window_picker = 0,
root_folder_modifier = ":t",
- allow_resize = 1,
- auto_ignore_ft = { "startify", "dashboard" },
icons = {
default = "",
symlink = "",
@@ -65,6 +94,7 @@ function M.config()
},
},
}
+ lvim.builtin.which_key.mappings["e"] = { "<cmd>NvimTreeToggle<CR>", "Explorer" }
end
function M.setup()
@@ -73,10 +103,9 @@ function M.setup()
Log:error "Failed to load nvim-tree.config"
return
end
- local g = vim.g
for opt, val in pairs(lvim.builtin.nvimtree) do
- g["nvim_tree_" .. opt] = val
+ vim.g["nvim_tree_" .. opt] = val
end
-- Implicitly update nvim-tree when project module is active
@@ -88,21 +117,21 @@ function M.setup()
vim.g.netrw_banner = false
end
+ -- Add useful keymaps
local tree_cb = nvim_tree_config.nvim_tree_callback
-
- if not lvim.builtin.nvimtree.setup.view.mappings.list then
+ if #lvim.builtin.nvimtree.setup.view.mappings.list == 0 then
lvim.builtin.nvimtree.setup.view.mappings.list = {
{ key = { "l", "<CR>", "o" }, cb = tree_cb "edit" },
{ key = "h", cb = tree_cb "close_node" },
{ key = "v", cb = tree_cb "vsplit" },
+ { key = "C", cb = tree_cb "cd" },
+ { key = "gtf", cb = "<cmd>lua require'lvim.core.nvimtree'.start_telescope('find_files')<cr>" },
+ { key = "gtg", cb = "<cmd>lua require'lvim.core.nvimtree'.start_telescope('live_grep')<cr>" },
}
end
- lvim.builtin.which_key.mappings["e"] = { "<cmd>NvimTreeToggle<CR>", "Explorer" }
-
- local tree_view = require "nvim-tree.view"
-
-- Add nvim_tree open callback
+ local tree_view = require "nvim-tree.view"
local open = tree_view.open
tree_view.open = function()
M.on_open()
@@ -138,4 +167,14 @@ function M.change_tree_dir(dir)
end
end
+function M.start_telescope(telescope_mode)
+ local node = require("nvim-tree.lib").get_node_at_cursor()
+ local abspath = node.link_to or node.absolute_path
+ local is_folder = node.open ~= nil
+ local basedir = is_folder and abspath or vim.fn.fnamemodify(abspath, ":h")
+ require("telescope.builtin")[telescope_mode] {
+ cwd = basedir,
+ }
+end
+
return M
diff --git a/lua/lvim/core/project.lua b/lua/lvim/core/project.lua
index e7527440..485137b7 100644
--- a/lua/lvim/core/project.lua
+++ b/lua/lvim/core/project.lua
@@ -18,7 +18,8 @@ function M.config()
--- **"pattern"** uses vim-rooter like glob pattern matching. Here
--- order matters: if one is not detected, the other is used as fallback. You
--- can also delete or rearangne the detection methods.
- detection_methods = { "lsp", "pattern" },
+ -- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project
+ detection_methods = { "pattern" },
---@usage patterns used to detect root dir, when **"pattern"** is in detection_methods
patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json" },
diff --git a/lua/lvim/core/telescope.lua b/lua/lvim/core/telescope.lua
index 147c056c..44aed88b 100644
--- a/lua/lvim/core/telescope.lua
+++ b/lua/lvim/core/telescope.lua
@@ -37,6 +37,7 @@ function M.config()
"--column",
"--smart-case",
"--hidden",
+ "--glob=!.git/",
},
mappings = {
i = {
diff --git a/lua/lvim/core/telescope/custom-finders.lua b/lua/lvim/core/telescope/custom-finders.lua
index c3347fd0..5ce1485c 100644
--- a/lua/lvim/core/telescope/custom-finders.lua
+++ b/lua/lvim/core/telescope/custom-finders.lua
@@ -39,12 +39,22 @@ function M.grep_lunarvim_files(opts)
builtin.live_grep(opts)
end
+local copy_to_clipboard_action = function(prompt_bufnr)
+ local _, action_state = pcall(require, "telescope.actions.state")
+ local entry = action_state.get_selected_entry()
+ local version = entry.value
+ vim.fn.setreg("+", version)
+ vim.fn.setreg('"', version)
+ vim.notify("Copied " .. version .. " to clipboard", vim.log.levels.INFO)
+ actions.close(prompt_bufnr)
+end
+
function M.view_lunarvim_changelog()
- local opts = {}
+ local opts = themes.get_ivy { cwd = get_lvim_base_dir() }
opts.entry_maker = make_entry.gen_from_git_commits(opts)
pickers.new(opts, {
- prompt_title = "LunarVim changelog",
+ prompt_title = "~ LunarVim Changelog ~",
finder = finders.new_oneshot_job(
vim.tbl_flatten {
@@ -52,22 +62,17 @@ function M.view_lunarvim_changelog()
"log",
"--pretty=oneline",
"--abbrev-commit",
- "--",
- ".",
},
opts
),
previewer = {
- previewers.git_commit_diff_to_parent.new(opts),
- previewers.git_commit_diff_to_head.new(opts),
previewers.git_commit_diff_as_was.new(opts),
- previewers.git_commit_message.new(opts),
},
--TODO: consider opening a diff view when pressing enter
attach_mappings = function(_, map)
- map("i", "<enter>", actions._close)
- map("n", "<enter>", actions._close)
+ map("i", "<enter>", copy_to_clipboard_action)
+ map("n", "<enter>", copy_to_clipboard_action)
map("i", "<esc>", actions._close)
map("n", "<esc>", actions._close)
map("n", "q", actions._close)
diff --git a/lua/lvim/core/terminal.lua b/lua/lvim/core/terminal.lua
index aa6989ec..c5d1ea04 100644
--- a/lua/lvim/core/terminal.lua
+++ b/lua/lvim/core/terminal.lua
@@ -40,53 +40,78 @@ M.config = function()
-- lvim.builtin.terminal.execs = {{}} to overwrite
-- lvim.builtin.terminal.execs[#lvim.builtin.terminal.execs+1] = {"gdb", "tg", "GNU Debugger"}
execs = {
- { "lazygit", "gg", "LazyGit" },
+ { "lazygit", "<leader>gg", "LazyGit", "float" },
+ { "lazygit", "<c-\\><c-g>", "LazyGit", "float" },
},
}
end
M.setup = function()
local terminal = require "toggleterm"
- for _, exec in pairs(lvim.builtin.terminal.execs) do
- require("lvim.core.terminal").add_exec(exec[1], exec[2], exec[3])
- end
terminal.setup(lvim.builtin.terminal)
- if lvim.builtin.terminal.on_config_done then
- lvim.builtin.terminal.on_config_done(terminal)
+ -- setup the default terminal so it's always reachable
+ local default_term_opts = {
+ cmd = lvim.builtin.terminal.shell,
+ keymap = lvim.builtin.terminal.open_mapping,
+ label = "Toggle terminal",
+ count = 1,
+ direction = lvim.builtin.terminal.direction,
+ size = lvim.builtin.terminal.size,
+ }
+ if lvim.builtin.terminal.open_mapping then
+ M.add_exec(default_term_opts)
end
-end
-M.add_exec = function(exec, keymap, name)
- vim.api.nvim_set_keymap(
- "n",
- "<leader>" .. keymap,
- "<cmd>lua require('lvim.core.terminal')._exec_toggle('" .. exec .. "')<CR>",
- { noremap = true, silent = true }
- )
- lvim.builtin.which_key.mappings[keymap] = name
-end
+ for i, exec in pairs(lvim.builtin.terminal.execs) do
+ local opts = {
+ cmd = exec[1],
+ keymap = exec[2],
+ label = exec[3],
+ count = i + 1,
+ direction = exec[4] or lvim.builtin.terminal.direction,
+ size = lvim.builtin.terminal.size,
+ }
-M._split = function(inputstr, sep)
- if sep == nil then
- sep = "%s"
+ M.add_exec(opts)
end
- local t = {}
- for str in string.gmatch(inputstr, "([^" .. sep .. "]+)") do
- table.insert(t, str)
+
+ if lvim.builtin.terminal.on_config_done then
+ lvim.builtin.terminal.on_config_done(terminal)
end
- return t
end
-M._exec_toggle = function(exec)
- local binary = M._split(exec)[1]
+M.add_exec = function(opts)
+ local binary = opts.cmd:match "(%S+)"
if vim.fn.executable(binary) ~= 1 then
- Log:error("Unable to run executable " .. binary .. ". Please make sure it is installed properly.")
+ Log:debug("Skipping configuring executable " .. binary .. ". Please make sure it is installed properly.")
return
end
+
+ local exec_func = string.format(
+ "<cmd>lua require('lvim.core.terminal')._exec_toggle({ cmd = '%s', count = %d, direction = '%s'})<CR>",
+ opts.cmd,
+ opts.count,
+ opts.direction
+ )
+
+ require("lvim.keymappings").load {
+ normal_mode = { [opts.keymap] = exec_func },
+ term_mode = { [opts.keymap] = exec_func },
+ }
+
+ local wk_status_ok, wk = pcall(require, "whichkey")
+ if not wk_status_ok then
+ return
+ end
+ wk.register({ [opts.keymap] = { opts.label } }, { mode = "n" })
+ wk.register({ [opts.keymap] = { opts.label } }, { mode = "t" })
+end
+
+M._exec_toggle = function(opts)
local Terminal = require("toggleterm.terminal").Terminal
- local exec_term = Terminal:new { cmd = exec, hidden = true }
- exec_term:toggle()
+ local term = Terminal:new { cmd = opts.cmd, count = opts.count, direction = opts.direction }
+ term:toggle(lvim.builtin.terminal.size, opts.direction)
end
---Toggles a log viewer according to log.viewer.layout_config
diff --git a/lua/lvim/core/which-key.lua b/lua/lvim/core/which-key.lua
index 254f2ec2..88af028f 100644
--- a/lua/lvim/core/which-key.lua
+++ b/lua/lvim/core/which-key.lua
@@ -61,7 +61,7 @@ M.config = function()
-- NOTE: Prefer using : over <cmd> as the latter avoids going back in normal-mode.
-- see https://neovim.io/doc/user/map.html#:map-cmd
vmappings = {
- ["/"] = { "<ESC><CMD>lua ___comment_gc(vim.fn.visualmode())<CR>", "Comment" },
+ ["/"] = { "<ESC><CMD>lua require('Comment.api').gc(vim.fn.visualmode())<CR>", "Comment" },
},
mappings = {
["w"] = { "<cmd>w!<CR>", "Save" },
@@ -188,7 +188,7 @@ M.config = function()
"<cmd>lua require('lvim.core.telescope.custom-finders').grep_lunarvim_files()<cr>",
"Grep LunarVim files",
},
- k = { "<cmd>lua require('lvim.keymappings').print()<cr>", "View LunarVim's default keymappings" },
+ k = { "<cmd>Telescope keymaps<cr>", "View LunarVim's keymappings" },
i = {
"<cmd>lua require('lvim.core.info').toggle_popup(vim.bo.filetype)<cr>",
"Toggle LunarVim Info",