|
1 | 1 | local state = require('opencode.state') |
2 | 2 | local config = require('opencode.config') |
| 3 | +local window_options = require('opencode.ui.window_options') |
3 | 4 |
|
4 | 5 | local M = {} |
5 | 6 | M.namespace = vim.api.nvim_create_namespace('opencode_output') |
@@ -105,56 +106,26 @@ function M.is_at_bottom(win) |
105 | 106 | return cursor[1] >= line_count |
106 | 107 | end |
107 | 108 |
|
108 | | ----Helper to set window option and save original value for position='current' |
109 | | ----@param opt_name string The option name |
110 | | ----@param value any The value to set |
111 | | ----@param win integer The window ID |
112 | | -local function set_win_option(opt_name, value, win) |
113 | | - -- Save original value if using position = 'current' |
114 | | - if config.ui.position == 'current' then |
115 | | - if not state.saved_window_options then |
116 | | - state.ui.set_saved_window_options({}) |
117 | | - end |
118 | | - -- Only save if not already saved (in case this function is called multiple times) |
119 | | - if state.saved_window_options[opt_name] == nil then |
120 | | - local ok, original = pcall(vim.api.nvim_get_option_value, opt_name, { win = win }) |
121 | | - if ok then |
122 | | - state.saved_window_options[opt_name] = original |
123 | | - end |
124 | | - end |
125 | | - end |
126 | | - |
127 | | - vim.api.nvim_set_option_value(opt_name, value, { win = win, scope = 'local' }) |
128 | | -end |
129 | | - |
130 | | ----Helper to set buffer option (no saving needed) |
131 | | ----@param opt_name string The option name |
132 | | ----@param value any The value to set |
133 | | ----@param buf integer The buffer ID |
134 | | -local function set_buf_option(opt_name, value, buf) |
135 | | - vim.api.nvim_set_option_value(opt_name, value, { buf = buf }) |
136 | | -end |
137 | | - |
138 | 109 | function M.setup(windows) |
139 | | - set_win_option('winhighlight', config.ui.window_highlight, windows.output_win) |
140 | | - set_win_option('wrap', true, windows.output_win) |
141 | | - set_win_option('linebreak', true, windows.output_win) |
142 | | - set_win_option('number', false, windows.output_win) |
143 | | - set_win_option('relativenumber', false, windows.output_win) |
144 | | - set_buf_option('modifiable', false, windows.output_buf) |
145 | | - set_buf_option('buftype', 'nofile', windows.output_buf) |
146 | | - set_buf_option('bufhidden', 'hide', windows.output_buf) |
147 | | - set_buf_option('buflisted', false, windows.output_buf) |
148 | | - set_buf_option('swapfile', false, windows.output_buf) |
| 110 | + window_options.set_window_option('winhighlight', config.ui.window_highlight, windows.output_win, { save_original = true }) |
| 111 | + window_options.set_window_option('wrap', true, windows.output_win, { save_original = true }) |
| 112 | + window_options.set_window_option('linebreak', true, windows.output_win, { save_original = true }) |
| 113 | + window_options.set_window_option('number', false, windows.output_win, { save_original = true }) |
| 114 | + window_options.set_window_option('relativenumber', false, windows.output_win, { save_original = true }) |
| 115 | + window_options.set_buffer_option('modifiable', false, windows.output_buf) |
| 116 | + window_options.set_buffer_option('buftype', 'nofile', windows.output_buf) |
| 117 | + window_options.set_buffer_option('bufhidden', 'hide', windows.output_buf) |
| 118 | + window_options.set_buffer_option('buflisted', false, windows.output_buf) |
| 119 | + window_options.set_buffer_option('swapfile', false, windows.output_buf) |
149 | 120 |
|
150 | 121 | if config.ui.position ~= 'current' then |
151 | | - set_win_option('winfixbuf', true, windows.output_win) |
| 122 | + window_options.set_window_option('winfixbuf', true, windows.output_win, { save_original = true }) |
152 | 123 | end |
153 | | - set_win_option('winfixheight', true, windows.output_win) |
154 | | - set_win_option('winfixwidth', true, windows.output_win) |
155 | | - set_win_option('signcolumn', 'yes', windows.output_win) |
156 | | - set_win_option('list', false, windows.output_win) |
157 | | - set_win_option('statuscolumn', '', windows.output_win) |
| 124 | + window_options.set_window_option('winfixheight', true, windows.output_win, { save_original = true }) |
| 125 | + window_options.set_window_option('winfixwidth', true, windows.output_win, { save_original = true }) |
| 126 | + window_options.set_window_option('signcolumn', 'yes', windows.output_win, { save_original = true }) |
| 127 | + window_options.set_window_option('list', false, windows.output_win, { save_original = true }) |
| 128 | + window_options.set_window_option('statuscolumn', '', windows.output_win, { save_original = true }) |
158 | 129 |
|
159 | 130 | M.update_dimensions(windows) |
160 | 131 | M.setup_keymaps(windows) |
|
0 commit comments