diff --git a/init.lua b/init.lua deleted file mode 100644 index b93939f..0000000 --- a/init.lua +++ /dev/null @@ -1,130 +0,0 @@ -local popup = require'plenary.popup' -local utils = require'presser.utils' - -local api = vim.api - -local presser = {} -- list of functions to be exported -local g = vim.g - -g.presser_buf_ctx = {} -- setup a new global context manager for windows/buffers - --- :@Dev: close all Presser windows that may be open for all contexts -presser.close = function () - for _type, ctx in pairs( g.presser_buf_ctx ) do - for _, win_id in pairs( ctx ) do - api.nvim_win_close( win_id, true ) -- buffer contents are irrelevant in this context to save - end - end - - g.presser_buf_ctx = {} -- clear the global context manager -end - --- @Description: Construct a new instance of a window and buffer using the 'plenary.popup' module. --- @Params: --- + `_type` ~ string denoting which context manager is owner of the window. --- + `placeholder` ~ string allowing for placeholder text to be placed within the buffer when constructed. --- + `opts` ~ a table of additional options to be provided when constructing the window. --- @Returns: nil. Constructs a new window and stores the window's ID in a global table. --- --- @Dev: This function is to be as generic for creating a window whilst allowing for as much customisation over the --- window/buffer which are to be constructed. Users are to access this function so is not part of the module export. --- However, it's used by all internal built-ins which are meant to be used by users. Consider a class constructor in --- C++, this function is akin to that behaviour and is responsible for constructing the window/buffer and ensuring it --- can be tracked by Vim itself. -local new = function ( _type, placeholder, opts ) - -- create new manager for handling windows in the - local manager = g.presser_buf_ctx - -- create specific context manager if it doesn't exist - if not manager[_type] then - manager[_type] = {} - g.presser_buf_ctx = manager - end - - local opts = opts or {} - local placeholder = placeholder or "" - - local buf_opts = { - minwidth = 80, -- getwin_w() / 2 - ((getwin_w() % 2) / 2), - borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, - } - - if opts.window then - for k,v in pairs( opts.window ) do - buf_opts[k] = v - end - end - - local obj = popup.create( placeholder, buf_opts ) - table.insert( manager[_type], obj ) - g.presser_buf_ctx = manager - - -- :@Dev: handle for keybindings (TODO: any future stuff below here once window is made) - local buf_id = function () - return api.nvim_win_get_buf(obj) - end - - -- handle for key bindings - if opts.keybinds then - for mode, mode_map in pairs( opts.keybinds ) do - mode = string.lower(mode) - - for key_bind, key_action in pairs(mode_map) do - local key_bind = api.nvim_replace_termcodes(key_bind, true, false, true), - api.nvim_buf_set_keymap(buf_id(), mode, key_bind, key_action, - { noremap = true, silent = true } - ) - end - end - end -end - --- @Description: Find and replace words within the current buffer. --- @Params: --- @Returns: nil. --- --- @Dev: function is responsible to creating all required buffers to allow full user interaction. --- --- @Future: implementation may allow for greater user customisation similar to what's found with --- extensions such as Telescope. For now, it should provide a concrete UI for purpose of design. -function presser.find_replace() - -- define the context which these windows will belong to in the context manager. - local ctx = "find_replace" - - local keymap = { - n = { - [""] = "lua require'presser'.close()", - }, - } - - -- options for the title buffer of the built-in - local opts = { - window = { - line = 12, - border = false, - minwidth = 82, - padding = { 0, 1, 1, 1 } - }, - keybinds = keymap, - } - local tab_title = new( ctx, "Find & Replace", opts ) - - -- options for the replace buffer - local opts = { - window = { - line = 18, - title = "Replace", - }, - keybinds = keymap, - } - local replace = new( ctx, nil, opts ) - - -- modify options for find buffer - opts["window"]["line"] = 15 - opts["window"]["title"] = "Find" - local find = new ( ctx, nil, opts ) - - api.nvim_feedkeys('A', 'n', false) -end - - -return presser diff --git a/utils.lua b/utils.lua deleted file mode 100644 index 98573fc..0000000 --- a/utils.lua +++ /dev/null @@ -1,40 +0,0 @@ -local M = {} - -M.iter_table_dump = function ( arr ) - for k, v in pairs(arr) do - print("Table:", k, v) - end -end - -local escape_chars = function ( text ) - return string.gsub(text, "[%(|%)|\\|%[|%]|%-|%{%}|%?|%+|%*|%^|%$|%.]", { - ["\\"] = "\\\\", - ["-"] = "\\-", - ["("] = "\\(", - [")"] = "\\)", - ["["] = "\\[", - ["]"] = "\\]", - ["{"] = "\\{", - ["}"] = "\\}", - ["?"] = "\\?", - ["+"] = "\\+", - ["*"] = "\\*", - ["^"] = "\\^", - ["$"] = "\\$", - ["."] = "\\.", - }) -end - --- :@dev: clean the text once it has been fetched from buffer -M.clean_buf = function ( text ) - if not type(text) == "string" or text == nil then - print("[DEBUG - clean_buf] Given input is not of type string.") - return - end - - return escape_chars( text ) - :match( "^%s*(.-)%s*$" ) -end - - -return M