From 13933fc7fdb673952f5c486bc1f407e26dfbe045 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Thu, 23 Oct 2025 12:10:14 -0400 Subject: [PATCH] feat: clearcol --- lua/cp/config.lua | 11 ++++++++++- lua/cp/helpers.lua | 11 +++++++++++ lua/cp/init.lua | 3 +++ lua/cp/setup.lua | 7 +++++++ lua/cp/ui/layouts.lua | 6 ++++++ lua/cp/ui/panel.lua | 3 +++ 6 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 lua/cp/helpers.lua diff --git a/lua/cp/config.lua b/lua/cp/config.lua index bb02eca..5d27ca7 100644 --- a/lua/cp/config.lua +++ b/lua/cp/config.lua @@ -56,6 +56,7 @@ local M = {} local constants = require('cp.constants') +local helpers = require('cp.helpers') local utils = require('cp.utils') -- defaults per the new single schema @@ -103,7 +104,13 @@ M.defaults = { default_language = 'cpp', }, }, - hooks = { before_run = nil, before_debug = nil, setup_code = nil }, + hooks = { + before_run = nil, + before_debug = nil, + setup_code = nil, + setup_io_input = helpers.clearcol, + setup_io_output = helpers.clearcol, + }, debug = false, scrapers = constants.PLATFORMS, filename = nil, @@ -231,6 +238,8 @@ function M.setup(user_config) before_run = { cfg.hooks.before_run, { 'function', 'nil' }, true }, before_debug = { cfg.hooks.before_debug, { 'function', 'nil' }, true }, setup_code = { cfg.hooks.setup_code, { 'function', 'nil' }, true }, + setup_io_input = { cfg.hooks.setup_io_input, { 'function', 'nil' }, true }, + setup_io_output = { cfg.hooks.setup_io_output, { 'function', 'nil' }, true }, }) vim.validate({ diff --git a/lua/cp/helpers.lua b/lua/cp/helpers.lua new file mode 100644 index 0000000..418d16c --- /dev/null +++ b/lua/cp/helpers.lua @@ -0,0 +1,11 @@ +local M = {} + +---@param bufnr integer +function M.clearcol(bufnr) + vim.bo[bufnr].signcolumn = 'no' + vim.bo[bufnr].statuscolumn = '' + vim.bo[bufnr].number = false + vim.bo[bufnr].relativenumber = false +end + +return M diff --git a/lua/cp/init.lua b/lua/cp/init.lua index 366517c..64a997d 100644 --- a/lua/cp/init.lua +++ b/lua/cp/init.lua @@ -1,8 +1,11 @@ local M = {} local config_module = require('cp.config') +local helpers = require('cp.helpers') local logger = require('cp.log') +M.helpers = helpers + if vim.fn.has('nvim-0.10.0') == 0 then logger.log('Requires nvim-0.10.0+', vim.log.levels.ERROR) return {} diff --git a/lua/cp/setup.lua b/lua/cp/setup.lua index eaa92f2..6592a3d 100644 --- a/lua/cp/setup.lua +++ b/lua/cp/setup.lua @@ -3,6 +3,7 @@ local M = {} local cache = require('cp.cache') local config_module = require('cp.config') local constants = require('cp.constants') +local helpers = require('cp.helpers') local logger = require('cp.log') local scraper = require('cp.scraper') local state = require('cp.state') @@ -178,6 +179,9 @@ function M.setup_problem(problem_id, language) if ok then vim.b[prov.bufnr].cp_setup_done = true end + elseif not vim.b[prov.bufnr].cp_setup_done then + helpers.clearcol(prov.bufnr) + vim.b[prov.bufnr].cp_setup_done = true end cache.set_file_state( vim.fn.fnamemodify(source_file, ':p'), @@ -202,6 +206,9 @@ function M.setup_problem(problem_id, language) if ok then vim.b[bufnr].cp_setup_done = true end + elseif not vim.b[bufnr].cp_setup_done then + helpers.clearcol(bufnr) + vim.b[bufnr].cp_setup_done = true end cache.set_file_state( vim.fn.expand('%:p'), diff --git a/lua/cp/ui/layouts.lua b/lua/cp/ui/layouts.lua index d5470d1..730c17e 100644 --- a/lua/cp/ui/layouts.lua +++ b/lua/cp/ui/layouts.lua @@ -1,10 +1,13 @@ local M = {} +local helpers = require('cp.helpers') local utils = require('cp.utils') local function create_none_diff_layout(parent_win, expected_content, actual_content) local expected_buf = utils.create_buffer_with_options() local actual_buf = utils.create_buffer_with_options() + helpers.clearcol(expected_buf) + helpers.clearcol(actual_buf) vim.api.nvim_set_current_win(parent_win) vim.cmd.split() @@ -42,6 +45,8 @@ end local function create_vim_diff_layout(parent_win, expected_content, actual_content) local expected_buf = utils.create_buffer_with_options() local actual_buf = utils.create_buffer_with_options() + helpers.clearcol(expected_buf) + helpers.clearcol(actual_buf) vim.api.nvim_set_current_win(parent_win) vim.cmd.split() @@ -89,6 +94,7 @@ end local function create_git_diff_layout(parent_win, expected_content, actual_content) local diff_buf = utils.create_buffer_with_options() + helpers.clearcol(diff_buf) vim.api.nvim_set_current_win(parent_win) vim.cmd.split() diff --git a/lua/cp/ui/panel.lua b/lua/cp/ui/panel.lua index 0e2690a..4cbc116 100644 --- a/lua/cp/ui/panel.lua +++ b/lua/cp/ui/panel.lua @@ -6,6 +6,7 @@ local M = {} local cache = require('cp.cache') local config_module = require('cp.config') local constants = require('cp.constants') +local helpers = require('cp.helpers') local layouts = require('cp.ui.layouts') local logger = require('cp.log') local state = require('cp.state') @@ -262,6 +263,7 @@ function M.ensure_io_view() if config.hooks and config.hooks.setup_io_output then pcall(config.hooks.setup_io_output, output_buf, state) end + if config.hooks and config.hooks.setup_io_input then pcall(config.hooks.setup_io_input, input_buf, state) end @@ -440,6 +442,7 @@ function M.toggle_panel(panel_opts) vim.cmd('silent only') local tab_buf = utils.create_buffer_with_options() + helpers.clearcol(tab_buf) local main_win = vim.api.nvim_get_current_win() vim.api.nvim_win_set_buf(main_win, tab_buf) vim.api.nvim_set_option_value('filetype', 'cp', { buf = tab_buf })