diff --git a/README.md b/README.md index b53e606..f0c0615 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,11 @@ require("text-transform").setup({ --- Sort the replacers in the popup. --- Possible values: 'frequency', 'name' - sort_by = 'frequency', + sort_by = "frequency", + + --- The popup type to show. + --- Possible values: 'telescope', 'select' + popup_type = 'telescope' }) ``` diff --git a/doc/tags b/doc/tags index d4cf483..5635953 100644 --- a/doc/tags +++ b/doc/tags @@ -2,13 +2,13 @@ TextTransform.enable() text-transform.txt /*TextTransform.enable()* TextTransform.get_visual_selection_details() text-transform.txt /*TextTransform.get_visual_selection_details()* TextTransform.init_commands() text-transform.txt /*TextTransform.init_commands()* TextTransform.options text-transform.txt /*TextTransform.options* -TextTransform.popup() text-transform.txt /*TextTransform.popup()* TextTransform.replace_columns() text-transform.txt /*TextTransform.replace_columns()* TextTransform.replace_selection() text-transform.txt /*TextTransform.replace_selection()* TextTransform.replace_word() text-transform.txt /*TextTransform.replace_word()* TextTransform.restore_positions() text-transform.txt /*TextTransform.restore_positions()* TextTransform.save_positions() text-transform.txt /*TextTransform.save_positions()* TextTransform.setup() text-transform.txt /*TextTransform.setup()* +TextTransform.telescope_popup() text-transform.txt /*TextTransform.telescope_popup()* TextTransform.to_camel_case() text-transform.txt /*TextTransform.to_camel_case()* TextTransform.to_const_case() text-transform.txt /*TextTransform.to_const_case()* TextTransform.to_dot_case() text-transform.txt /*TextTransform.to_dot_case()* diff --git a/doc/text-transform.txt b/doc/text-transform.txt index fff52dd..96244d5 100644 --- a/doc/text-transform.txt +++ b/doc/text-transform.txt @@ -46,6 +46,10 @@ Default values: --- Sort the replacers in the popup. --- Possible values: 'frequency', 'name' sort_by = "frequency", + + --- The popup type to show. + --- Possible values: 'telescope', 'select' + popup_type = "telescope", } local function init() @@ -56,10 +60,10 @@ Default values: if o.keymap.telescope_popup then local keys = o.keymap.telescope_popup if keys.n then - vim.keymap.set("n", keys.n, telescope.popup, { silent = true }) + vim.keymap.set("n", keys.n, popup.show_popup, { silent = true, desc = "Change Case" }) end if keys.v then - vim.keymap.set("v", keys.v, telescope.popup, { silent = true }) + vim.keymap.set("v", keys.v, popup.show_popup, { silent = true, desc = "Change Case" }) end end end @@ -78,6 +82,18 @@ Usage ~ `require("text-transform").setup()` (add `{}` with your |TextTransform.options| table) +============================================================================== +------------------------------------------------------------------------------ + *TextTransform.telescope_popup()* + `TextTransform.telescope_popup`() +Pops up a telescope menu, containing the available case transformers. +When a transformer is selected, the cursor position/range/columns will be used to replace the +words around the cursor or inside the selection. + +The cursor positions/ranges are saved before opening the menu and restored once a selection is +made. + + ============================================================================== ------------------------------------------------------------------------------ *find_word_boundaries()* @@ -148,18 +164,6 @@ Restore the cursor position, mode, and visual selection ranges saved using `save or a given modified state, if passed as the first argument -============================================================================== ------------------------------------------------------------------------------- - *TextTransform.popup()* - `TextTransform.popup`() -Pops up a telescope menu, containing the available case transformers. -When a transformer is selected, the cursor position/range/columns will be used to replace the -words around the cursor or inside the selection. - -The cursor positions/ranges are saved before opening the menu and restored once a selection is -made. - - ============================================================================== ------------------------------------------------------------------------------ *TextTransform.to_words()* diff --git a/lua/text-transform/commands.lua b/lua/text-transform/commands.lua index bb9c8e9..260d73a 100644 --- a/lua/text-transform/commands.lua +++ b/lua/text-transform/commands.lua @@ -1,6 +1,6 @@ local state = require("text-transform.state") local replacers = require("text-transform.replacers") -local telescope = require("text-transform.telescope") +local popup = require("text-transform.popup") local TextTransform = {} --- Initializes user commands @@ -23,8 +23,12 @@ function TextTransform.init_commands() end, {}) end - vim.api.nvim_create_user_command("TtTelescope", telescope.popup, {}) - vim.api.nvim_create_user_command("TextTransform", telescope.popup, {}) + -- specific popups + vim.api.nvim_create_user_command("TtTelescope", popup.telescope_popup, {}) + vim.api.nvim_create_user_command("TtSelect", popup.select_popup, {}) + + -- auto popup by config + vim.api.nvim_create_user_command("TextTransform", popup.show_popup, {}) end return TextTransform diff --git a/lua/text-transform/config.lua b/lua/text-transform/config.lua index 97487a4..2fcf87c 100644 --- a/lua/text-transform/config.lua +++ b/lua/text-transform/config.lua @@ -1,4 +1,4 @@ -local telescope = require("text-transform.telescope") +local popup = require("text-transform.popup") local commands = require("text-transform.commands") local D = require("text-transform.util.debug") local utils = require("text-transform.util") @@ -40,6 +40,10 @@ TextTransform.options = { --- Sort the replacers in the popup. --- Possible values: 'frequency', 'name' sort_by = "frequency", + + --- The popup type to show. + --- Possible values: 'telescope', 'select' + popup_type = "telescope", } local function init() @@ -50,10 +54,10 @@ local function init() if o.keymap.telescope_popup then local keys = o.keymap.telescope_popup if keys.n then - vim.keymap.set("n", keys.n, telescope.popup, { silent = true }) + vim.keymap.set("n", keys.n, popup.show_popup, { silent = true, desc = "Change Case" }) end if keys.v then - vim.keymap.set("v", keys.v, telescope.popup, { silent = true }) + vim.keymap.set("v", keys.v, popup.show_popup, { silent = true, desc = "Change Case" }) end end end diff --git a/lua/text-transform/main.lua b/lua/text-transform/main.lua index 3efc1c2..034c183 100644 --- a/lua/text-transform/main.lua +++ b/lua/text-transform/main.lua @@ -2,7 +2,7 @@ local utils = require("text-transform.util") local tt = require("text-transform.transformers") local replacers = require("text-transform.replacers") local state = require("text-transform.state") -local telescope = require("text-transform.telescope") +local popup = require("text-transform.popup") local TextTransform = {} @@ -13,6 +13,6 @@ end merge(tt) merge(replacers) merge(state) -merge(telescope) +merge(popup) return TextTransform diff --git a/lua/text-transform/telescope.lua b/lua/text-transform/popup.lua similarity index 87% rename from lua/text-transform/telescope.lua rename to lua/text-transform/popup.lua index 31963bf..1cc880e 100644 --- a/lua/text-transform/telescope.lua +++ b/lua/text-transform/popup.lua @@ -112,13 +112,20 @@ local sorter_map = { -- ) -- end +local function select(selection) + vim.schedule(function() + replacers.replace_selection(selection.value) + state.restore_positions() + end) +end + --- Pops up a telescope menu, containing the available case transformers. --- When a transformer is selected, the cursor position/range/columns will be used to replace the --- words around the cursor or inside the selection. --- --- The cursor positions/ranges are saved before opening the menu and restored once a selection is --- made. -function TextTransform.popup() +function TextTransform.telescope_popup() state.save_positions() local filtered = {} @@ -149,10 +156,7 @@ function TextTransform.popup() local selection = action_state.get_selected_entry() inc_frequency(selection.value) actions.close(prompt_bufnr) - vim.schedule(function() - replacers.replace_selection(selection.value) - state.restore_positions() - end) + select(selection) end) return true end, @@ -162,4 +166,30 @@ function TextTransform.popup() end) end +function TextTransform.select_popup() + state.save_positions() + + vim.ui.select(items, { + prompt = "Change Case", + format_item = function(item) + return item.label + end, + }, function(choice) + if not choice then + return + end + local item = entry_maker(choice) + select(item) + end) +end + +function TextTransform.show_popup() + local config = _G.TextTransform.config + if config.popup_type == "telescope" then + TextTransform.telescope_popup() + else + TextTransform.select_popup() + end +end + return TextTransform