From 2111f95f33cd17a27d2eb2a46560a84836cec4b5 Mon Sep 17 00:00:00 2001 From: Kunal Mohan Date: Thu, 18 Feb 2021 15:16:42 +0530 Subject: [PATCH] remove command_is_executing from pty_thread --- src/common/mod.rs | 9 +++- src/server/mod.rs | 107 ++++++++++++++++++++-------------------------- 2 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/common/mod.rs b/src/common/mod.rs index 3ae95a74c..fc060e4d3 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -225,7 +225,7 @@ pub fn start(mut os_input: Box, opts: CliArgs, config: Config) { let mut send_app_instructions = SenderWithContext::new(err_ctx, SenderType::SyncSender(send_app_instructions)); - let ipc_thread = start_server(os_input.clone(), opts.clone(), command_is_executing.clone()); + let ipc_thread = start_server(os_input.clone(), opts.clone()); let (client_buffer_path, client_buffer) = SharedRingBuffer::create_temp(8192).unwrap(); let mut send_server_instructions = IpcSenderWithContext::to_server(); @@ -379,6 +379,7 @@ pub fn start(mut os_input: Box, opts: CliArgs, config: Config) { } ScreenInstruction::CloseFocusedPane => { screen.get_active_tab_mut().unwrap().close_focused_pane(); + command_is_executing.done_closing_pane(); screen.render(); } ScreenInstruction::SetSelectable(id, selectable) => { @@ -402,6 +403,7 @@ pub fn start(mut os_input: Box, opts: CliArgs, config: Config) { } ScreenInstruction::ClosePane(id) => { screen.get_active_tab_mut().unwrap().close_pane(id); + command_is_executing.done_closing_pane(); screen.render(); } ScreenInstruction::ToggleActiveTerminalFullscreen => { @@ -416,7 +418,10 @@ pub fn start(mut os_input: Box, opts: CliArgs, config: Config) { } ScreenInstruction::SwitchTabNext => screen.switch_tab_next(), ScreenInstruction::SwitchTabPrev => screen.switch_tab_prev(), - ScreenInstruction::CloseTab => screen.close_tab(), + ScreenInstruction::CloseTab => { + screen.close_tab(); + command_is_executing.done_closing_pane(); + } ScreenInstruction::ApplyLayout((layout, new_pane_pids)) => { screen.apply_layout(Layout::new(layout), new_pane_pids); command_is_executing.done_opening_new_pane(); diff --git a/src/server/mod.rs b/src/server/mod.rs index a39d0bc05..e62aa7fc3 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -15,11 +15,7 @@ use std::path::PathBuf; use std::sync::mpsc::channel; use std::thread; -pub fn start_server( - os_input: Box, - opts: CliArgs, - command_is_executing: CommandIsExecuting, -) -> thread::JoinHandle<()> { +pub fn start_server(os_input: Box, opts: CliArgs) -> thread::JoinHandle<()> { let (send_pty_instructions, receive_pty_instructions): ChannelWithContext = channel(); let mut send_pty_instructions = SenderWithContext::new( @@ -47,64 +43,55 @@ pub fn start_server( let pty_thread = thread::Builder::new() .name("pty".to_string()) - .spawn({ - let mut command_is_executing = command_is_executing.clone(); - move || loop { - let (event, mut err_ctx) = pty_bus - .receive_pty_instructions - .recv() - .expect("failed to receive event on channel"); - err_ctx.add_call(ContextType::Pty(PtyContext::from(&event))); - match event { - PtyInstruction::SpawnTerminal(file_to_open) => { - let pid = pty_bus.spawn_terminal(file_to_open); + .spawn(move || loop { + let (event, mut err_ctx) = pty_bus + .receive_pty_instructions + .recv() + .expect("failed to receive event on channel"); + err_ctx.add_call(ContextType::Pty(PtyContext::from(&event))); + match event { + PtyInstruction::SpawnTerminal(file_to_open) => { + let pid = pty_bus.spawn_terminal(file_to_open); + pty_bus + .send_server_instructions + .send(ServerInstruction::ToScreen(ScreenInstruction::NewPane( + PaneId::Terminal(pid), + ))) + .unwrap(); + } + PtyInstruction::SpawnTerminalVertically(file_to_open) => { + let pid = pty_bus.spawn_terminal(file_to_open); + pty_bus + .send_server_instructions + .send(ServerInstruction::ToScreen( + ScreenInstruction::VerticalSplit(PaneId::Terminal(pid)), + )) + .unwrap(); + } + PtyInstruction::SpawnTerminalHorizontally(file_to_open) => { + let pid = pty_bus.spawn_terminal(file_to_open); + pty_bus + .send_server_instructions + .send(ServerInstruction::ToScreen( + ScreenInstruction::HorizontalSplit(PaneId::Terminal(pid)), + )) + .unwrap(); + } + PtyInstruction::NewTab => { + if let Some(layout) = maybe_layout.clone() { + pty_bus.spawn_terminals_for_layout(layout); + } else { + let pid = pty_bus.spawn_terminal(None); pty_bus .send_server_instructions - .send(ServerInstruction::ToScreen(ScreenInstruction::NewPane( - PaneId::Terminal(pid), - ))) + .send(ServerInstruction::ToScreen(ScreenInstruction::NewTab(pid))) .unwrap(); } - PtyInstruction::SpawnTerminalVertically(file_to_open) => { - let pid = pty_bus.spawn_terminal(file_to_open); - pty_bus - .send_server_instructions - .send(ServerInstruction::ToScreen( - ScreenInstruction::VerticalSplit(PaneId::Terminal(pid)), - )) - .unwrap(); - } - PtyInstruction::SpawnTerminalHorizontally(file_to_open) => { - let pid = pty_bus.spawn_terminal(file_to_open); - pty_bus - .send_server_instructions - .send(ServerInstruction::ToScreen( - ScreenInstruction::HorizontalSplit(PaneId::Terminal(pid)), - )) - .unwrap(); - } - PtyInstruction::NewTab => { - if let Some(layout) = maybe_layout.clone() { - pty_bus.spawn_terminals_for_layout(layout); - } else { - let pid = pty_bus.spawn_terminal(None); - pty_bus - .send_server_instructions - .send(ServerInstruction::ToScreen(ScreenInstruction::NewTab(pid))) - .unwrap(); - } - } - PtyInstruction::ClosePane(id) => { - pty_bus.close_pane(id); - command_is_executing.done_closing_pane(); - } - PtyInstruction::CloseTab(ids) => { - pty_bus.close_tab(ids); - command_is_executing.done_closing_pane(); - } - PtyInstruction::Exit => { - break; - } + } + PtyInstruction::ClosePane(id) => pty_bus.close_pane(id), + PtyInstruction::CloseTab(ids) => pty_bus.close_tab(ids), + PtyInstruction::Exit => { + break; } } }) @@ -115,7 +102,7 @@ pub fn start_server( .spawn({ let recv_server_instructions = IpcReceiver::new(server_buffer); // Fixme: We cannot use uninitialised sender, therefore this Vec. - // We make sure that the first message is `NewClient` so there are no out of bouns panics. + // For now, We make sure that the first message is `NewClient` so there are no out of bound panics. let mut send_client_instructions: Vec = Vec::with_capacity(1); move || loop { let (mut err_ctx, instruction): (ErrorContext, ServerInstruction) =