Merge pull request #211 from barrettruth/fix/disappearing-io-view
fix `:CP {prev,next}` race condition
This commit is contained in:
commit
b88e2ce746
5 changed files with 31 additions and 5 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
|
@ -1,11 +1,16 @@
|
||||||
.venv/
|
.venv
|
||||||
|
venv
|
||||||
doc/tags
|
doc/tags
|
||||||
*.log
|
*.log
|
||||||
build
|
build
|
||||||
io
|
io
|
||||||
debug
|
debug
|
||||||
venv/
|
create
|
||||||
|
|
||||||
|
|
||||||
|
.*cache*
|
||||||
CLAUDE.md
|
CLAUDE.md
|
||||||
__pycache__
|
__pycache__
|
||||||
.claude/
|
.claude/
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ repos:
|
||||||
hooks:
|
hooks:
|
||||||
- id: prettier
|
- id: prettier
|
||||||
name: prettier
|
name: prettier
|
||||||
|
files: \.(md|,toml,yaml,sh)$
|
||||||
|
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
|
|
|
||||||
|
|
@ -348,6 +348,8 @@ function M.navigate_problem(direction, language)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
logger.log(('navigate_problem: %s -> %s'):format(current_problem_id, problems[new_index].id))
|
||||||
|
|
||||||
local active_panel = state.get_active_panel()
|
local active_panel = state.get_active_panel()
|
||||||
if active_panel == 'run' then
|
if active_panel == 'run' then
|
||||||
require('cp.ui.views').disable()
|
require('cp.ui.views').disable()
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
---@field output_buf integer
|
---@field output_buf integer
|
||||||
---@field input_buf integer
|
---@field input_buf integer
|
||||||
---@field current_test_index integer?
|
---@field current_test_index integer?
|
||||||
|
---@field source_buf integer?
|
||||||
|
|
||||||
---@class cp.State
|
---@class cp.State
|
||||||
---@field get_platform fun(): string?
|
---@field get_platform fun(): string?
|
||||||
|
|
|
||||||
|
|
@ -194,14 +194,27 @@ end
|
||||||
---@return integer, integer
|
---@return integer, integer
|
||||||
local function get_or_create_io_buffers()
|
local function get_or_create_io_buffers()
|
||||||
local io_state = state.get_io_view_state()
|
local io_state = state.get_io_view_state()
|
||||||
|
local solution_win = state.get_solution_win()
|
||||||
|
local current_source_buf = vim.api.nvim_win_get_buf(solution_win)
|
||||||
|
|
||||||
if io_state then
|
if io_state then
|
||||||
local output_valid = io_state.output_buf and vim.api.nvim_buf_is_valid(io_state.output_buf)
|
local output_valid = io_state.output_buf and vim.api.nvim_buf_is_valid(io_state.output_buf)
|
||||||
local input_valid = io_state.input_buf and vim.api.nvim_buf_is_valid(io_state.input_buf)
|
local input_valid = io_state.input_buf and vim.api.nvim_buf_is_valid(io_state.input_buf)
|
||||||
|
local same_source = io_state.source_buf == current_source_buf
|
||||||
|
|
||||||
if output_valid and input_valid then
|
if output_valid and input_valid and same_source then
|
||||||
return io_state.output_buf, io_state.input_buf
|
return io_state.output_buf, io_state.input_buf
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if io_state.source_buf then
|
||||||
|
pcall(vim.api.nvim_del_augroup_by_name, 'cp_io_cleanup_buf' .. io_state.source_buf)
|
||||||
|
end
|
||||||
|
if output_valid then
|
||||||
|
pcall(vim.api.nvim_buf_delete, io_state.output_buf, { force = true })
|
||||||
|
end
|
||||||
|
if input_valid then
|
||||||
|
pcall(vim.api.nvim_buf_delete, io_state.input_buf, { force = true })
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local output_buf = utils.create_buffer_with_options('cpout')
|
local output_buf = utils.create_buffer_with_options('cpout')
|
||||||
|
|
@ -211,10 +224,10 @@ local function get_or_create_io_buffers()
|
||||||
output_buf = output_buf,
|
output_buf = output_buf,
|
||||||
input_buf = input_buf,
|
input_buf = input_buf,
|
||||||
current_test_index = 1,
|
current_test_index = 1,
|
||||||
|
source_buf = current_source_buf,
|
||||||
})
|
})
|
||||||
|
|
||||||
local solution_win = state.get_solution_win()
|
local source_buf = current_source_buf
|
||||||
local source_buf = vim.api.nvim_win_get_buf(solution_win)
|
|
||||||
|
|
||||||
local group_name = 'cp_io_cleanup_buf' .. source_buf
|
local group_name = 'cp_io_cleanup_buf' .. source_buf
|
||||||
vim.api.nvim_create_augroup(group_name, { clear = true })
|
vim.api.nvim_create_augroup(group_name, { clear = true })
|
||||||
|
|
@ -249,6 +262,10 @@ local function get_or_create_io_buffers()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if io.source_buf ~= source_buf then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local wins = vim.api.nvim_list_wins()
|
local wins = vim.api.nvim_list_wins()
|
||||||
for _, win in ipairs(wins) do
|
for _, win in ipairs(wins) do
|
||||||
if vim.api.nvim_win_get_buf(win) == source_buf then
|
if vim.api.nvim_win_get_buf(win) == source_buf then
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue