diff --git a/lua/ivy/prompt.lua b/lua/ivy/prompt.lua index 264cc1b..f867d2e 100644 --- a/lua/ivy/prompt.lua +++ b/lua/ivy/prompt.lua @@ -3,18 +3,39 @@ local prompt_prefix = ">> " local prompt = {} +prompt.suffix = "" prompt.value = "" prompt.text = function() - return prompt.value + return prompt.value .. prompt.suffix end prompt.update = function() - vim.notify(prompt_prefix .. prompt.text()) + vim.api.nvim_echo({ + { prompt_prefix, "None" }, + { prompt.value:sub(1, -2), "None" }, + { prompt.value:sub(-1, -1), "Underlined" }, + { prompt.suffix, "None" }, + }, false, {}) end prompt.input = function(char) if char == "BACKSPACE" then prompt.value = string.sub(prompt.value, 0, -2) + elseif char == "LEFT" then + if #prompt.value > 0 then + prompt.suffix = prompt.value:sub(-1, -1) .. prompt.suffix + prompt.value = prompt.value:sub(1, -2) + end + elseif char == "RIGHT" then + if #prompt.suffix > 0 then + prompt.value = prompt.value .. prompt.suffix:sub(1, 1) + prompt.suffix = prompt.suffix:sub(2, -1) + end + elseif char == "DELETE_WORD" then + prompt.value = prompt.value:match "(.*)%s+.*$" + if prompt.value == nil then + prompt.value = "" + end elseif char == "\\\\" then prompt.value = prompt.value .. "\\" else @@ -26,11 +47,13 @@ end prompt.set = function(value) prompt.value = value + prompt.suffix = "" prompt.update() end prompt.destroy = function() prompt.value = "" + prompt.suffix = "" vim.notify "" end diff --git a/lua/ivy/window.lua b/lua/ivy/window.lua index 7b14308..ee2f23d 100644 --- a/lua/ivy/window.lua +++ b/lua/ivy/window.lua @@ -72,7 +72,7 @@ window.make_buffer = function() end vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.destroy()", opts) - vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.search('')", opts) + vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.search('')", opts) vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.next()", opts) vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.previous()", opts) vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.next(); vim.ivy.checkpoint()", opts) @@ -85,6 +85,9 @@ window.make_buffer = function() ) vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.complete()", opts) vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.input('BACKSPACE')", opts) + vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.input('LEFT')", opts) + vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.input('RIGHT')", opts) + vim.api.nvim_buf_set_keymap(window.buffer, "n", "", "lua vim.ivy.input('DELETE_WORD')", opts) end window.get_current_selection = function()