1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
---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,
},
-- <String, Bool> 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
},
})
|