diff --git a/lua/gemini/chat.lua b/lua/gemini/chat.lua index 2d6b162..f5fe043 100644 --- a/lua/gemini/chat.lua +++ b/lua/gemini/chat.lua @@ -29,6 +29,7 @@ local function setup_buffer_options(bufnr) swapfile = false, bufhidden = 'wipe', modifiable = false, + readonly = true, -- Add readonly option } for option, value in pairs(options) do @@ -38,7 +39,9 @@ end local function setup_buffer_autocmds(bufnr) local augroup = vim.api.nvim_create_augroup('GeminiChatBuffer', { clear = true }) - vim.api.nvim_create_autocmd({'BufReadCmd', 'FileReadCmd', 'BufWriteCmd'}, { + + -- Block all file operations + vim.api.nvim_create_autocmd({'BufReadCmd', 'FileReadCmd', 'BufWriteCmd', 'FileWriteCmd'}, { group = augroup, buffer = bufnr, callback = function() @@ -46,25 +49,43 @@ local function setup_buffer_autocmds(bufnr) return true end }) + + -- Prevent dropping files into the buffer + vim.api.nvim_create_autocmd('BufEnter', { + group = augroup, + buffer = bufnr, + callback = function() + vim.opt_local.modifiable = false + vim.opt_local.readonly = true + end + }) end local function setup_buffer_keymaps(bufnr) - local opts = { buffer = bufnr, nowait = true } + local opts = { buffer = bufnr, nowait = true, silent = true } + + -- Disable ALL file operations + local operations = { + 'e', 'edit', 'w', 'write', 'sp', 'split', 'vs', 'vsplit', + 'new', 'vnew', 'read', 'update', 'saveas', 'f', 'file', + 'wq', 'wqa', 'wa', 'wall', 'q', 'quit', 'qa', 'qall' + } - -- Disable file operations - local operations = {'e', 'edit', 'w', 'write', 'sp', 'split', 'vs', 'vsplit', - 'new', 'vnew', 'read', 'update', 'saveas'} for _, op in ipairs(operations) do vim.keymap.set('n', ':' .. op, function() vim.notify('Operation not allowed in chat window', vim.log.levels.WARN) end, opts) end - -- Disable command mode + -- Disable command mode completely vim.keymap.set('n', ':', function() vim.notify('Command mode disabled in chat window', vim.log.levels.WARN) end, opts) + -- Block common file operation key combinations + vim.keymap.set('n', 'ZZ', '<Nop>', opts) + vim.keymap.set('n', 'ZQ', '<Nop>', opts) + -- Set chat-specific keymaps local mappings = config.options.mappings vim.keymap.set('n', mappings.close, function()