diff options
| author | Aram Drevekenin <aram@poor.dev> | 2020-10-21 09:24:31 +0200 |
|---|---|---|
| committer | Aram Drevekenin <aram@poor.dev> | 2020-10-21 09:24:31 +0200 |
| commit | 3ea03edfdda142e51010c6133e5ba7f2fbab96c5 (patch) | |
| tree | 1501de05425544dbf3b4a3fe1702a3c6a2063ba8 /src | |
| parent | feat(ipc): listen to external ipc messages including a basic api (diff) | |
| download | sl0ppij-3ea03edfdda142e51010c6133e5ba7f2fbab96c5.tar.gz sl0ppij-3ea03edfdda142e51010c6133e5ba7f2fbab96c5.tar.xz sl0ppij-3ea03edfdda142e51010c6133e5ba7f2fbab96c5.zip | |
feat(ipc): send external ipc messages to active session through cli
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 79609108..7876ed06 100644 --- a/src/main.rs +++ b/src/main.rs @@ -21,6 +21,8 @@ use crate::screen::{Screen, ScreenInstruction}; use std::path::{Path, PathBuf}; use std::fs::remove_file; +use structopt::StructOpt; + // sigwinch stuff use ::signal_hook::iterator::Signals; @@ -29,12 +31,26 @@ pub type SigCleanup = dyn Fn() + Send; #[derive(Serialize, Deserialize, Debug)] enum ApiCommand { - OpenFile(String), + OpenFile(PathBuf), SplitHorizontally, SplitVertically, MoveFocus, } +#[derive(StructOpt, Debug)] +#[structopt(name = "mosaic")] +pub struct Opt { + #[structopt(short, long)] + /// Send "split (direction h == horizontal / v == vertical)" to active mosaic session + split: Option<char>, + #[structopt(short, long)] + /// Send "move focused pane" to active mosaic session + move_focus: bool, + #[structopt(short, long)] + /// Send "open file in new pane" to active mosaic session + open_file: Option<PathBuf> +} + fn debug_log_to_file (message: String) { use std::fs::OpenOptions; use std::io::prelude::*; @@ -64,7 +80,33 @@ pub fn sigwinch() -> (Box<OnSigWinch>, Box<SigCleanup>) { pub fn main() { let os_input = get_os_input(); - start(Box::new(os_input)); + let opts = Opt::from_args(); + if opts.split.is_some() { + match opts.split { + Some('h') => { + let mut stream = UnixStream::connect("/tmp/mosaic").unwrap(); + let api_command = bincode::serialize(&ApiCommand::SplitHorizontally).unwrap(); + stream.write_all(&api_command).unwrap(); + }, + Some('v') => { + let mut stream = UnixStream::connect("/tmp/mosaic").unwrap(); + let api_command = bincode::serialize(&ApiCommand::SplitVertically).unwrap(); + stream.write_all(&api_command).unwrap(); + }, + _ => {} + }; + } else if opts.move_focus { + let mut stream = UnixStream::connect("/tmp/mosaic").unwrap(); + let api_command = bincode::serialize(&ApiCommand::MoveFocus).unwrap(); + stream.write_all(&api_command).unwrap(); + } else if opts.open_file.is_some() { + let mut stream = UnixStream::connect("/tmp/mosaic").unwrap(); + let file_to_open = opts.open_file.unwrap(); + let api_command = bincode::serialize(&ApiCommand::OpenFile(file_to_open)).unwrap(); + stream.write_all(&api_command).unwrap(); + } else { + start(Box::new(os_input)); + } } pub fn start(mut os_input: Box<dyn OsApi>) { |
