|
| 1 | +local Promise = require('opencode.promise') |
1 | 2 | local input_window = require('opencode.ui.input_window') |
2 | 3 | local output_window = require('opencode.ui.output_window') |
3 | 4 | local M = {} |
@@ -48,6 +49,29 @@ function M.setup_autocmds(windows) |
48 | 49 | end, |
49 | 50 | }) |
50 | 51 |
|
| 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 | + local core = require('opencode.core') |
| 59 | + |
| 60 | + if state.opencode_server then |
| 61 | + vim.notify('Directory changed, restarting Opencode server...', vim.log.levels.INFO) |
| 62 | + log.info('Shutting down Opencode server due to directory change...') |
| 63 | + state.opencode_server:shutdown():await() |
| 64 | + server_job.ensure_server():await() |
| 65 | + state.active_session = nil |
| 66 | + vim.notify('Loading last session for new working dir', vim.log.levels.INFO) |
| 67 | + state.active_session = session.get_last_workspace_session():await() |
| 68 | + if not state.active_session then |
| 69 | + state.active_session = core.create_new_session():await() |
| 70 | + end |
| 71 | + end |
| 72 | + end), |
| 73 | + }) |
| 74 | + |
51 | 75 | if require('opencode.config').ui.position == 'current' then |
52 | 76 | vim.api.nvim_create_autocmd('BufEnter', { |
53 | 77 | group = group, |
|
0 commit comments