use super::tmux_interface::*;
use super::tmux_interface_error::TmuxInterfaceError;
use std::process::Output;
#[derive(Default)]
pub struct SetOption<'a> {
pub append: Option<bool>, pub format: Option<bool>, pub global: Option<bool>, pub not_overwrite: Option<bool>, pub quiet: Option<bool>, pub server: Option<bool>, pub unset: Option<bool>, pub window: Option<bool>, pub target: Option<&'a str>, pub option: &'a str, pub value: &'a str }
impl<'a> SetOption<'a> {
pub fn new() -> Self {
Default::default()
}
}
#[derive(Default)]
pub struct SetWindowOption<'a> {
pub append: Option<bool>, pub format: Option<bool>, pub global: Option<bool>, pub not_overwrite: Option<bool>, pub quiet: Option<bool>, pub unset: Option<bool>, pub target_window: Option<&'a str>, pub option: &'a str, pub value: &'a str }
impl<'a> SetWindowOption<'a> {
pub fn new() -> Self {
Default::default()
}
}
#[derive(Default)]
pub struct ShowOptions<'a> {
pub global_options: Option<bool>, pub hooks: Option<bool>, pub quiet: Option<bool>, pub server_options: Option<bool>, pub option_value: Option<bool>, pub window_options: Option<bool>, pub target: Option<&'a str>, pub option: Option<&'a str>, }
impl<'a> ShowOptions<'a> {
pub fn new() -> Self {
Default::default()
}
}
impl<'a> TmuxInterface<'a> {
const SET_OPTION: &'static str = "set-option";
const SET_WINDOW_OPTION: &'static str = "set-window-option";
const SHOW_OPTIONS: &'static str = "show-options";
const SHOW_WINDOW_OPTIONS: &'static str = "show-window-options";
pub fn set_option(&self, set_option: &SetOption) -> Result<Output, TmuxInterfaceError> {
let mut args: Vec<&str> = Vec::new();
if set_option.append.unwrap_or(false) { args.push(a_KEY); }
if set_option.format.unwrap_or(false) { args.push(F_KEY); }
if set_option.global.unwrap_or(false) { args.push(g_KEY); }
if set_option.not_overwrite.unwrap_or(false) { args.push(o_KEY); }
if set_option.quiet.unwrap_or(false) { args.push(q_KEY); }
if set_option.server.unwrap_or(false) { args.push(s_KEY); }
if set_option.unset.unwrap_or(false) { args.push(u_KEY); }
if set_option.window.unwrap_or(false) { args.push(w_KEY); }
set_option.target.and_then(|s| Some(args.extend_from_slice(&[t_KEY, &s])));
args.push(set_option.option);
args.push(set_option.value);
let output = self.subcommand(TmuxInterface::SET_OPTION, &args)?;
Ok(output)
}
pub fn set_window_option(&self,
set_window_option: &SetWindowOption
) -> Result<Output, TmuxInterfaceError> {
let mut args: Vec<&str> = Vec::new();
if set_window_option.append.unwrap_or(false) { args.push(a_KEY); }
if set_window_option.format.unwrap_or(false) { args.push(F_KEY); }
if set_window_option.global.unwrap_or(false) { args.push(g_KEY); }
if set_window_option.not_overwrite.unwrap_or(false) { args.push(o_KEY); }
if set_window_option.quiet.unwrap_or(false) { args.push(q_KEY); }
if set_window_option.unset.unwrap_or(false) { args.push(u_KEY); }
set_window_option.target_window.and_then(|s| Some(args.extend_from_slice(&[t_KEY, &s])));
args.push(set_window_option.option);
args.push(set_window_option.value);
let output = self.subcommand(TmuxInterface::SET_WINDOW_OPTION, &args)?;
Ok(output)
}
pub fn show_options(&self, show_options: &ShowOptions) -> Result<String, TmuxInterfaceError> {
let mut args: Vec<&str> = Vec::new();
if show_options.global_options.unwrap_or(false) { args.push(g_KEY); }
if show_options.hooks.unwrap_or(false) { args.push(H_KEY); }
if show_options.quiet.unwrap_or(false) { args.push(q_KEY); }
if show_options.server_options.unwrap_or(false) { args.push(s_KEY); }
if show_options.option_value.unwrap_or(false) { args.push(v_KEY); }
if show_options.window_options.unwrap_or(false) { args.push(w_KEY); }
show_options.target.and_then(|s| Some(args.extend_from_slice(&[t_KEY, &s])));
show_options.option.and_then(|s| Some(args.push(&s)));
let output = self.subcommand(TmuxInterface::SHOW_OPTIONS, &args)?;
let stdout = String::from_utf8_lossy(&output.stdout.as_slice());
Ok(stdout.to_string())
}
pub fn show_window_options(&self,
global: Option<bool>,
only_value: Option<bool>,
target_window: Option<&str>,
option: Option<&str>
) -> Result<Output, TmuxInterfaceError> {
let mut args: Vec<&str> = Vec::new();
if global.unwrap_or(false) { args.push(g_KEY); }
if only_value.unwrap_or(false) { args.push(v_KEY); }
target_window.and_then(|s| Some(args.extend_from_slice(&[t_KEY, &s])));
option.and_then(|s| Some(args.push(&s)));
let output = self.subcommand(TmuxInterface::SHOW_WINDOW_OPTIONS, &args)?;
Ok(output)
}
}