Skip to content

Commit 9d949e7

Browse files
committed
feat: add a keymap_prefix to configure the default <leader>o
1 parent 8c65d9b commit 9d949e7

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ require('opencode').setup({
9999
preferred_completion = nil, -- 'blink', 'nvim-cmp','vim_complete' if nil, it will use the best available completion
100100
default_global_keymaps = true, -- If false, disables all default global keymaps
101101
default_mode = 'build', -- 'build' or 'plan' or any custom configured. @see [OpenCode Agents](https://opencode.ai/docs/modes/)
102+
keymap_prefix = '<leader>o', -- Default keymap prefix for global keymaps change to your preferred prefix and it will be applied to all keymaps starting with <leader>o
102103
keymap = {
103104
editor = {
104105
['<leader>og'] = { 'toggle' }, -- Open opencode. Close if opened

lua/opencode/config.lua

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
---@type OpencodeConfigModule
44
---@diagnostic disable-next-line: missing-fields
55
local M = {}
6-
76
-- Default configuration
87
---@type OpencodeConfig
98
M.defaults = {
109
preferred_picker = nil,
1110
preferred_completion = nil,
1211
default_global_keymaps = true,
1312
default_mode = 'build',
13+
keymap_prefix = '<leader>o',
1414
keymap = {
1515
editor = {
1616
['<leader>og'] = { 'toggle' },
@@ -172,6 +172,17 @@ local function get_function_names(keymap_config)
172172
return names
173173
end
174174

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+
175186
--- Setup function to initialize or update the configuration
176187
--- @param opts OpencodeConfig
177188
function M.setup(opts)
@@ -203,14 +214,9 @@ function M.setup(opts)
203214
end
204215
end
205216

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)
214220
end
215221

216222
function M.get(key)

lua/opencode/types.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@
123123
---@field preferred_completion 'blink' | 'nvim-cmp' | 'vim_complete' | nil -- Preferred completion strategy for mentons and commands
124124
---@field default_global_keymaps boolean
125125
---@field default_mode 'build' | 'plan' | string -- Default mode
126+
---@field keymap_prefix string
126127
---@field keymap OpencodeKeymap
127128
---@field ui OpencodeUIConfig
128129
---@field context OpencodeContextConfig

0 commit comments

Comments
 (0)