Skip to content

Commit d07db45

Browse files
authored
fix: preserve user's existing fillchars in output window (#417)
* fix: preserve user's existing fillchars in output window This should fix #415 * refactor(question): remove config-driven fold/output from question tool Never fold or hide the questions This fixes #416
1 parent f16abce commit d07db45

2 files changed

Lines changed: 40 additions & 3 deletions

File tree

lua/opencode/ui/output_window.lua

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ M._last_visible_bottom_by_win = {}
1111
M._was_at_bottom_by_win = {}
1212
M._prev_line_count_by_win = {}
1313

14+
local OUTPUT_FOLD_FILLCHARS = {
15+
fold = '-',
16+
foldclose = '+',
17+
foldopen = '-',
18+
foldsep = '',
19+
}
20+
1421
local function build_fold_state(folds)
1522
local fold_state = {
1623
ranges = {},
@@ -258,7 +265,15 @@ function M.setup(windows)
258265
window_options.set_window_option('foldenable', true, windows.output_win)
259266
window_options.set_window_option('foldlevel', 0, windows.output_win)
260267
window_options.set_window_option('foldcolumn', '1', windows.output_win)
261-
window_options.set_window_option('fillchars', 'fold:-,foldopen:-,foldclose:+,foldsep:│', windows.output_win)
268+
window_options.set_window_option(
269+
'fillchars',
270+
vim.api.nvim_get_option_value('fillchars', { win = windows.output_win }),
271+
windows.output_win,
272+
{ save_original = true }
273+
)
274+
vim.api.nvim_win_call(windows.output_win, function()
275+
vim.opt_local.fillchars:append(OUTPUT_FOLD_FILLCHARS)
276+
end)
262277
window_options.set_window_option('foldtext', 'v:lua.opencode_fold_text()', windows.output_win)
263278

264279
if config.ui.position ~= 'current' then

tests/unit/output_window_spec.lua

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@ local output_window = require('opencode.ui.output_window')
44
local flush = require('opencode.ui.renderer.flush')
55
local stub = require('luassert.stub')
66

7+
---@param value string
8+
---@return table<string, string>
9+
local function parse_fillchars(value)
10+
local result = {}
11+
for _, part in ipairs(vim.split(value, ',', { plain = true, trimempty = true })) do
12+
local key, item = part:match('^([^:]+):(.*)$')
13+
if key and item then
14+
result[key] = item
15+
end
16+
end
17+
return result
18+
end
19+
720
describe('output_window.create_buf', function()
821
local original_config
922

@@ -154,12 +167,21 @@ describe('output_window.setup', function()
154167
assert.equals(0, foldlevel)
155168
end)
156169

157-
it('sets fold fillchars to avoid numeric fold column markers', function()
170+
it('preserves existing fillchars while setting fold fillchars', function()
171+
vim.api.nvim_set_option_value('fillchars', 'eob:~,lastline:@', { win = win, scope = 'local' })
172+
158173
output_window.setup({ output_buf = buf, output_win = win })
159174

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

162-
assert.equals('fold:-,foldopen:-,foldclose:+,foldsep:│', fillchars)
177+
assert.same({
178+
eob = '~',
179+
lastline = '@',
180+
fold = '-',
181+
foldopen = '-',
182+
foldclose = '+',
183+
foldsep = '',
184+
}, parse_fillchars(fillchars))
163185
end)
164186

165187
it('applies closed folds immediately when fold ranges change', function()

0 commit comments

Comments
 (0)