Skip to content

Commit cbd3fd5

Browse files
committed
WIP: very early ground break
1 parent 6094564 commit cbd3fd5

File tree

10 files changed

+1661
-123
lines changed

10 files changed

+1661
-123
lines changed

lua/opencode/api.lua

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ local util = require('opencode.util')
33
local session = require('opencode.session')
44
local config_file = require('opencode.config_file')
55
local state = require('opencode.state')
6+
local quick_chat = require('opencode.quick_chat')
67

78
local input_window = require('opencode.ui.input_window')
89
local ui = require('opencode.ui.ui')
@@ -107,6 +108,15 @@ function M.select_history()
107108
require('opencode.ui.history_picker').pick()
108109
end
109110

111+
function M.quick_chat(message, range)
112+
local options = {}
113+
if type(message) == 'table' then
114+
message = table.concat(message, ' ')
115+
end
116+
117+
return quick_chat.quick_chat(message, options, range)
118+
end
119+
110120
function M.toggle_pane()
111121
return core.open({ new_session = false, focus = 'output' }):and_then(function()
112122
ui.toggle_pane()
@@ -957,6 +967,14 @@ M.commands = {
957967
fn = M.toggle_zoom,
958968
},
959969

970+
quick_chat = {
971+
desc = 'Quick chat with current context',
972+
fn = M.quick_chat,
973+
range = true, -- Enable range support for visual selections
974+
nargs = '+', -- Allow multiple arguments
975+
complete = false, -- No completion for custom messages
976+
},
977+
960978
swap = {
961979
desc = 'Swap pane position left/right',
962980
fn = M.swap_position,
@@ -1284,6 +1302,14 @@ M.legacy_command_map = {
12841302

12851303
function M.route_command(opts)
12861304
local args = vim.split(opts.args or '', '%s+', { trimempty = true })
1305+
local range = nil
1306+
1307+
if opts.range and opts.range > 0 then
1308+
range = {
1309+
start = opts.line1,
1310+
stop = opts.line2,
1311+
}
1312+
end
12871313

12881314
if #args == 0 then
12891315
M.toggle()
@@ -1294,7 +1320,7 @@ function M.route_command(opts)
12941320
local subcmd_def = M.commands[subcommand]
12951321

12961322
if subcmd_def and subcmd_def.fn then
1297-
subcmd_def.fn(vim.list_slice(args, 2))
1323+
subcmd_def.fn(vim.list_slice(args, 2), range)
12981324
else
12991325
vim.notify('Unknown subcommand: ' .. subcommand, vim.log.levels.ERROR)
13001326
end
@@ -1388,6 +1414,7 @@ function M.setup()
13881414
vim.api.nvim_create_user_command('Opencode', M.route_command, {
13891415
desc = 'Opencode.nvim main command with nested subcommands',
13901416
nargs = '*',
1417+
range = true, -- Enable range support
13911418
complete = M.complete_command,
13921419
})
13931420

lua/opencode/config.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ M.defaults = {
2222
['<leader>ot'] = { 'toggle_focus', desc = 'Toggle focus' },
2323
['<leader>oT'] = { 'timeline', desc = 'Session timeline' },
2424
['<leader>oq'] = { 'close', desc = 'Close Opencode window' },
25+
['<leader>oQ'] = { 'quick_chat', desc = 'Quick chat with current context' },
2526
['<leader>os'] = { 'select_session', desc = 'Select session' },
2627
['<leader>oR'] = { 'rename_session', desc = 'Rename session' },
2728
['<leader>op'] = { 'configure_provider', desc = 'Configure provider' },
@@ -165,6 +166,7 @@ M.defaults = {
165166
enabled = true,
166167
cursor_data = {
167168
enabled = false,
169+
context_lines = 10, -- Number of lines before and after cursor to include in context
168170
},
169171
diagnostics = {
170172
enabled = true,
@@ -199,6 +201,12 @@ M.defaults = {
199201
on_done_thinking = nil,
200202
on_permission_requested = nil,
201203
},
204+
quick_chat = {
205+
default_model = nil, -- Use current model if nil
206+
default_agent = nil, -- Use current mode if nil
207+
include_context_by_default = true,
208+
default_prompt = nil, -- Use built-in prompt if nil
209+
},
202210
}
203211

204212
M.values = vim.deepcopy(M.defaults)

0 commit comments

Comments
 (0)