diff --git a/README.md b/README.md index fec275a..5d6088c 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Scrape problems, run tests, and debug solutions across multiple platforms with zero configuration. -https://github.com/user-attachments/assets/2f01db4a-718a-482b-89c0-e841d37a63b4 +https://github.com/user-attachments/assets/956ec4c4-5ef1-4391-abea-3a51fa771809 ## Features diff --git a/lua/cp/ui/edit.lua b/lua/cp/ui/edit.lua index ada41bb..a041ad4 100644 --- a/lua/cp/ui/edit.lua +++ b/lua/cp/ui/edit.lua @@ -90,7 +90,7 @@ local function delete_current_test() return end if #edit_state.test_buffers == 1 then - logger.log('Cannot have 0 problem tests.', vim.log.levels.ERROR) + logger.log('Problems must have at least one test case.', vim.log.levels.ERROR) return end @@ -217,6 +217,32 @@ setup_keybindings = function(buf) { buffer = buf, silent = true, desc = 'Add test' } ) end + + local augroup = vim.api.nvim_create_augroup('cp_edit_guard', { clear = false }) + vim.api.nvim_create_autocmd({ 'BufDelete', 'BufWipeout' }, { + group = augroup, + buffer = buf, + callback = function() + vim.schedule(function() + if not edit_state then + return + end + + local is_tracked = false + for _, pair in ipairs(edit_state.test_buffers) do + if pair.input_buf == buf or pair.expected_buf == buf then + is_tracked = true + break + end + end + + if is_tracked then + logger.log('Test buffer closed unexpectedly. Exiting editor.', vim.log.levels.WARN) + M.toggle_edit() + end + end) + end, + }) end local function save_all_tests() @@ -279,6 +305,8 @@ function M.toggle_edit(test_index) save_all_tests() edit_state = nil + pcall(vim.api.nvim_clear_autocmds, { group = 'cp_edit_guard' }) + local saved = state.get_saved_session() if saved then vim.fn.delete(saved)