aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authora-kenji <aks.kenji@protonmail.com>2021-05-12 09:42:05 +0200
committera-kenji <aks.kenji@protonmail.com>2021-05-12 09:57:47 +0200
commit6ffd698d0a1a974f0cb80cb256f4d58e2c3d97f6 (patch)
tree47d16f195a9cb7e26750fcadb51f61a41e96788b /src
parentdocs(changelog): Add Option for Simplified Layout (diff)
downloadsl0ppij-6ffd698d0a1a974f0cb80cb256f4d58e2c3d97f6.tar.gz
sl0ppij-6ffd698d0a1a974f0cb80cb256f4d58e2c3d97f6.tar.xz
sl0ppij-6ffd698d0a1a974f0cb80cb256f4d58e2c3d97f6.zip
Slight rework of config loading.
Merges the cli and file configuration
Diffstat (limited to 'src')
-rw-r--r--src/cli.rs4
-rw-r--r--src/client/mod.rs6
-rw-r--r--src/common/input/options.rs44
-rw-r--r--src/common/screen.rs13
-rw-r--r--src/server/mod.rs15
5 files changed, 56 insertions, 26 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 6ab33d45..b95b5770 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -11,10 +11,6 @@ pub struct CliArgs {
#[structopt(long)]
pub max_panes: Option<usize>,
- /// Speficy, if a simplified layout should be used that is compatible with more fonts
- #[structopt(long)]
- pub simplified: bool,
-
/// Change where zellij looks for layouts and plugins
#[structopt(long)]
pub data_dir: Option<PathBuf>,
diff --git a/src/client/mod.rs b/src/client/mod.rs
index 8fcbc070..154f1437 100644
--- a/src/client/mod.rs
+++ b/src/client/mod.rs
@@ -15,6 +15,7 @@ use crate::common::{
errors::{ClientContext, ContextType},
input::config::Config,
input::handler::input_loop,
+ input::options::{ConfigOptions, Options},
os_input_output::ClientOsApi,
thread_bus::{SenderType, SenderWithContext, SyncChannelWithContext},
};
@@ -40,12 +41,15 @@ pub fn start_client(mut os_input: Box<dyn ClientOsApi>, opts: CliArgs, config: C
let mut command_is_executing = CommandIsExecuting::new();
+ let config_options: ConfigOptions =
+ Options::from_cli(&config.options, opts.option.clone()).into();
+
let full_screen_ws = os_input.get_terminal_size_using_fd(0);
os_input.connect_to_server();
os_input.send_to_server(ServerInstruction::NewClient(
full_screen_ws,
opts,
- config.options.clone(),
+ config_options,
));
os_input.set_raw_mode(0);
diff --git a/src/common/input/options.rs b/src/common/input/options.rs
index 3ff2fd8e..3bd3fc31 100644
--- a/src/common/input/options.rs
+++ b/src/common/input/options.rs
@@ -1,12 +1,23 @@
+//! Handles cli and configuration options
+use crate::cli::ConfigCli;
use serde::{Deserialize, Serialize};
use structopt::StructOpt;
#[derive(Clone, Default, Debug, PartialEq, Deserialize, Serialize, StructOpt)]
/// Options that can be set either through the config file,
/// or cli flags
+/// intermediate struct
pub struct Options {
- /// Allow plugins to use a more compatible font type
+ /// Allow plugins to use a more simplified layout
+ /// that is compatible with more fonts
#[structopt(long)]
+ pub simplified_ui: Option<bool>,
+}
+
+#[derive(Clone, Default, Debug, PartialEq, Deserialize, Serialize)]
+/// Merged version of the [`Options`] struct
+// TODO: Maybe a good candidate for a macro?
+pub struct ConfigOptions {
pub simplified_ui: bool,
}
@@ -18,4 +29,35 @@ impl Options {
Options::default()
}
}
+
+ /// Merges two [`Options`] structs, a `Some` in `other`
+ /// will supercede a `Some` in `self`
+ // TODO: Maybe a good candidate for a macro?
+ pub fn merge(&self, other: Options) -> Options {
+ let simplified_ui = if let Some(bool) = other.simplified_ui {
+ Some(bool)
+ } else {
+ self.simplified_ui
+ };
+
+ Options { simplified_ui }
+ }
+
+ pub fn from_cli(&self, other: Option<ConfigCli>) -> Options {
+ if let Some(ConfigCli::Options(options)) = other {
+ Options::merge(&self, options)
+ } else {
+ self.to_owned()
+ }
+ }
+}
+
+impl From<Options> for ConfigOptions {
+ fn from(options: Options) -> ConfigOptions {
+ let simplified_ui = options.simplified_ui;
+
+ ConfigOptions {
+ simplified_ui: simplified_ui.unwrap_or_default(),
+ }
+ }
}
diff --git a/src/common/screen.rs b/src/common/screen.rs
index 6f5a4cb3..804730d0 100644
--- a/src/common/screen.rs
+++ b/src/common/screen.rs
@@ -4,8 +4,7 @@ use std::collections::BTreeMap;
use std::os::unix::io::RawFd;
use std::str;
-use crate::cli::ConfigCli;
-use crate::common::input::options::Options;
+use crate::common::input::options::ConfigOptions;
use crate::common::pty::{PtyInstruction, VteBytes};
use crate::common::thread_bus::Bus;
use crate::errors::{ContextType, ScreenContext};
@@ -330,15 +329,11 @@ pub fn screen_thread_main(
bus: Bus<ScreenInstruction>,
max_panes: Option<usize>,
full_screen_ws: PositionAndSize,
- options: Option<ConfigCli>,
- config_options: Options,
+ config_options: ConfigOptions,
) {
let colors = bus.os_input.as_ref().unwrap().load_palette();
- let capabilities = if let Some(ConfigCli::Options(options)) = options {
- options.simplified_ui
- } else {
- config_options.simplified_ui
- };
+ let capabilities = config_options.simplified_ui;
+
let mut screen = Screen::new(
bus,
&full_screen_ws,
diff --git a/src/server/mod.rs b/src/server/mod.rs
index d9875727..4ef30ce2 100644
--- a/src/server/mod.rs
+++ b/src/server/mod.rs
@@ -12,7 +12,7 @@ use crate::client::ClientInstruction;
use crate::common::thread_bus::{Bus, ThreadSenders};
use crate::common::{
errors::{ContextType, ServerContext},
- input::{actions::Action, options::Options},
+ input::{actions::Action, options::ConfigOptions},
os_input_output::{set_permissions, ServerOsApi},
pty::{pty_thread_main, Pty, PtyInstruction},
screen::{screen_thread_main, ScreenInstruction},
@@ -30,7 +30,7 @@ use route::route_thread_main;
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum ServerInstruction {
TerminalResize(PositionAndSize),
- NewClient(PositionAndSize, CliArgs, Options),
+ NewClient(PositionAndSize, CliArgs, ConfigOptions),
Action(Action),
Render(Option<String>),
UnblockInputThread,
@@ -155,7 +155,7 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> {
fn init_session(
os_input: Box<dyn ServerOsApi>,
opts: CliArgs,
- config_options: Options,
+ config_options: ConfigOptions,
to_server: SenderWithContext<ServerInstruction>,
full_screen_ws: PositionAndSize,
) -> SessionMetaData {
@@ -214,16 +214,9 @@ fn init_session(
Some(os_input.clone()),
);
let max_panes = opts.max_panes;
- let options = opts.option;
move || {
- screen_thread_main(
- screen_bus,
- max_panes,
- full_screen_ws,
- options,
- config_options,
- );
+ screen_thread_main(screen_bus, max_panes, full_screen_ws, config_options);
}
})
.unwrap();