Skip to content

Commit e0b33e2

Browse files
committed
feat(server): handle working dir change
This should fix #246
1 parent b379c29 commit e0b33e2

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

lua/opencode/opencode_server.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ end
3434
--- Create a new ServerJob instance
3535
--- @return OpencodeServer
3636
function OpencodeServer.new()
37-
local log = require('opencode.log')
3837
ensure_vim_leave_autocmd()
3938

4039
return setmetatable({

lua/opencode/ui/autocmds.lua

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
local Promise = require('opencode.promise')
12
local input_window = require('opencode.ui.input_window')
23
local output_window = require('opencode.ui.output_window')
34
local M = {}
@@ -48,6 +49,28 @@ function M.setup_autocmds(windows)
4849
end,
4950
})
5051

52+
vim.api.nvim_create_autocmd('DirChanged', {
53+
callback = Promise.async(function(event)
54+
local log = require('opencode.log')
55+
local state = require('opencode.state')
56+
local server_job = require('opencode.server_job')
57+
local session = require('opencode.session')
58+
59+
if state.opencode_server then
60+
vim.notify('Directory changed, restarting Opencode server...', vim.log.levels.INFO)
61+
log.info('Shutting down Opencode server due to directory change...')
62+
state.opencode_server:shutdown():await()
63+
server_job.ensure_server():await()
64+
state.active_session = nil
65+
vim.notify('Loading last session for new working dir', vim.log.levels.INFO)
66+
state.active_session = session.get_last_workspace_session():await()
67+
if not state.active_session then
68+
state.active_session = M.create_new_session():await()
69+
end
70+
end
71+
end),
72+
})
73+
5174
if require('opencode.config').ui.position == 'current' then
5275
vim.api.nvim_create_autocmd('BufEnter', {
5376
group = group,

0 commit comments

Comments
 (0)