From e406288adc8a70197730569c4da3e8c61d24e47d Mon Sep 17 00:00:00 2001 From: Marc Coquand Date: Fri, 19 May 2023 14:25:31 -0500 Subject: Initial version --- lua/buffer-browser.lua | 94 -------------------------------------------------- 1 file changed, 94 deletions(-) delete mode 100644 lua/buffer-browser.lua (limited to 'lua/buffer-browser.lua') diff --git a/lua/buffer-browser.lua b/lua/buffer-browser.lua deleted file mode 100644 index c6a41a8..0000000 --- a/lua/buffer-browser.lua +++ /dev/null @@ -1,94 +0,0 @@ --- BUFFER BROWSER --- Author: Marc Coquand --- See readme for explanation on what it does. --- This code contains examples that can be used to test the code. --- Run them in `lua %` --- or with a code runner, like sniprun. -local api = vim.api - -local function StateAppend(bufName, state, filters) - -- State has three fields, current = current buffer, previous = previous buffer, and future = future buffers - -- This function clears the future, and appends the current to the previous, and sets the current to the next - - -- If filters matches the bufName, skip the buffer - if filters ~= nil then - for _, filter in ipairs(filters) do - if string.match(bufName, filter) then - return state - end - end - end - - -- Clear the future - state.future = {} - -- Append the current to the previous - table.insert(state.previous, state.current) - -- Set the current to the next - state.current = bufName - - return state -end --- Test StateAppend --- local state = { current = 1, previous = { 2, 3 }, future = { 4, 5 } } --- print(StateAppend(6, state, {})['current']) --- -- > 6 --- state = { current = 1, previous = { 2, 3 }, future = { 4, 5 } } --- print(StateAppend(6, state, {})['previous'][1]) --- -- > 2 --- state = { current = 1, previous = { 2, 3 }, future = { 4, 5 } } --- print(StateAppend(6, state, { 6 })['current']) --- -- > 1 - -local function StateGoBack(state) - -- Go back in the state by setting current to the first element of previous, and appending the current to the future - -- Check if past is empty, if so return state as is - if #state.previous == 0 then - return state - end - - table.insert(state.future, state.current) - state.current = table.remove(state.previous, 1) - return state -end --- Test StateGoBack --- local state = { current = 1, previous = { 2, 3 }, future = { 4, 5 } } --- print(StateGoBack(StateGoBack(StateGoBack(state)))['current']) --- > 3 - -local function StateGoForward(state) - -- Go forward in the state by setting current to the first element of future, and appending the current to the previous - - -- Check if future is empty, if so return state as is - if #state.future == 0 then - return state - end - - table.insert(state.previous, state.current) - state.current = table.remove(state.future, 1) - - return state -end --- Test StateGoForward --- local state = { current = 1, previous = { 2, 3 }, future = { 4, 5 } } --- print(StateGoForward(StateGoForward(StateGoForward(state)))['current']) --- > 5 - -function BufferEnter() - local bufName = api.nvim_buf_get_name(0) - local state = vim.g.buffer_browser_state - local filters = vim.g.buffer_browser_filters - vim.g.buffer_browser_state = StateAppend(bufName, state, filters) -end - -local BufferBrowserGroup = api.nvim_create_augroup('BufferBrowser') - -api.nvim_create_autocmd('WinEnter', { - '*', - 'lua BufferEnter()', - { group = BufferBrowserGroup } -}) -api.nvim_create_autocmd('BufEnter', { - '*', - 'lua BufferEnter()', - { group = BufferBrowserGroup } -}) -- cgit v1.2.3