Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions lua/opencode/ui/formatter/tools/question.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,13 @@ function M.format(output, part)
local metadata = part.state and part.state.metadata or {}

local utils = require('opencode.ui.formatter.utils')
local config = require('opencode.config')

-- question tool never shows duration
local icons = require('opencode.ui.icons')
utils.format_action(output, icons.get('question'), 'question', '', nil)
output:add_empty_line()

local start_line = output:get_line_count() + 1
if not (config.ui.output.tools.show_output or config.ui.output.tools.use_folds) or (part.state and part.state.status) ~= 'completed' then
if (part.state and part.state.status) ~= 'completed' then
return
end

Expand Down Expand Up @@ -48,8 +46,6 @@ function M.format(output, part)
output:add_line('')
end
end

output:add_fold_with_threshold(start_line, config.ui.output.tools.show_output, config.ui.output.tools.use_folds)
end

return M
17 changes: 16 additions & 1 deletion lua/opencode/ui/output_window.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ M._last_visible_bottom_by_win = {}
M._was_at_bottom_by_win = {}
M._prev_line_count_by_win = {}

local OUTPUT_FOLD_FILLCHARS = {
fold = '-',
foldclose = '+',
foldopen = '-',
foldsep = '│',
}

local function build_fold_state(folds)
local fold_state = {
ranges = {},
Expand Down Expand Up @@ -258,7 +265,15 @@ function M.setup(windows)
window_options.set_window_option('foldenable', true, windows.output_win)
window_options.set_window_option('foldlevel', 0, windows.output_win)
window_options.set_window_option('foldcolumn', '1', windows.output_win)
window_options.set_window_option('fillchars', 'fold:-,foldopen:-,foldclose:+,foldsep:│', windows.output_win)
window_options.set_window_option(
'fillchars',
vim.api.nvim_get_option_value('fillchars', { win = windows.output_win }),
windows.output_win,
{ save_original = true }
)
vim.api.nvim_win_call(windows.output_win, function()
vim.opt_local.fillchars:append(OUTPUT_FOLD_FILLCHARS)
end)
window_options.set_window_option('foldtext', 'v:lua.opencode_fold_text()', windows.output_win)

if config.ui.position ~= 'current' then
Expand Down
26 changes: 24 additions & 2 deletions tests/unit/output_window_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ local output_window = require('opencode.ui.output_window')
local flush = require('opencode.ui.renderer.flush')
local stub = require('luassert.stub')

---@param value string
---@return table<string, string>
local function parse_fillchars(value)
local result = {}
for _, part in ipairs(vim.split(value, ',', { plain = true, trimempty = true })) do
local key, item = part:match('^([^:]+):(.*)$')
if key and item then
result[key] = item
end
end
return result
end

describe('output_window.create_buf', function()
local original_config

Expand Down Expand Up @@ -154,12 +167,21 @@ describe('output_window.setup', function()
assert.equals(0, foldlevel)
end)

it('sets fold fillchars to avoid numeric fold column markers', function()
it('preserves existing fillchars while setting fold fillchars', function()
vim.api.nvim_set_option_value('fillchars', 'eob:~,lastline:@', { win = win, scope = 'local' })

output_window.setup({ output_buf = buf, output_win = win })

local fillchars = vim.api.nvim_get_option_value('fillchars', { win = win })

assert.equals('fold:-,foldopen:-,foldclose:+,foldsep:│', fillchars)
assert.same({
eob = '~',
lastline = '@',
fold = '-',
foldopen = '-',
foldclose = '+',
foldsep = '│',
}, parse_fillchars(fillchars))
end)

it('applies closed folds immediately when fold ranges change', function()
Expand Down
Loading