---Types: -- -- Passed to callbacks that handle opening files ---@alias BufInfo { fname: string, bufnr: buffer } -- -- Needed aliases ---@alias buffer integer: Buffer id ---@alias window integer: Window id -- -- The first argument is a list of BufInfo tables representing the newly opened files. -- The third argument is a single BufInfo table, only provided when a buffer is created from stdin. -- -- IMPORTANT: For `block_for` to work, you need to return a buffer number OR a buffer number and a window number. -- The `winnr` return value is not required, `vim.fn.bufwinid(bufnr)` is used if it is not provided. -- The `filetype` of this buffer will determine whether block should happen or not. -- ---@alias OpenHandler fun(files: BufInfo[], argv: string[], stdin_buf: BufInfo, guest_cwd: string):window, buffer -- require("flatten").setup({ callbacks = { ---Called to determine if a nested session should wait for the host to close the file. ---param argv: a list of all the arguments in the nested session ---@type fun(argv: table): boolean should_block = require("flatten").default_should_block, ---If this returns true, the nested session will be opened. ---If false, default behavior is used, and ---config.nest_if_no_args is respected. ---@type fun(host: channel):boolean should_nest = require("flatten").default_should_nest, ---Called before a nested session is opened. pre_open = function() end, ---Called after a nested session is opened. ---@param bufnr buffer ---@param winnr window ---@param filetype string ---@param is_blocking boolean ---@param is_diff boolean post_open = function(bufnr, winnr, filetype, is_blocking, is_diff) -- If the file is a git commit, create one-shot autocmd to delete its buffer on write if filetype == "gitcommit" or filetype == "gitrebase" then vim.api.nvim_create_autocmd("BufWritePost", { buffer = bufnr, once = true, callback = vim.schedule_wrap(function() vim.api.nvim_buf_delete(bufnr, {}) end), }) end end, ---Called when a nested session is done waiting for the host. ---@param filetype string block_end = function(filetype) end, }, -- dictionary of filetypes that should be blocking block_for = { gitcommit = true, }, -- Command passthrough allow_cmd_passthrough = true, -- Allow a nested session to open if Neovim is opened without arguments nest_if_no_args = false, -- Window options window = { -- Options: -- current -> open in current window (default) -- alternate -> open in alternate window (recommended) -- tab -> open in new tab -- split -> open in split -- vsplit -> open in vsplit -- smart -> smart open (avoids special buffers) -- OpenHandler -> allows you to handle file opening yourself (see Types) -- -- TODO: Open gitcommit filetypes in the current buffer, everything else in a new tab <2023-08-29> open = "split", -- Options: -- vsplit -> opens files in diff vsplits -- split -> opens files in diff splits -- tab_vsplit -> creates a new tabpage, and opens diff vsplits -- tab_split -> creates a new tabpage, and opens diff splits -- OpenHandler -> allows you to handle file opening yourself (see Types) diff = "tab_vsplit", -- Affects which file gets focused when opening multiple at once -- Options: -- "first" -> open first file of new files (default) -- "last" -> open last file of new files focus = "first", }, -- Override this function to use a different socket to connect to the host -- On the host side this can return nil or the socket address. -- On the guest side this should return the socket address -- or a non-zero channel id from `sockconnect` -- flatten.nvim will detect if the address refers to this instance of nvim, to determine if this is a host or a guest pipe_path = require("flatten").default_pipe_path, -- The `default_pipe_path` will treat the first nvim instance within a single kitty/wezterm session as the host -- You can configure this behaviour using the following: one_per = { kitty = true, -- Flatten all instance in the current Kitty session wezterm = true, -- Flatten all instance in the current Wezterm session }, })