summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authora-kenji <aks.kenji@protonmail.com>2021-05-12 13:32:39 +0200
committera-kenji <aks.kenji@protonmail.com>2021-05-12 15:27:28 +0200
commit776a2c5151f768bfa40fda7471258527c106dd85 (patch)
treeea9c4f5b93f5f9ca9a517dd146f69b1817bc0a60 /src
parentce50d6e4061a3c24ec0f0d4644037f95fcda94d7 (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.rs5
-rw-r--r--src/common/input/handler.rs7
-rw-r--r--src/common/input/options.rs22
-rw-r--r--src/common/screen.rs4
-rw-r--r--src/main.rs15
-rw-r--r--src/server/mod.rs30
-rw-r--r--src/server/route.rs25
-rw-r--r--src/tests/integration/basic.rs15
-rw-r--r--src/tests/integration/close_pane.rs15
-rw-r--r--src/tests/integration/compatibility.rs22
-rw-r--r--src/tests/integration/layouts.rs3
-rw-r--r--src/tests/integration/move_focus_down.rs4
-rw-r--r--src/tests/integration/move_focus_left.rs5
-rw-r--r--src/tests/integration/move_focus_right.rs5
-rw-r--r--src/tests/integration/move_focus_up.rs4
-rw-r--r--src/tests/integration/resize_down.rs15
-rw-r--r--src/tests/integration/resize_left.rs15
-rw-r--r--src/tests/integration/resize_right.rs15
-rw-r--r--src/tests/integration/resize_up.rs15
-rw-r--r--src/tests/integration/tabs.rs10
-rw-r--r--src/tests/integration/terminal_window_resize.rs6
-rw-r--r--src/tests/integration/toggle_fullscreen.rs4
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(),