|
3 | 3 | ---@type OpencodeConfigModule |
4 | 4 | ---@diagnostic disable-next-line: missing-fields |
5 | 5 | local M = {} |
6 | | - |
7 | 6 | -- Default configuration |
8 | 7 | ---@type OpencodeConfig |
9 | 8 | M.defaults = { |
10 | 9 | preferred_picker = nil, |
11 | 10 | preferred_completion = nil, |
12 | 11 | default_global_keymaps = true, |
13 | 12 | default_mode = 'build', |
| 13 | + keymap_prefix = '<leader>o', |
14 | 14 | keymap = { |
15 | 15 | editor = { |
16 | 16 | ['<leader>og'] = { 'toggle' }, |
@@ -172,6 +172,17 @@ local function get_function_names(keymap_config) |
172 | 172 | return names |
173 | 173 | end |
174 | 174 |
|
| 175 | +function update_keymap_prefix(prefix, default_prefix) |
| 176 | + for _, mappings in pairs(M.values.keymap) do |
| 177 | + for key, func in pairs(mappings) do |
| 178 | + if prefix ~= '' and key:sub(1, #default_prefix) == default_prefix then |
| 179 | + mappings[prefix .. key:sub(#default_prefix + 1)] = func |
| 180 | + mappings[key] = nil |
| 181 | + end |
| 182 | + end |
| 183 | + end |
| 184 | +end |
| 185 | + |
175 | 186 | --- Setup function to initialize or update the configuration |
176 | 187 | --- @param opts OpencodeConfig |
177 | 188 | function M.setup(opts) |
@@ -203,14 +214,9 @@ function M.setup(opts) |
203 | 214 | end |
204 | 215 | end |
205 | 216 |
|
206 | | - -- Merge user options with defaults (deep merge for nested tables) |
207 | | - for k, v in pairs(opts) do |
208 | | - if type(v) == 'table' and type(M.values[k]) == 'table' then |
209 | | - M.values[k] = vim.tbl_deep_extend('force', M.values[k], v) |
210 | | - else |
211 | | - M.values[k] = v |
212 | | - end |
213 | | - end |
| 217 | + M.values = vim.tbl_deep_extend('force', M.values, opts --[[@as OpencodeConfig]]) |
| 218 | + |
| 219 | + update_keymap_prefix(M.values.keymap_prefix, M.defaults.keymap_prefix) |
214 | 220 | end |
215 | 221 |
|
216 | 222 | function M.get(key) |
|
0 commit comments