summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-07-05 15:13:51 +0200
committerGitHub <noreply@github.com>2024-07-05 15:13:51 +0200
commita6d6c0e4ff03c35cafb6f04363ecab856ee3682d (patch)
treeeadf1c24c4c6a1e4b7499b3cd047351fd29e52de
parent8e33b20559ecddcaba17e5cc8d6f05b638718cac (diff)
feat(ui): status bar redesign (#3475)
* work * work * working * get default mode from server and some ui responsiveness * work * finish design and get tests to pass * get e2e tests to pass * add classic layout * add classic layout assets * fix e2e tests * style(fmt): rustfmt * fix plugin system test * style(fmt): some cleanups
-rw-r--r--Cargo.lock1
-rw-r--r--default-plugins/status-bar/Cargo.toml1
-rw-r--r--default-plugins/status-bar/src/first_line.rs47
-rw-r--r--default-plugins/status-bar/src/main.rs30
-rw-r--r--default-plugins/status-bar/src/one_line_ui.rs1440
-rw-r--r--default-plugins/tab-bar/src/line.rs211
-rw-r--r--default-plugins/tab-bar/src/main.rs17
-rw-r--r--default-plugins/tab-bar/src/tab.rs2
-rw-r--r--src/tests/e2e/cases.rs132
-rw-r--r--src/tests/e2e/remote_runner.rs4
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__bracketed_paste.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__cannot_split_terminals_vertically_when_active_terminal_is_too_small.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__close_pane.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__detach_and_attach_session.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__focus_pane_with_mouse.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__lock_mode.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__mirrored_sessions-2.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__mirrored_sessions.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__move_tab_to_left.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__move_tab_to_left_until_it_wraps_around.snap5
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__move_tab_to_right.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__move_tab_to_right_until_it_wraps_around.snap5
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab-2.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_panes_and_same_tab.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs-2.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_different_tabs.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab-2.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__multiple_users_in_same_pane_and_tab.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__open_new_tab.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session.snap4
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__quit_and_resurrect_session_with_viewport_serialization.snap4
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_pane.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__resize_terminal_window.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane.snap10
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__scrolling_inside_a_pane_with_mouse.snap10
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__send_command_through_the_cli.snap8
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__split_terminals_vertically.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__start_without_pane_frames.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__starts_with_one_terminal.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__status_bar_loads_custom_keybindings.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__tmux_mode.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_floating_panes.snap10
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__toggle_pane_fullscreen.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__typing_exit_closes_pane.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__undo_rename_pane.snap6
-rw-r--r--src/tests/e2e/snapshots/zellij__tests__e2e__cases__undo_rename_tab.snap6
-rw-r--r--src/tests/e2e/steps.rs23
-rw-r--r--zellij-server/src/lib.rs12
-rw-r--r--zellij-server/src/plugins/mod.rs6
-rw-r--r--zellij-server/src/plugins/plugin_loader.rs19
-rw-r--r--zellij-server/src/plugins/plugin_map.rs2
-rw-r--r--zellij-server/src/plugins/unit/plugin_tests.rs7
-rw-r--r--zellij-server/src/plugins/unit/snapshots/zellij_server__plugins__plugin_tests__switch_to_mode_plugin_command.snap5
-rw-r--r--zellij-server/src/plugins/wasm_bridge.rs11
-rw-r--r--zellij-server/src/plugins/zellij_exports.rs1
-rw-r--r--zellij-server/src/route.rs17
-rw-r--r--zellij-server/src/screen.rs1
-rw-r--r--zellij-server/src/unit/screen_tests.rs4
-rw-r--r--zellij-utils/assets/layouts/classic.kdl13
-rw-r--r--zellij-utils/assets/layouts/classic.swap.kdl104
-rw-r--r--zellij-utils/assets/layouts/default.kdl2
-rw-r--r--zellij-utils/assets/layouts/default.swap.kdl2
-rw-r--r--zellij-utils/assets/prost/api.event.rs2
-rw-r--r--zellij-utils/src/data.rs1
-rw-r--r--zellij-utils/src/input/actions.rs31
-rw-r--r--zellij-utils/src/input/layout.rs17
-rw-r--r--zellij-utils/src/input/mod.rs2
-rw-r--r--zellij-utils/src/plugin_api/event.proto1
-rw-r--r--zellij-utils/src/plugin_api/event.rs9
-rw-r--r--zellij-utils/src/setup.rs14
-rw-r--r--zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments-2.snap18
71 files changed, 2208 insertions, 225 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 2803fb4cd..cfb942043 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3811,6 +3811,7 @@ dependencies = [
"serde",
"serde_json",
"thiserror",
+ "unicode-width",
"zellij-tile",
"zellij-tile-utils",
]
diff --git a/default-plugins/status-bar/Cargo.toml b/default-plugins/status-bar/Cargo.toml
index a2ca3175a..c1492c197 100644
--- a/default-plugins/status-bar/Cargo.toml
+++ b/default-plugins/status-bar/Cargo.toml
@@ -13,6 +13,7 @@ rand = "0.8.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
thiserror = "1.0.30"
+unicode-width = "0.1.8"
zellij-tile = { path = "../../zellij-tile" }
zellij-tile-utils = { path = "../../zellij-tile-utils" }
diff --git a/default-plugins/status-bar/src/first_line.rs b/default-plugins/status-bar/src/first_line.rs
index 1fffd7558..ee9b9478d 100644
--- a/default-plugins/status-bar/src/first_line.rs
+++ b/default-plugins/status-bar/src/first_line.rs
@@ -8,14 +8,16 @@ use crate::{
};
use crate::{ColoredElements, LinePart};
-struct KeyShortcut {
- mode: KeyMode,
- action: KeyAction,
- key: Option<KeyWithModifier>,
+#[derive(Debug)]
+pub struct KeyShortcut {
+ pub mode: KeyMode,
+ pub action: KeyAction,
+ pub key: Option<KeyWithModifier>,
}
-#[derive(PartialEq)]
-enum KeyAction {
+#[derive(Debug, Copy, Clone, PartialEq)]
+pub enum KeyAction {
+ Unlock,
Lock,
Pane,
Tab,
@@ -27,7 +29,8 @@ enum KeyAction {
Tmux,
}
-enum KeyMode {
+#[derive(Debug, Copy, Clone)]
+pub enum KeyMode {
Unselected,
UnselectedAlternate,
Selected,
@@ -42,6 +45,7 @@ impl KeyShortcut {
pub fn full_text(&self) -> String {
match self.action {
KeyAction::Lock => String::from("LOCK"),
+ KeyAction::Unlock => String::from("UNLOCK"),
KeyAction::Pane => String::from("PANE"),
KeyAction::Tab => String::from("TAB"),
KeyAction::Resize => String::from("RESIZE"),
@@ -82,6 +86,35 @@ impl KeyShortcut {
};
format!("{}", key)
}
+ pub fn get_key(&self) -> Option<KeyWithModifier> {
+ self.key.clone()
+ }
+ pub fn get_mode(&self) -> KeyMode {
+ self.mode
+ }
+ pub fn get_action(&self) -> KeyAction {
+ self.action
+ }
+ pub fn is_selected(&self) -> bool {
+ match self.mode {
+ KeyMode::Selected => true,
+ _ => false,
+ }
+ }
+ pub fn short_text(&self) -> String {
+ match self.action {
+ KeyAction::Lock => String::from("Lo"),
+ KeyAction::Unlock => String::from("Un"),
+ KeyAction::Pane => String::from("Pa"),
+ KeyAction::Tab => String::from("Ta"),
+ KeyAction::Resize => String::from("Re"),
+ KeyAction::Search => String::from("Se"),
+ KeyAction::Quit => String::from("Qu"),
+ KeyAction::Session => String::from("Se"),
+ KeyAction::Move => String::from("Mo"),
+ KeyAction::Tmux => String::from("Tm"),
+ }
+ }
}
/// Generate long mode shortcut tile.
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs
index 6fed529f4..7db9b09d9 100644
--- a/default-plugins/status-bar/src/main.rs
+++ b/default-plugins/status-bar/src/main.rs
@@ -1,4 +1,5 @@
mod first_line;
+mod one_line_ui;
mod second_line;
mod tip;
@@ -15,6 +16,7 @@ use zellij_tile::prelude::*;
use zellij_tile_utils::{palette_match, style};
use first_line::first_line;
+use one_line_ui::one_line_ui;
use second_line::{
floating_panes_are_visible, fullscreen_panes_to_hide, keybinds,
locked_floating_panes_are_visible, locked_fullscreen_panes_to_hide, system_clipboard_error,
@@ -35,6 +37,8 @@ struct State {
mode_info: ModeInfo,
text_copy_destination: Option<CopyDestination>,
display_system_clipboard_failure: bool,
+ classic_ui: bool,
+ base_mode_is_locked: bool,
}
register_plugin!(State);
@@ -177,9 +181,13 @@ fn color_elements(palette: Palette, different_color_alternates: bool) -> Colored
}
impl ZellijPlugin for State {
- fn load(&mut self, _configuration: BTreeMap<String, String>) {
+ fn load(&mut self, configuration: BTreeMap<String, String>) {
// TODO: Should be able to choose whether to use the cache through config.
self.tip_name = get_cached_tip_name();
+ self.classic_ui = configuration
+ .get("classic")
+ .map(|c| c == "true")
+ .unwrap_or(false);
set_selectable(false);
subscribe(&[
EventType::ModeUpdate,
@@ -198,6 +206,7 @@ impl ZellijPlugin for State {
should_render = true;
}