diff options
author | a-kenji <aks.kenji@protonmail.com> | 2021-05-12 13:32:39 +0200 |
---|---|---|
committer | a-kenji <aks.kenji@protonmail.com> | 2021-05-12 15:27:28 +0200 |
commit | 776a2c5151f768bfa40fda7471258527c106dd85 (patch) | |
tree | ea9c4f5b93f5f9ca9a517dd146f69b1817bc0a60 /src | |
parent | ce50d6e4061a3c24ec0f0d4644037f95fcda94d7 (diff) |
Fix Simplified Ui
Propagate the config now, in all the places, as opposed to
fallback to a default.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/mod.rs | 5 | ||||
-rw-r--r-- | src/common/input/handler.rs | 7 | ||||
-rw-r--r-- | src/common/input/options.rs | 22 | ||||
-rw-r--r-- | src/common/screen.rs | 4 | ||||
-rw-r--r-- | src/main.rs | 15 | ||||
-rw-r--r-- | src/server/mod.rs | 30 | ||||
-rw-r--r-- | src/server/route.rs | 25 | ||||
-rw-r--r-- | src/tests/integration/basic.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/close_pane.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/compatibility.rs | 22 | ||||
-rw-r--r-- | src/tests/integration/layouts.rs | 3 | ||||
-rw-r--r-- | src/tests/integration/move_focus_down.rs | 4 | ||||
-rw-r--r-- | src/tests/integration/move_focus_left.rs | 5 | ||||
-rw-r--r-- | src/tests/integration/move_focus_right.rs | 5 | ||||
-rw-r--r-- | src/tests/integration/move_focus_up.rs | 4 | ||||
-rw-r--r-- | src/tests/integration/resize_down.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/resize_left.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/resize_right.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/resize_up.rs | 15 | ||||
-rw-r--r-- | src/tests/integration/tabs.rs | 10 | ||||
-rw-r--r-- | src/tests/integration/terminal_window_resize.rs | 6 | ||||
-rw-r--r-- | src/tests/integration/toggle_fullscreen.rs | 4 |
22 files changed, 205 insertions, 56 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs index 5fb40096a..3dfb24aad 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -15,7 +15,7 @@ use crate::common::{ errors::{ClientContext, ContextType}, input::config::Config, input::handler::input_loop, - input::options::{ConfigOptions, Options}, + input::options::Options, os_input_output::ClientOsApi, thread_bus::{SenderType, SenderWithContext, SyncChannelWithContext}, }; @@ -46,8 +46,7 @@ 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 config_options = Options::from_cli(&config.options, opts.option.clone()); let full_screen_ws = os_input.get_terminal_size_using_fd(0); os_input.connect_to_server(); diff --git a/src/common/input/handler.rs b/src/common/input/handler.rs index 68a75448d..b3bbbd0c1 100644 --- a/src/common/input/handler.rs +++ b/src/common/input/handler.rs @@ -147,9 +147,12 @@ impl InputHandler { /// Creates a [`Help`] struct indicating the current [`InputMode`] and its keybinds /// (as pairs of [`String`]s). // TODO this should probably be automatically generated in some way -pub fn get_mode_info(mode: InputMode, palette: Palette) -> ModeInfo { +pub fn get_mode_info( + mode: InputMode, + palette: Palette, + capabilities: PluginCapabilities, +) -> ModeInfo { let mut keybinds: Vec<(String, String)> = vec![]; - let capabilities = PluginCapabilities { arrow_fonts: true }; match mode { InputMode::Normal | InputMode::Locked => {} InputMode::Resize => { diff --git a/src/common/input/options.rs b/src/common/input/options.rs index 3bd3fc31b..33625b654 100644 --- a/src/common/input/options.rs +++ b/src/common/input/options.rs @@ -6,18 +6,10 @@ 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 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, } @@ -34,8 +26,8 @@ impl Options { /// 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) + let simplified_ui = if other.simplified_ui { + true } else { self.simplified_ui }; @@ -51,13 +43,3 @@ impl Options { } } } - -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 804730d07..bc99f9532 100644 --- a/src/common/screen.rs +++ b/src/common/screen.rs @@ -4,7 +4,7 @@ use std::collections::BTreeMap; use std::os::unix::io::RawFd; use std::str; -use crate::common::input::options::ConfigOptions; +use crate::common::input::options::Options; use crate::common::pty::{PtyInstruction, VteBytes}; use crate::common::thread_bus::Bus; use crate::errors::{ContextType, ScreenContext}; @@ -329,7 +329,7 @@ pub fn screen_thread_main( bus: Bus<ScreenInstruction>, max_panes: Option<usize>, full_screen_ws: PositionAndSize, - config_options: ConfigOptions, + config_options: Options, ) { let colors = bus.os_input.as_ref().unwrap().load_palette(); let capabilities = config_options.simplified_ui; diff --git a/src/main.rs b/src/main.rs index ffc2373e1..cb016067f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,7 +12,7 @@ use structopt::StructOpt; use crate::cli::CliArgs; use crate::command_is_executing::CommandIsExecuting; -use crate::common::input::config::Config; +use crate::common::input::{config::Config, options::Options}; use crate::os_input_output::{get_client_os_input, get_server_os_input, ClientOsApi, ServerOsApi}; use crate::utils::{ consts::{ZELLIJ_TMP_DIR, ZELLIJ_TMP_LOG_DIR}, @@ -29,6 +29,8 @@ pub fn main() { std::process::exit(1); } }; + let config_options = Options::from_cli(&config.options, opts.option.clone()); + if let Some(crate::cli::ConfigCli::GenerateCompletion { shell }) = opts.option { let shell = match shell.as_ref() { "bash" => structopt::clap::Shell::Bash, @@ -51,7 +53,13 @@ pub fn main() { atomic_create_dir(&*ZELLIJ_TMP_LOG_DIR).unwrap(); let server_os_input = get_server_os_input(); let os_input = get_client_os_input(); - start(Box::new(os_input), opts, Box::new(server_os_input), config); + start( + Box::new(os_input), + opts, + Box::new(server_os_input), + config, + config_options, + ); } } pub fn start( @@ -59,8 +67,9 @@ pub fn start( opts: CliArgs, server_os_input: Box<dyn ServerOsApi>, config: Config, + config_options: Options, ) { - let ipc_thread = start_server(server_os_input); + let ipc_thread = start_server(server_os_input, config_options); start_client(client_os_input, opts, config); drop(ipc_thread.join()); } diff --git a/src/server/mod.rs b/src/server/mod.rs index 4ef30ce29..622a32576 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -6,13 +6,14 @@ use std::sync::{Arc, RwLock}; use std::thread; use std::{path::PathBuf, sync::mpsc::channel}; use wasmer::Store; +use zellij_tile::data::PluginCapabilities; use crate::cli::CliArgs; use crate::client::ClientInstruction; use crate::common::thread_bus::{Bus, ThreadSenders}; use crate::common::{ errors::{ContextType, ServerContext}, - input::{actions::Action, options::ConfigOptions}, + input::{actions::Action, options::Options}, os_input_output::{set_permissions, ServerOsApi}, pty::{pty_thread_main, Pty, PtyInstruction}, screen::{screen_thread_main, ScreenInstruction}, @@ -30,7 +31,7 @@ use route::route_thread_main; #[derive(Serialize, Deserialize, Debug, Clone)] pub enum ServerInstruction { TerminalResize(PositionAndSize), - NewClient(PositionAndSize, CliArgs, ConfigOptions), + NewClient(PositionAndSize, CliArgs, Options), Action(Action), Render(Option<String>), UnblockInputThread, @@ -55,7 +56,10 @@ impl Drop for SessionMetaData { } } -pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> { +pub fn start_server( + os_input: Box<dyn ServerOsApi>, + config_options: Options, +) -> thread::JoinHandle<()> { let (to_server, server_receiver): ChannelWithContext<ServerInstruction> = channel(); let to_server = SenderWithContext::new(SenderType::Sender(to_server)); let sessions: Arc<RwLock<Option<SessionMetaData>>> = Arc::new(RwLock::new(None)); @@ -67,8 +71,11 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> { let sessions = sessions.clone(); let os_input = os_input.clone(); let to_server = to_server.clone(); + let capabilities = PluginCapabilities { + arrow_fonts: !config_options.simplified_ui, + }; - move || route_thread_main(sessions, os_input, to_server) + move || route_thread_main(sessions, os_input, to_server, capabilities) }) .unwrap(); #[cfg(not(test))] @@ -78,6 +85,9 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> { let os_input = os_input.clone(); let sessions = sessions.clone(); let to_server = to_server.clone(); + let capabilities = PluginCapabilities { + arrow_fonts: config_options.simplified_ui, + }; move || { drop(std::fs::remove_file(&*ZELLIJ_IPC_PIPE)); let listener = LocalSocketListener::bind(&**ZELLIJ_IPC_PIPE).unwrap(); @@ -96,7 +106,14 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> { let os_input = os_input.clone(); let to_server = to_server.clone(); - move || route_thread_main(sessions, os_input, to_server) + move || { + route_thread_main( + sessions, + os_input, + to_server, + capabilities, + ) + } }) .unwrap(); } @@ -155,7 +172,7 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>) -> thread::JoinHandle<()> { fn init_session( os_input: Box<dyn ServerOsApi>, opts: CliArgs, - config_options: ConfigOptions, + config_options: Options, to_server: SenderWithContext<ServerInstruction>, full_screen_ws: PositionAndSize, ) -> SessionMetaData { @@ -214,6 +231,7 @@ fn init_session( Some(os_input.clone()), ); let max_panes = opts.max_panes; + let config_options = config_options; move || { screen_thread_main(screen_bus, max_panes, full_screen_ws, config_options); diff --git a/src/server/route.rs b/src/server/route.rs index 668cdfbd0..bd4b1b608 100644 --- a/src/server/route.rs +++ b/src/server/route.rs @@ -1,6 +1,6 @@ use std::sync::{Arc, RwLock}; -use zellij_tile::data::Event; +use zellij_tile::data::{Event, PluginCapabilities}; use crate::common::errors::{ContextType, ServerContext}; use crate::common::input::actions::{Action, Direction}; @@ -12,7 +12,12 @@ use crate::common::thread_bus::SenderWithContext; use crate::common::wasm_vm::PluginInstruction; use crate::server::{ServerInstruction, SessionMetaData}; -fn route_action(action: Action, session: &SessionMetaData, os_input: &dyn ServerOsApi) { +fn route_action( + action: Action, + session: &SessionMetaData, + os_input: &dyn ServerOsApi, + capabilities: PluginCapabilities, +) { match action { Action::Write(val) => { session @@ -30,12 +35,16 @@ fn route_action(action: Action, session: &SessionMetaData, os_input: &dyn Server .senders .send_to_plugin(PluginInstruction::Update( None, - Event::ModeUpdate(get_mode_info(mode, palette)), + Event::ModeUpdate(get_mode_info(mode, palette, capabilities)), )) .unwrap(); session .senders - .send_to_screen(ScreenInstruction::ChangeMode(get_mode_info(mode, palette))) + .send_to_screen(ScreenInstruction::ChangeMode(get_mode_info( + mode, + palette, + capabilities, + ))) .unwrap(); session .senders @@ -181,6 +190,7 @@ pub fn route_thread_main( sessions: Arc<RwLock<Option<SessionMetaData>>>, mut os_input: Box<dyn ServerOsApi>, to_server: SenderWithContext<ServerInstruction>, + capabilities: PluginCapabilities, ) { loop { let (instruction, mut err_ctx) = os_input.recv_from_client(); @@ -192,7 +202,12 @@ pub fn route_thread_main( break; } ServerInstruction::Action(action) => { - route_action(action, rlocked_sessions.as_ref().unwrap(), &*os_input); + route_action( + action, + rlocked_sessions.as_ref().unwrap(), + &*os_input, + capabilities, + ); } ServerInstruction::TerminalResize(new_size) => { rlocked_sessions diff --git a/src/tests/integration/basic.rs b/src/tests/integration/basic.rs index c8305cabd..4d2c4878b 100644 --- a/src/tests/integration/basic.rs +++ b/src/tests/integration/basic.rs @@ -1,7 +1,7 @@ use crate::panes::PositionAndSize; use ::insta::assert_snapshot; -use crate::common::input::config::Config; +use crate::common::input::{config::Config, options::Options}; use crate::tests::fakes::FakeInputOutput; use crate::tests::utils::commands::{ PANE_MODE, QUIT, SCROLL_DOWN_IN_SCROLL_MODE, SCROLL_MODE, SCROLL_PAGE_DOWN_IN_SCROLL_MODE, @@ -32,6 +32,7 @@ pub fn starts_with_one_terminal() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -60,6 +61,7 @@ pub fn split_terminals_vertically() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -88,6 +90,7 @@ pub fn split_terminals_horizontally() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -123,6 +126,7 @@ pub fn split_largest_terminal() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -151,6 +155,7 @@ pub fn cannot_split_terminals_vertically_when_active_terminal_is_too_small() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -179,6 +184,7 @@ pub fn cannot_split_terminals_horizontally_when_active_terminal_is_too_small() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -207,6 +213,7 @@ pub fn cannot_split_largest_terminal_when_there_is_no_room() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -243,6 +250,7 @@ pub fn scrolling_up_inside_a_pane() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -281,6 +289,7 @@ pub fn scrolling_down_inside_a_pane() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -316,6 +325,7 @@ pub fn scrolling_page_up_inside_a_pane() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -354,6 +364,7 @@ pub fn scrolling_page_down_inside_a_pane() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -393,6 +404,7 @@ pub fn max_panes() { opts, Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer @@ -430,6 +442,7 @@ pub fn toggle_focused_pane_fullscreen() { opts, Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output .stdout_writer diff --git a/src/tests/integration/close_pane.rs b/src/tests/integration/close_pane.rs index 869debed1..d151f63d3 100644 --- a/src/tests/integration/close_pane.rs +++ b/src/tests/integration/close_pane.rs @@ -5,7 +5,7 @@ use crate::tests::fakes::FakeInputOutput; use crate::tests::utils::{get_next_to_last_snapshot, get_output_frame_snapshots}; use crate::{start, CliArgs}; -use crate::common::input::config::Config; +use crate::common::input::{config::Config, options::Options}; use crate::tests::utils::commands::{ CLOSE_PANE_IN_PANE_MODE, ESC, MOVE_FOCUS_IN_PANE_MODE, PANE_MODE, QUIT, RESIZE_DOWN_IN_RESIZE_MODE, RESIZE_LEFT_IN_RESIZE_MODE, RESIZE_MODE, RESIZE_UP_IN_RESIZE_MODE, @@ -45,6 +45,7 @@ pub fn close_pane_with_another_pane_above_it() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -88,6 +89,7 @@ pub fn close_pane_with_another_pane_below_it() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -128,6 +130,7 @@ pub fn close_pane_with_another_pane_to_the_left() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -169,6 +172,7 @@ pub fn close_pane_with_another_pane_to_the_right() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -215,6 +219,7 @@ pub fn close_pane_with_multiple_panes_above_it() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -259,6 +264,7 @@ pub fn close_pane_with_multiple_panes_below_it() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -305,6 +311,7 @@ pub fn close_pane_with_multiple_panes_to_the_left() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -349,6 +356,7 @@ pub fn close_pane_with_multiple_panes_to_the_right() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -415,6 +423,7 @@ pub fn close_pane_with_multiple_panes_above_it_away_from_screen_edges() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -477,6 +486,7 @@ pub fn close_pane_with_multiple_panes_below_it_away_from_screen_edges() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -541,6 +551,7 @@ pub fn close_pane_with_multiple_panes_to_the_left_away_from_screen_edges() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -605,6 +616,7 @@ pub fn close_pane_with_multiple_panes_to_the_right_away_from_screen_edges() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), + Options::default(), ); let output_frames = fake_input_output @@ -642,6 +654,7 @@ pub fn closing_last_pane_exits_app() { CliArgs::default(), Box::new(fake_input_output.clone()), Config::default(), |