@@ -139,7 +139,7 @@ M.open = function(callback)
139139 local current_window = vim .api .nvim_get_current_win () -- Save user's current window in case they switched while content was loading
140140 vim .api .nvim_set_current_win (M .split .winid )
141141
142- common .switch_can_edit_bufs (true , M .linked_bufnr , M .unliked_bufnr )
142+ common .switch_can_edit_bufs (true , M .linked_bufnr , M .unlinked_bufnr )
143143 M .rebuild_discussion_tree ()
144144 M .rebuild_unlinked_discussion_tree ()
145145
@@ -432,6 +432,9 @@ M.rebuild_discussion_tree = function()
432432 if M .linked_bufnr == nil then
433433 return
434434 end
435+
436+ local current_node = discussions_tree .get_node_at_cursor (M .discussion_tree , M .last_node_at_cursor )
437+
435438 local expanded_node_ids = M .gather_expanded_node_ids (M .discussion_tree )
436439 common .switch_can_edit_bufs (true , M .linked_bufnr , M .unlinked_bufnr )
437440
@@ -447,12 +450,14 @@ M.rebuild_discussion_tree = function()
447450 bufnr = M .linked_bufnr ,
448451 prepare_node = tree_utils .nui_tree_prepare_node ,
449452 })
453+
450454 -- Re-expand already expanded nodes
451455 for _ , id in ipairs (expanded_node_ids ) do
452456 tree_utils .open_node_by_id (discussion_tree , id )
453457 end
454-
455458 discussion_tree :render ()
459+ discussions_tree .restore_cursor_position (M .split .winid , discussion_tree , current_node )
460+
456461 M .set_tree_keymaps (discussion_tree , M .linked_bufnr , false )
457462 M .discussion_tree = discussion_tree
458463 common .switch_can_edit_bufs (false , M .linked_bufnr , M .unlinked_bufnr )
@@ -466,6 +471,9 @@ M.rebuild_unlinked_discussion_tree = function()
466471 if M .unlinked_bufnr == nil then
467472 return
468473 end
474+
475+ local current_node = discussions_tree .get_node_at_cursor (M .unlinked_discussion_tree , M .last_node_at_cursor )
476+
469477 local expanded_node_ids = M .gather_expanded_node_ids (M .unlinked_discussion_tree )
470478 common .switch_can_edit_bufs (true , M .linked_bufnr , M .unlinked_bufnr )
471479 vim .api .nvim_buf_set_lines (M .unlinked_bufnr , 0 , - 1 , false , {})
@@ -487,6 +495,7 @@ M.rebuild_unlinked_discussion_tree = function()
487495 tree_utils .open_node_by_id (unlinked_discussion_tree , id )
488496 end
489497 unlinked_discussion_tree :render ()
498+ discussions_tree .restore_cursor_position (M .split .winid , unlinked_discussion_tree , current_node )
490499
491500 M .set_tree_keymaps (unlinked_discussion_tree , M .unlinked_bufnr , true )
492501 M .unlinked_discussion_tree = unlinked_discussion_tree
@@ -535,6 +544,14 @@ M.create_split_and_bufs = function()
535544 buffer = linked_bufnr ,
536545 callback = function ()
537546 M .last_row , M .last_column = unpack (vim .api .nvim_win_get_cursor (0 ))
547+ M .last_node_at_cursor = M .discussion_tree and M .discussion_tree :get_node () or nil
548+ end ,
549+ })
550+
551+ vim .api .nvim_create_autocmd (" WinLeave" , {
552+ buffer = unlinked_bufnr ,
553+ callback = function ()
554+ M .last_node_at_cursor = M .unlinked_discussion_tree and M .unlinked_discussion_tree :get_node () or nil
538555 end ,
539556 })
540557
0 commit comments