aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKunal Mohan <kunalmohan99@gmail.com>2021-02-18 15:16:42 +0530
committerKunal Mohan <kunalmohan99@gmail.com>2021-05-04 20:47:49 +0530
commit2111f95f33cd17a27d2eb2a46560a84836cec4b5 (patch)
treea38e517fe714e90e226b0582428b3bedb3b43c2e /src
parentUse IPC for Server to client as well (diff)
downloadsl0ppij-2111f95f33cd17a27d2eb2a46560a84836cec4b5.tar.gz
sl0ppij-2111f95f33cd17a27d2eb2a46560a84836cec4b5.tar.xz
sl0ppij-2111f95f33cd17a27d2eb2a46560a84836cec4b5.zip
remove command_is_executing from pty_thread
Diffstat (limited to 'src')
-rw-r--r--src/common/mod.rs9
-rw-r--r--src/server/mod.rs107
2 files changed, 54 insertions, 62 deletions
diff --git a/src/common/mod.rs b/src/common/mod.rs
index 3ae95a74..fc060e4d 100644
--- a/src/common/mod.rs
+++ b/src/common/mod.rs
@@ -225,7 +225,7 @@ pub fn start(mut os_input: Box<dyn OsApi>, 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<dyn OsApi>, 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<dyn OsApi>, 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<dyn OsApi>, 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 a39d0bc0..e62aa7fc 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<dyn OsApi>,
- opts: CliArgs,
- command_is_executing: CommandIsExecuting,
-) -> thread::JoinHandle<()> {
+pub fn start_server(os_input: Box<dyn OsApi>, opts: CliArgs) -> thread::JoinHandle<()> {
let (send_pty_instructions, receive_pty_instructions): ChannelWithContext<PtyInstruction> =
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);
- 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);
+ .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::HorizontalSplit(PaneId::Terminal(pid)),
- ))
+ .send(ServerInstruction::ToScreen(ScreenInstruction::NewTab(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<IpcSenderWithContext> = Vec::with_capacity(1);
move || loop {
let (mut err_ctx, instruction): (ErrorContext, ServerInstruction) =