From a6df4d7e28b824fb3ce1e7cd1fcce3231a5afbc9 Mon Sep 17 00:00:00 2001 From: Mika Vilpas Date: Thu, 23 May 2024 22:12:09 +0300 Subject: [PATCH] feat: make it easier to create custom keymappings in the user config --- lua/yazi/keybinding_helpers.lua | 61 ++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/lua/yazi/keybinding_helpers.lua b/lua/yazi/keybinding_helpers.lua index 865ed26b..6bed81aa 100644 --- a/lua/yazi/keybinding_helpers.lua +++ b/lua/yazi/keybinding_helpers.lua @@ -7,46 +7,51 @@ local YaziOpenerActions = {} ---@param config YaziConfig function YaziOpenerActions.open_file_in_vertical_split(config) - config.open_file_function = openers.open_file_in_vertical_split - config.hooks.yazi_opened_multiple_files = function( - chosen_files, - _config, - state - ) - for _, chosen_file in ipairs(chosen_files) do - config.open_file_function(chosen_file, config, state) - end - end - YaziOpenerActions.select_current_file_and_close_yazi() + YaziOpenerActions.select_current_file_and_close_yazi(config, { + on_file_opened = openers.open_file_in_vertical_split, + }) end ---@param config YaziConfig function YaziOpenerActions.open_file_in_horizontal_split(config) - config.open_file_function = openers.open_file_in_horizontal_split - config.hooks.yazi_opened_multiple_files = function(chosen_files) - for _, chosen_file in ipairs(chosen_files) do - config.open_file_function(chosen_file, config) - end - end - YaziOpenerActions.select_current_file_and_close_yazi() + YaziOpenerActions.select_current_file_and_close_yazi(config, { + on_file_opened = openers.open_file_in_horizontal_split, + }) end ---@param config YaziConfig function YaziOpenerActions.open_file_in_tab(config) - config.open_file_function = openers.open_file_in_tab - config.hooks.yazi_opened_multiple_files = function(chosen_files) - for _, chosen_file in ipairs(chosen_files) do - config.open_file_function(chosen_file, config) - end - end - YaziOpenerActions.select_current_file_and_close_yazi() + YaziOpenerActions.select_current_file_and_close_yazi(config, { + on_file_opened = openers.open_file_in_tab, + }) end +-- +-- +-- +-- +---@class YaziOpenerActionsCallbacks +---@field on_file_opened fun(chosen_file: string, config: YaziConfig, state: YaziClosedState):nil +---@field on_multiple_files_opened? fun(chosen_files: string[], config: YaziConfig, state: YaziClosedState):nil + -- This is a utility function that can be used in the set_keymappings_function -- You can also use it in your own keymappings function -function YaziOpenerActions.select_current_file_and_close_yazi() - -- select the current file in yazi and close it (enter is the default - -- keybinding for selecting a file) +---@param config YaziConfig +---@param callbacks YaziOpenerActionsCallbacks +function YaziOpenerActions.select_current_file_and_close_yazi(config, callbacks) + config.open_file_function = callbacks.on_file_opened + + if callbacks.on_multiple_files_opened == nil then + ---@diagnostic disable-next-line: redefined-local + callbacks.on_multiple_files_opened = function(chosen_files, config, state) + for _, chosen_file in ipairs(chosen_files) do + config.open_file_function(chosen_file, config, state) + end + end + end + + config.hooks.yazi_opened_multiple_files = callbacks.on_multiple_files_opened + vim.api.nvim_feedkeys( vim.api.nvim_replace_termcodes('', true, false, true), 'n',