diff options
Diffstat (limited to 'lua/lvim/core')
| -rw-r--r-- | lua/lvim/core/autocmds.lua | 62 | ||||
| -rw-r--r-- | lua/lvim/core/autopairs.lua | 45 | ||||
| -rw-r--r-- | lua/lvim/core/bufferline.lua | 8 | ||||
| -rw-r--r-- | lua/lvim/core/cmp.lua | 3 | ||||
| -rw-r--r-- | lua/lvim/core/commands.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/core/dashboard.lua | 5 | ||||
| -rw-r--r-- | lua/lvim/core/info.lua | 24 | ||||
| -rw-r--r-- | lua/lvim/core/log.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/core/lualine/components.lua | 6 | ||||
| -rw-r--r-- | lua/lvim/core/lualine/conditions.lua | 2 | ||||
| -rw-r--r-- | lua/lvim/core/nvimtree.lua | 69 | ||||
| -rw-r--r-- | lua/lvim/core/project.lua | 3 | ||||
| -rw-r--r-- | lua/lvim/core/telescope.lua | 1 | ||||
| -rw-r--r-- | lua/lvim/core/telescope/custom-finders.lua | 23 | ||||
| -rw-r--r-- | lua/lvim/core/terminal.lua | 81 | ||||
| -rw-r--r-- | lua/lvim/core/which-key.lua | 4 | 
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", | 
