From af6a952cd84244b21f9241e8b3af052e87d08a68 Mon Sep 17 00:00:00 2001 From: femkrotek Date: Thu, 16 Jul 2026 15:20:34 +0200 Subject: [PATCH] feat: add buffer system --- lua/chai/autocmds.lua | 55 ++++++++++++++++++++++++++++++++++++++ lua/chai/buffers.lua | 56 +++++++++++++++++++++++++++++++++++++++ lua/chai/buffers/test.lua | 14 ++++++++++ lua/chai/init.lua | 5 ++++ 4 files changed, 130 insertions(+) create mode 100644 lua/chai/autocmds.lua create mode 100644 lua/chai/buffers.lua create mode 100644 lua/chai/buffers/test.lua diff --git a/lua/chai/autocmds.lua b/lua/chai/autocmds.lua new file mode 100644 index 0000000..a508f00 --- /dev/null +++ b/lua/chai/autocmds.lua @@ -0,0 +1,55 @@ +local M = {} + +local group = vim.api.nvim_create_augroup('ChaiAutocmds', { clear = true }) + +local buffers = require('chai.buffers') + +local function buffer_handling_init() + local create_autocmd = vim.api.nvim_create_autocmd + + create_autocmd('BufEnter', { + group = 'ChaiAutocmds', + pattern = { 'chai://*' }, + callback = function (args) + buffers.on_enter(args.buf) + end + }) + + create_autocmd({ 'BufDelete' }, { + group = 'ChaiAutocmds', + pattern = { 'chai://*' }, + callback = function (args) + buffers.on_hide(args.buf) + end + }) + + create_autocmd({ 'BufWipeout' }, { + group = 'ChaiAutocmds', + pattern = { 'chai://*' }, + callback = function (args) + buffers.destroy_buffer(args.buf) + end + }) + + create_autocmd('BufReadCmd', { + group = 'ChaiAutocmds', + pattern = { 'chai://*' }, + callback = function (args) + buffers.create_buffer(args.buf) + end + }) + + create_autocmd('BufWriteCmd', { + group = 'ChaiAutocmds', + pattern = { 'chai://*' }, + callback = function (args) + buffers.on_write(args.buf) + end + }) +end + +function M.setup() + buffer_handling_init() +end + +return M diff --git a/lua/chai/buffers.lua b/lua/chai/buffers.lua new file mode 100644 index 0000000..0c753f5 --- /dev/null +++ b/lua/chai/buffers.lua @@ -0,0 +1,56 @@ +-- buffers API, loads buffers from ./buffers/*.lua + +local M = {} + +local buffers = {} + +function M.setup() + -- Init stuff +end + +-- should return created chai buffer +local function resolve_buffer_path(path) + if string.match(path, '^chai://test/?$') then + local buffer = vim.deepcopy(require('chai.buffers.test')) + buffer.args = {} + + return buffer + end + + -- user is idiot imbecyle etc + error("Invalid path " .. path) +end + +function M.create_buffer(buffer) + buffers[buffer] = resolve_buffer_path(vim.api.nvim_buf_get_name(0)) + if type(buffers[buffer].init) == 'function' then + buffers[buffer].init(buffer) + end +end + +function M.destroy_buffer(buffer) + if type(buffers[buffer].destroy) == 'function' then + buffers[buffer].destroy(buffer) + end + buffers[buffer] = nil +end + +function M.on_hide(buffer) + if type(buffers[buffer].on_hide) == 'function' then + buffers[buffer].on_hide(buffer) + end +end + +function M.on_enter(buffer) + if type(buffers[buffer].on_enter) == 'function' then + buffers[buffer].on_enter(buffer) + end +end + +function M.on_write(buffer) + if type(buffers[buffer].on_write) == 'function' then + buffers[buffer].on_write(buffer) + end +end + +return M diff --git a/lua/chai/buffers/test.lua b/lua/chai/buffers/test.lua new file mode 100644 index 0000000..d7c572f --- /dev/null +++ b/lua/chai/buffers/test.lua @@ -0,0 +1,14 @@ +local M = {} + +function M.init(vim_buffer) + vim.api.nvim_buf_set_lines(vim_buffer, 0, -1, false, { "press q to exit" }) + + vim.keymap.set({ "n", "x" }, "q", function() + vim.api.nvim_buf_delete(vim_buffer, { force = true }) + end, { buffer = vim_buffer }) + + vim.bo[vim_buffer].modifiable = false + vim.bo[vim_buffer].modified = false +end + +return M diff --git a/lua/chai/init.lua b/lua/chai/init.lua index 75d9a41..9275dc3 100644 --- a/lua/chai/init.lua +++ b/lua/chai/init.lua @@ -1,6 +1,8 @@ local M = {} local config = require('chai.config') +local autocmds = require('chai.autocmds') +local buffers = require('chai.buffers') local commands = require('chai.commands') --- initializes chai.nvim plugin @@ -9,6 +11,9 @@ function M.setup(opts) -- set up configuration config.setup(opts) + buffers.setup() + autocmds.setup() + -- add commands commands.setup() end