diff --git a/doc/canola.txt b/doc/canola.txt index bd302f0..d716997 100644 --- a/doc/canola.txt +++ b/doc/canola.txt @@ -479,6 +479,21 @@ close({opts}) *canola.c {exit_if_last_buf} `nil|boolean` Exit vim if this canola buffer is the last open buffer +toggle({dir}, {opts}, {cb}) *canola.toggle* + Open canola browser for a directory, or close it if already open + + Parameters: + {dir} `nil|string` When nil, open the parent of the current buffer, or + the cwd if current buffer is not a file + {opts} `nil|canola.OpenOpts` + {preview} `nil|canola.OpenPreviewOpts` When present, open the preview + window after opening canola + {vertical} `nil|boolean` Open the buffer in a vertical split + {horizontal} `nil|boolean` Open the buffer in a horizontal split + {split} `nil|"aboveleft"|"belowright"|"topleft"|"botright"` S + plit modifier + {cb} `nil|fun()` Called after the canola buffer is ready + open_preview({opts}, {callback}) *canola.open_preview* Preview the entry under the cursor in a split diff --git a/lua/canola/init.lua b/lua/canola/init.lua index 18d9896..e556920 100644 --- a/lua/canola/init.lua +++ b/lua/canola/init.lua @@ -526,6 +526,20 @@ M.close = function(opts) vim.api.nvim_buf_delete(canolabuf, { force = true }) end +---@param dir? string +---@param opts? canola.OpenOpts +---@param cb? fun() +M.toggle = function(dir, opts, cb) + if vim.w.is_canola_win or vim.bo.filetype == 'canola' then + M.close() + if cb then + cb() + end + else + M.open(dir, opts, cb) + end +end + ---@class canola.OpenPreviewOpts ---@field vertical? boolean Open the buffer in a vertical split ---@field horizontal? boolean Open the buffer in a horizontal split