@@ -1158,9 +1158,23 @@ impl App {
11581158 . collect ( )
11591159 }
11601160
1161+ /// Clears PTY reference and related state for a specific pane
1162+ fn clear_pane_pty_reference ( & mut self , pane_idx : usize ) {
1163+ if pane_idx < 2 {
1164+ self . terminal_pane_data [ pane_idx] . pty = None ;
1165+ self . terminal_pane_data [ pane_idx] . can_be_interactive = false ;
1166+ self . terminal_pane_data [ pane_idx] . set_interactive ( false ) ;
1167+ }
1168+ }
1169+
11611170 /// Clears all output panes and resets their associated state.
11621171 fn clear_all_panes ( & mut self ) {
11631172 self . pane_tasks = [ None , None ] ;
1173+
1174+ // Clear PTY references for both panes
1175+ self . clear_pane_pty_reference ( 0 ) ;
1176+ self . clear_pane_pty_reference ( 1 ) ;
1177+
11641178 self . update_focus ( Focus :: TaskList ) ;
11651179 self . set_spacebar_mode ( false , None ) ;
11661180 self . dispatch_action ( Action :: UnpinAllTasks ) ;
@@ -1368,6 +1382,12 @@ impl App {
13681382
13691383 // If we're in spacebar mode and this is pane 0, convert to pinned mode
13701384 if self . spacebar_mode && pane_idx == 0 {
1385+ // Clear the PTY reference when converting from spacebar to pinned mode
1386+ self . clear_pane_pty_reference ( pane_idx) ;
1387+
1388+ // Pin the currently selected task to the pane
1389+ self . pane_tasks [ pane_idx] = Some ( task_name. clone ( ) ) ;
1390+
13711391 // When converting from spacebar to pinned, stay in name-tracking mode
13721392 self . set_spacebar_mode ( false , Some ( SelectionMode :: TrackByName ) ) ;
13731393 if self . layout_manager . get_pane_arrangement ( ) == PaneArrangement :: None {
@@ -1381,6 +1401,9 @@ impl App {
13811401 // Unpin the task if it's already pinned
13821402 self . pane_tasks [ pane_idx] = None ;
13831403
1404+ // Clear the PTY reference when unpinning
1405+ self . clear_pane_pty_reference ( pane_idx) ;
1406+
13841407 // If this was previously pane 2 and its now unpinned and pane 1 is still set, set the pane arrangement to single
13851408 if pane_idx == 1 && self . pane_tasks [ 0 ] . is_some ( ) {
13861409 self . layout_manager
@@ -1724,6 +1747,10 @@ impl App {
17241747 if let Some ( pty) = self . pty_instances . get ( & task_name) {
17251748 terminal_pane_data. can_be_interactive = in_progress && pty. can_be_interactive ( ) ;
17261749 terminal_pane_data. pty = Some ( pty. clone ( ) ) ;
1750+ } else {
1751+ // Clear PTY data if the task exists but doesn't have a PTY instance
1752+ terminal_pane_data. pty = None ;
1753+ terminal_pane_data. can_be_interactive = false ;
17271754 }
17281755 } else {
17291756 // Clear PTY data when switching to a task that doesn't have a PTY instance
0 commit comments