snacks.nvim/docs/terminal.md
2024-11-06 10:56:23 +01:00

1.7 KiB

🍿 terminal

⚙️ Config

---@class snacks.terminal.Config
---@field cwd? string
---@field env? table<string, string>
---@field win? snacks.win.Config
---@field interactive? boolean
---@field override? fun(cmd?: string|string[], opts?: snacks.terminal.Config) Use this to use a different terminal implementation
{
  win = { style = "terminal" },
}

🎨 Styles

terminal

{
  bo = {
    filetype = "snacks_terminal",
  },
  wo = {},
  keys = {
    gf = function(self)
      local f = vim.fn.findfile(vim.fn.expand("<cfile>"))
      if f == "" then
        Snacks.notify.warn("No file under cursor")
      else
        self:close()
        vim.cmd("e " .. f)
      end
    end,
    term_normal = {
      "<esc>",
      function(self)
        self.esc_timer = self.esc_timer or (vim.uv or vim.loop).new_timer()
        if self.esc_timer:is_active() then
          self.esc_timer:stop()
          vim.cmd("stopinsert")
        else
          self.esc_timer:start(200, 0, function() end)
          return "<esc>"
        end
      end,
      mode = "t",
      expr = true,
      desc = "Double escape to normal mode",
    },
  },
}

📦 Module

---@class snacks.terminal: snacks.win
---@field cmd? string | string[]
---@field opts snacks.terminal.Config
Snacks.terminal = {}

Snacks.terminal()

---@type fun(cmd?: string|string[], opts?: snacks.terminal.Config): snacks.terminal
Snacks.terminal()

Snacks.terminal.open()

---@param cmd? string | string[]
---@param opts? snacks.terminal.Config
Snacks.terminal.open(cmd, opts)

Snacks.terminal.toggle()

---@param cmd? string | string[]
---@param opts? snacks.terminal.Config
Snacks.terminal.toggle(cmd, opts)