From c26a6bcf566d1a332ab795107852be004669d683 Mon Sep 17 00:00:00 2001 From: har7an <99636919+har7an@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:06:56 +0000 Subject: [PATCH] refactor(crates): move shared contents from zellij tile to zellij utils (#1541) * zellij-tile: Move `data` to zellij-utils The rationale behind this is that all components of zellij access the data structures defined in this module, as they define some of the most basic types in the application. However, so far zellij-tile is treated like a separate crate from the rest of the program in that it is the only one that doesn't have access to `zellij-utils`, which contains a lot of other data structures used throughout zellij. This poses issues as discussed in https://github.com/zellij-org/zellij/pull/1242 and is one of the reasons why the keybindings in the status bar default plugin can't be updated dynamically. It is also the main reason for why the keybindings are currently passed to the plugin as strings: The plugins only have access to `zellij-tile`, but since this is a dependency of `zellij-utils`, it can't import `zellij-utils` to access the keybindings. Other weird side-effect are that in some places `server` and `client` have to access the `zellij-tile` contents "through" `zellij-utils`, as in `use zellij_utils::zellij_tile::prelude::*`. By moving these central data structures to one common shared crate (`zellij-utils`), `zellij-tile` will be enabled to import `zellij-utils` like `screen` and `client` already do. This will, next to other things, allow dropping a lot of `std::fmt::Fmt` impls needed to convert core data structures into strings and as a consequence, a lot of string parsing in the first place. * utils: Integrate new `data` module, bump rust ver Integrates the `data` module that was previously part of `zellij-tile` to allow sharing the contained data structures between all components of zellij. This allows `zellij-tile` to use `utils` as a dependency. However, since `tile` is build against the wasm target, it cannot include all of `zellij-utils`, since a lot of dependencies there cannot compile with `wasm` as target (Examples include: termwiz, log4rs, async-std). Thus we make all the dependencies that cannot compile against `wasm` optional and introduce a new feature `full` that will compile the crate with all dependencies. Along with this, modify `lib.rs` to include most of the data structures only when compiling against the `full` feature. This makes the compiles of `zellij-tile` lighter, as it doesn't include all of `utils`. As a side effect, due to the dependency notation for the optional dependencies (See https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies), we bump the rust toolchain version to 1.60.0. * tile: Import `data` from zellij-utils Add `zellij-utils` as a dependency to `zellij-tile` and allow us access to the `data` module defined there. Update the re-export in the `prelude` such that from all of the plugins points of view *absolutely nothing changes*. * utils: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. * client: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * server: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. Also unify the imports for the `data` module members: We import all of the through `data::` now, not through a mixture of `data::` and `prelude::`. Add the "full" feature flag to the `zellij-utils` dependency so it includes all the components we need. * tests: Fix `data` module dependency Since the `data` module has been migrated from `zellij-tile` to `zellij-utils`, we import it from `zellij-utils` directly now. * utils: Remove "full" feature in favor of conditional compilation using `target_family`. Replace the rust 1.60 method of specifying optional dependencies based on features and optionally include the dependencies only when not building for wasm instead. (I.e. `cfg(not(target_family = "wasm"))`) * cargo: Update module dependencies since `client`, `server` and `tile` now all depend on `utils` only. --- Cargo.lock | 5 ++- src/tests/e2e/remote_runner.rs | 3 +- zellij-client/Cargo.toml | 1 - zellij-client/src/fake_client.rs | 4 +-- zellij-client/src/input_handler.rs | 22 ++++++------ zellij-client/src/lib.rs | 3 +- zellij-client/src/os_input_output.rs | 4 +-- zellij-client/src/stdin_ansi_parser.rs | 12 ++++--- zellij-client/src/unit/input_handler_tests.rs | 5 +-- zellij-server/Cargo.toml | 1 - zellij-server/src/lib.rs | 4 +-- zellij-server/src/os_input_output.rs | 4 +-- zellij-server/src/panes/floating_panes/mod.rs | 9 ++--- zellij-server/src/panes/grid.rs | 4 +-- zellij-server/src/panes/plugin_pane.rs | 2 +- zellij-server/src/panes/terminal_character.rs | 3 +- zellij-server/src/panes/terminal_pane.rs | 3 +- zellij-server/src/panes/tiled_panes/mod.rs | 5 +-- zellij-server/src/panes/unit/grid_tests.rs | 2 +- .../src/panes/unit/terminal_pane_tests.rs | 7 ++-- zellij-server/src/route.rs | 3 +- zellij-server/src/screen.rs | 8 ++--- zellij-server/src/tab/clipboard.rs | 3 +- zellij-server/src/tab/mod.rs | 5 ++- .../src/tab/unit/tab_integration_tests.rs | 3 +- zellij-server/src/tab/unit/tab_tests.rs | 3 +- zellij-server/src/ui/boundaries.rs | 5 ++- zellij-server/src/ui/pane_boundaries_frame.rs | 3 +- zellij-server/src/ui/pane_contents_and_ui.rs | 5 ++- zellij-server/src/unit/screen_tests.rs | 2 +- zellij-server/src/wasm_vm.rs | 4 +-- zellij-tile/Cargo.toml | 1 + zellij-tile/src/lib.rs | 3 +- zellij-tile/src/prelude.rs | 2 +- zellij-tile/src/shim.rs | 3 +- zellij-utils/Cargo.toml | 17 +++++----- {zellij-tile => zellij-utils}/src/data.rs | 0 zellij-utils/src/input/actions.rs | 2 +- zellij-utils/src/input/keybinds.rs | 2 +- zellij-utils/src/input/mod.rs | 8 ++--- zellij-utils/src/input/options.rs | 2 +- zellij-utils/src/input/plugins.rs | 2 +- zellij-utils/src/input/theme.rs | 3 +- zellij-utils/src/input/unit/keybinds_test.rs | 3 +- zellij-utils/src/ipc.rs | 6 +--- zellij-utils/src/lib.rs | 34 +++++++++++-------- zellij-utils/src/setup.rs | 3 +- zellij-utils/src/shared.rs | 2 +- 48 files changed, 108 insertions(+), 132 deletions(-) rename {zellij-tile => zellij-utils}/src/data.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index d189731f..337f7b7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3265,7 +3265,6 @@ dependencies = [ "insta", "log", "mio", - "zellij-tile", "zellij-utils", ] @@ -3292,7 +3291,6 @@ dependencies = [ "uuid", "wasmer", "wasmer-wasi", - "zellij-tile", "zellij-utils", ] @@ -3305,6 +3303,7 @@ dependencies = [ "serde_json", "strum", "strum_macros", + "zellij-utils", ] [[package]] @@ -3343,13 +3342,13 @@ dependencies = [ "signal-hook 0.3.14", "strip-ansi-escapes", "strum", + "strum_macros", "tempfile", "termwiz", "thiserror", "unicode-width", "url", "vte", - "zellij-tile", ] [[package]] diff --git a/src/tests/e2e/remote_runner.rs b/src/tests/e2e/remote_runner.rs index 309dc750..9e556e10 100644 --- a/src/tests/e2e/remote_runner.rs +++ b/src/tests/e2e/remote_runner.rs @@ -2,10 +2,9 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; use zellij_server::panes::{LinkHandler, TerminalPane}; +use zellij_utils::data::{Palette, Style}; use zellij_utils::pane_size::{Dimension, PaneGeom, Size}; use zellij_utils::vte; -use zellij_utils::zellij_tile::data::Palette; -use zellij_utils::zellij_tile::prelude::Style; use ssh2::Session; use std::io::prelude::*; diff --git a/zellij-client/Cargo.toml b/zellij-client/Cargo.toml index 1e937fe2..98a2426b 100644 --- a/zellij-client/Cargo.toml +++ b/zellij-client/Cargo.toml @@ -11,7 +11,6 @@ license = "MIT" [dependencies] mio = { version = "0.7.11", features = ['os-ext'] } zellij-utils = { path = "../zellij-utils/", version = "0.31.0" } -zellij-tile = { path = "../zellij-tile/", version = "0.31.0" } log = "0.4.17" [dev-dependencies] diff --git a/zellij-client/src/fake_client.rs b/zellij-client/src/fake_client.rs index 2199e12f..7338d633 100644 --- a/zellij-client/src/fake_client.rs +++ b/zellij-client/src/fake_client.rs @@ -3,8 +3,6 @@ //! Multiple actions at the same time can be dispatched. use log::debug; use std::{fs, path::PathBuf, thread}; -use zellij_tile::prelude::{ClientId, Style}; -use zellij_utils::errors::ContextType; use crate::{ command_is_executing::CommandIsExecuting, input_handler::input_actions, @@ -14,6 +12,8 @@ use crate::{ use zellij_utils::{ channels::{self, ChannelWithContext, SenderWithContext}, cli::CliArgs, + data::{ClientId, Style}, + errors::ContextType, input::{actions::Action, config::Config, layout::LayoutFromYaml, options::Options}, ipc::{ClientAttributes, ClientToServerMsg, ServerToClientMsg}, }; diff --git a/zellij-client/src/input_handler.rs b/zellij-client/src/input_handler.rs index 18ccf35b..3f92c537 100644 --- a/zellij-client/src/input_handler.rs +++ b/zellij-client/src/input_handler.rs @@ -1,13 +1,4 @@ //! Main input logic. -use zellij_utils::{ - input::{ - mouse::{MouseButton, MouseEvent}, - options::Options, - }, - termwiz::input::InputEvent, - zellij_tile, -}; - use crate::{ os_input_output::ClientOsApi, stdin_ansi_parser::{AnsiStdinInstructionOrKeys, StdinAnsiParser}, @@ -15,13 +6,20 @@ use crate::{ }; use zellij_utils::{ channels::{Receiver, SenderWithContext, OPENCALLS}, + data::{InputMode, Key}, errors::{ContextType, ErrorContext}, - input::{actions::Action, cast_termwiz_key, config::Config, keybinds::Keybinds}, + input::{ + actions::Action, + cast_termwiz_key, + config::Config, + keybinds::Keybinds, + mouse::{MouseButton, MouseEvent}, + options::Options, + }, ipc::{ClientToServerMsg, ExitReason}, + termwiz::input::InputEvent, }; -use zellij_tile::data::{InputMode, Key}; - /// Handles the dispatching of [`Action`]s according to the current /// [`InputMode`], and keep tracks of the current [`InputMode`]. struct InputHandler { diff --git a/zellij-client/src/lib.rs b/zellij-client/src/lib.rs index aeb74abb..9790984e 100644 --- a/zellij-client/src/lib.rs +++ b/zellij-client/src/lib.rs @@ -14,16 +14,15 @@ use std::io::{self, Write}; use std::path::Path; use std::process::Command; use std::thread; -use zellij_tile::prelude::{ClientId, Style}; use crate::{ command_is_executing::CommandIsExecuting, input_handler::input_loop, os_input_output::ClientOsApi, stdin_handler::stdin_loop, }; -use zellij_tile::data::InputMode; use zellij_utils::{ channels::{self, ChannelWithContext, SenderWithContext}, consts::ZELLIJ_IPC_PIPE, + data::{ClientId, InputMode, Style}, envs, errors::{ClientContext, ContextType, ErrorInstruction}, input::{actions::Action, config::Config, options::Options}, diff --git a/zellij-client/src/os_input_output.rs b/zellij-client/src/os_input_output.rs index a344f940..60c22cc9 100644 --- a/zellij-client/src/os_input_output.rs +++ b/zellij-client/src/os_input_output.rs @@ -1,5 +1,5 @@ use zellij_utils::pane_size::Size; -use zellij_utils::{interprocess, libc, nix, signal_hook, zellij_tile}; +use zellij_utils::{interprocess, libc, nix, signal_hook}; use interprocess::local_socket::LocalSocketStream; use mio::{unix::SourceFd, Events, Interest, Poll, Token}; @@ -11,8 +11,8 @@ use std::os::unix::io::RawFd; use std::path::Path; use std::sync::{Arc, Mutex}; use std::{io, thread, time}; -use zellij_tile::data::Palette; use zellij_utils::{ + data::Palette, errors::ErrorContext, ipc::{ClientToServerMsg, IpcReceiverWithContext, IpcSenderWithContext, ServerToClientMsg}, shared::default_palette, diff --git a/zellij-client/src/stdin_ansi_parser.rs b/zellij-client/src/stdin_ansi_parser.rs index a3ab117c..25f0e4fb 100644 --- a/zellij-client/src/stdin_ansi_parser.rs +++ b/zellij-client/src/stdin_ansi_parser.rs @@ -1,8 +1,10 @@ -use zellij_utils::pane_size::SizeInPixels; - -use zellij_utils::{ipc::PixelDimensions, lazy_static::lazy_static, regex::Regex}; - -use zellij_tile::data::{CharOrArrow, Key}; +use zellij_utils::{ + data::{CharOrArrow, Key}, + ipc::PixelDimensions, + lazy_static::lazy_static, + pane_size::SizeInPixels, + regex::Regex, +}; pub struct StdinAnsiParser { expected_ansi_instructions: usize, diff --git a/zellij-client/src/unit/input_handler_tests.rs b/zellij-client/src/unit/input_handler_tests.rs index 8fe4a5af..b772eb5c 100644 --- a/zellij-client/src/unit/input_handler_tests.rs +++ b/zellij-client/src/unit/input_handler_tests.rs @@ -1,11 +1,11 @@ use super::input_loop; +use zellij_utils::data::{InputMode, Palette}; use zellij_utils::input::actions::{Action, Direction}; use zellij_utils::input::config::Config; use zellij_utils::input::options::Options; use zellij_utils::nix; use zellij_utils::pane_size::{Size, SizeInPixels}; use zellij_utils::termwiz::input::{InputEvent, KeyCode, KeyEvent, Modifiers}; -use zellij_utils::zellij_tile::data::Palette; use crate::InputInstruction; use crate::{ @@ -15,12 +15,9 @@ use crate::{ use std::path::Path; -use zellij_utils::zellij_tile; - use std::io; use std::os::unix::io::RawFd; use std::sync::{Arc, Mutex}; -use zellij_tile::data::InputMode; use zellij_utils::{ errors::ErrorContext, ipc::{ClientToServerMsg, PixelDimensions, ServerToClientMsg}, diff --git a/zellij-server/Cargo.toml b/zellij-server/Cargo.toml index eba00edc..4154571e 100644 --- a/zellij-server/Cargo.toml +++ b/zellij-server/Cargo.toml @@ -22,7 +22,6 @@ wasmer = "1.0.0" wasmer-wasi = "1.0.0" cassowary = "0.3.0" zellij-utils = { path = "../zellij-utils/", version = "0.31.0" } -zellij-tile = { path = "../zellij-tile/", version = "0.31.0" } log = "0.4.17" typetag = "0.1.7" chrono = "0.4.19" diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs index 00b5dbb8..490837d5 100644 --- a/zellij-server/src/lib.rs +++ b/zellij-server/src/lib.rs @@ -20,14 +20,11 @@ use std::{ sync::{Arc, Mutex, RwLock}, thread, }; -use zellij_tile::prelude::Style; use zellij_utils::envs; use zellij_utils::nix::sys::stat::{umask, Mode}; use zellij_utils::pane_size::Size; -use zellij_utils::zellij_tile; use wasmer::Store; -use zellij_tile::data::{Event, PluginCapabilities}; use crate::{ os_input_output::ServerOsApi, @@ -41,6 +38,7 @@ use zellij_utils::{ channels::{self, ChannelWithContext, SenderWithContext}, cli::CliArgs, consts::{DEFAULT_SCROLL_BUFFER_SIZE, SCROLL_BUFFER_SIZE}, + data::{Event, PluginCapabilities, Style}, errors::{ContextType, ErrorInstruction, ServerContext}, input::{ command::{RunCommand, TerminalAction}, diff --git a/zellij-server/src/os_input_output.rs b/zellij-server/src/os_input_output.rs index 5059a8fc..b4384165 100644 --- a/zellij-server/src/os_input_output.rs +++ b/zellij-server/src/os_input_output.rs @@ -11,7 +11,7 @@ use std::path::PathBuf; use std::process::{Child, Command}; use std::sync::{Arc, Mutex}; -use zellij_utils::{async_std, interprocess, libc, nix, signal_hook, zellij_tile}; +use zellij_utils::{async_std, interprocess, libc, nix, signal_hook}; use async_std::fs::File as AsyncFile; use async_std::os::unix::io::FromRawFd; @@ -25,8 +25,8 @@ use nix::sys::termios; use nix::unistd; use signal_hook::consts::*; -use zellij_tile::data::Palette; use zellij_utils::{ + data::Palette, input::command::{RunCommand, TerminalAction}, ipc::{ClientToServerMsg, IpcReceiverWithContext, IpcSenderWithContext, ServerToClientMsg}, shared::default_palette, diff --git a/zellij-server/src/panes/floating_panes/mod.rs b/zellij-server/src/panes/floating_panes/mod.rs index 8434ae39..442a4dd6 100644 --- a/zellij-server/src/panes/floating_panes/mod.rs +++ b/zellij-server/src/panes/floating_panes/mod.rs @@ -1,6 +1,5 @@ -use zellij_tile::prelude::Style; mod floating_pane_grid; -use zellij_utils::{position::Position, zellij_tile}; +use zellij_utils::position::Position; use crate::tab::Pane; use floating_pane_grid::FloatingPaneGrid; @@ -16,8 +15,10 @@ use std::cell::RefCell; use std::collections::{BTreeMap, HashMap, HashSet}; use std::rc::Rc; use std::time::Instant; -use zellij_tile::data::ModeInfo; -use zellij_utils::pane_size::{Offset, PaneGeom, Size, Viewport}; +use zellij_utils::{ + data::{ModeInfo, Style}, + pane_size::{Offset, PaneGeom, Size, Viewport}, +}; macro_rules! resize_pty { ($pane:expr, $os_input:expr) => { diff --git a/zellij-server/src/panes/grid.rs b/zellij-server/src/panes/grid.rs index 3fed2b7f..23df7948 100644 --- a/zellij-server/src/panes/grid.rs +++ b/zellij-server/src/panes/grid.rs @@ -12,16 +12,16 @@ use std::{ use zellij_utils::{ consts::{DEFAULT_SCROLL_BUFFER_SIZE, SCROLL_BUFFER_SIZE}, + data::{Palette, PaletteColor}, pane_size::SizeInPixels, position::Position, - vte, zellij_tile, + vte, }; const TABSTOP_WIDTH: usize = 8; // TODO: is this always right? pub const MAX_TITLE_STACK_SIZE: usize = 1000; use vte::{Params, Perform}; -use zellij_tile::data::{Palette, PaletteColor}; use zellij_utils::{consts::VERSION, shared::version_number}; use crate::output::{CharacterChunk, OutputBuffer}; diff --git a/zellij-server/src/panes/plugin_pane.rs b/zellij-server/src/panes/plugin_pane.rs index 244e8b25..87e0ac7e 100644 --- a/zellij-server/src/panes/plugin_pane.rs +++ b/zellij-server/src/panes/plugin_pane.rs @@ -12,9 +12,9 @@ use crate::ClientId; use zellij_utils::pane_size::Offset; use zellij_utils::position::Position; use zellij_utils::shared::ansi_len; -use zellij_utils::zellij_tile::prelude::{Event, InputMode, Mouse, PaletteColor}; use zellij_utils::{ channels::SenderWithContext, + data::{Event, InputMode, Mouse, PaletteColor}, pane_size::{Dimension, PaneGeom}, shared::make_terminal_title, }; diff --git a/zellij-server/src/panes/terminal_character.rs b/zellij-server/src/panes/terminal_character.rs index 19f4ee42..2e4b4e35 100644 --- a/zellij-server/src/panes/terminal_character.rs +++ b/zellij-server/src/panes/terminal_character.rs @@ -3,10 +3,9 @@ use std::fmt::{self, Debug, Display, Formatter}; use std::ops::{Index, IndexMut}; use unicode_width::UnicodeWidthChar; -use zellij_utils::vte::ParamsIter; +use zellij_utils::{data::PaletteColor, vte::ParamsIter}; use crate::panes::alacritty_functions::parse_sgr_color; -use zellij_tile::data::PaletteColor; pub const EMPTY_TERMINAL_CHARACTER: TerminalCharacter = TerminalCharacter { character: ' ', diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index 060bdd8f..64af5859 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -13,15 +13,14 @@ use std::fmt::Debug; use std::os::unix::io::RawFd; use std::rc::Rc; use std::time::{self, Instant}; -use zellij_tile::prelude::Style; use zellij_utils::pane_size::Offset; use zellij_utils::{ + data::{InputMode, Palette, PaletteColor, Style}, pane_size::SizeInPixels, pane_size::{Dimension, PaneGeom}, position::Position, shared::make_terminal_title, vte, - zellij_tile::data::{InputMode, Palette, PaletteColor}, }; pub const SELECTION_SCROLL_INTERVAL_MS: u64 = 10; diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs index 143aec43..03fa0c06 100644 --- a/zellij-server/src/panes/tiled_panes/mod.rs +++ b/zellij-server/src/panes/tiled_panes/mod.rs @@ -1,9 +1,6 @@ mod pane_resizer; mod tiled_pane_grid; -use zellij_tile::prelude::Style; -use zellij_utils::zellij_tile; - use crate::tab::{Pane, MIN_TERMINAL_HEIGHT, MIN_TERMINAL_WIDTH}; use tiled_pane_grid::{split, TiledPaneGrid}; @@ -15,8 +12,8 @@ use std::cell::RefCell; use std::collections::{BTreeMap, HashMap, HashSet}; use std::rc::Rc; use std::time::Instant; -use zellij_tile::data::ModeInfo; use zellij_utils::{ + data::{ModeInfo, Style}, input::layout::Direction, pane_size::{Offset, PaneGeom, Size, SizeInPixels, Viewport}, }; diff --git a/zellij-server/src/panes/unit/grid_tests.rs b/zellij-server/src/panes/unit/grid_tests.rs index 42c4e329..057c1466 100644 --- a/zellij-server/src/panes/unit/grid_tests.rs +++ b/zellij-server/src/panes/unit/grid_tests.rs @@ -3,7 +3,7 @@ use crate::panes::link_handler::LinkHandler; use ::insta::assert_snapshot; use std::cell::RefCell; use std::rc::Rc; -use zellij_utils::{pane_size::SizeInPixels, position::Position, vte, zellij_tile::data::Palette}; +use zellij_utils::{data::Palette, pane_size::SizeInPixels, position::Position, vte}; fn read_fixture(fixture_name: &str) -> Vec { let mut path_to_file = std::path::PathBuf::new(); diff --git a/zellij-server/src/panes/unit/terminal_pane_tests.rs b/zellij-server/src/panes/unit/terminal_pane_tests.rs index efb83db9..62c2436e 100644 --- a/zellij-server/src/panes/unit/terminal_pane_tests.rs +++ b/zellij-server/src/panes/unit/terminal_pane_tests.rs @@ -4,9 +4,10 @@ use crate::tab::Pane; use ::insta::assert_snapshot; use std::cell::RefCell; use std::rc::Rc; -use zellij_tile::data::Palette; -use zellij_tile::prelude::Style; -use zellij_utils::pane_size::PaneGeom; +use zellij_utils::{ + data::{Palette, Style}, + pane_size::PaneGeom, +}; use std::fmt::Write; diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs index e953c4fe..253f62bc 100644 --- a/zellij-server/src/route.rs +++ b/zellij-server/src/route.rs @@ -1,7 +1,5 @@ use std::sync::{Arc, RwLock}; -use zellij_utils::zellij_tile::data::Event; - use crate::{ os_input_output::ServerOsApi, pty::{ClientOrTabIndex, PtyInstruction}, @@ -11,6 +9,7 @@ use crate::{ }; use zellij_utils::{ channels::SenderWithContext, + data::Event, input::{ actions::{Action, Direction, ResizeDirection}, command::TerminalAction, diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index 43b1491d..9d284b32 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -6,13 +6,9 @@ use std::os::unix::io::RawFd; use std::rc::Rc; use std::str; -use zellij_tile::data::{Palette, PaletteColor}; -use zellij_tile::prelude::Style; use zellij_utils::input::options::Clipboard; use zellij_utils::pane_size::{Size, SizeInPixels}; -use zellij_utils::{ - input::command::TerminalAction, input::layout::Layout, position::Position, zellij_tile, -}; +use zellij_utils::{input::command::TerminalAction, input::layout::Layout, position::Position}; use crate::panes::alacritty_functions::xparse_color; use crate::panes::terminal_character::AnsiCode; @@ -27,8 +23,8 @@ use crate::{ wasm_vm::PluginInstruction, ClientId, ServerInstruction, }; -use zellij_tile::data::{Event, InputMode, ModeInfo, PluginCapabilities, TabInfo}; use zellij_utils::{ + data::{Event, InputMode, ModeInfo, Palette, PaletteColor, PluginCapabilities, Style, TabInfo}, errors::{ContextType, ScreenContext}, input::{get_mode_info, options::Options}, ipc::{ClientAttributes, PixelDimensions}, diff --git a/zellij-server/src/tab/clipboard.rs b/zellij-server/src/tab/clipboard.rs index b2202baf..685c832c 100644 --- a/zellij-server/src/tab/clipboard.rs +++ b/zellij-server/src/tab/clipboard.rs @@ -1,5 +1,4 @@ -use zellij_tile::prelude::CopyDestination; -use zellij_utils::{anyhow::Result, input::options::Clipboard}; +use zellij_utils::{anyhow::Result, data::CopyDestination, input::options::Clipboard}; use crate::ClientId; diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index 2ae984c3..10ed525f 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -7,9 +7,8 @@ mod copy_command; use copy_command::CopyCommand; use std::env::temp_dir; use uuid::Uuid; -use zellij_tile::prelude::Style; use zellij_utils::position::{Column, Line}; -use zellij_utils::{position::Position, serde, zellij_tile}; +use zellij_utils::{position::Position, serde}; use crate::pty_writer::PtyWriteInstruction; use crate::screen::CopyOptions; @@ -36,8 +35,8 @@ use std::{ collections::{HashMap, HashSet}, str, }; -use zellij_tile::data::{Event, InputMode, ModeInfo, Palette, PaletteColor}; use zellij_utils::{ + data::{Event, InputMode, ModeInfo, Palette, PaletteColor, Style}, input::{ command::TerminalAction, layout::{Layout, Run}, diff --git a/zellij-server/src/tab/unit/tab_integration_tests.rs b/zellij-server/src/tab/unit/tab_integration_tests.rs index bcad7184..efb8909d 100644 --- a/zellij-server/src/tab/unit/tab_integration_tests.rs +++ b/zellij-server/src/tab/unit/tab_integration_tests.rs @@ -1,6 +1,5 @@ use super::{Output, Tab}; use crate::screen::CopyOptions; -use crate::zellij_tile::data::{ModeInfo, Palette}; use crate::Arc; use crate::Mutex; use crate::{ @@ -11,7 +10,6 @@ use crate::{ }; use std::convert::TryInto; use std::path::PathBuf; -use zellij_tile::prelude::Style; use zellij_utils::envs::set_session_name; use zellij_utils::input::layout::LayoutTemplate; use zellij_utils::ipc::IpcReceiverWithContext; @@ -27,6 +25,7 @@ use std::rc::Rc; use zellij_utils::nix; use zellij_utils::{ + data::{ModeInfo, Palette, Style}, input::command::TerminalAction, interprocess::local_socket::LocalSocketStream, ipc::{ClientToServerMsg, ServerToClientMsg}, diff --git a/zellij-server/src/tab/unit/tab_tests.rs b/zellij-server/src/tab/unit/tab_tests.rs index 6cc52219..045515fa 100644 --- a/zellij-server/src/tab/unit/tab_tests.rs +++ b/zellij-server/src/tab/unit/tab_tests.rs @@ -1,6 +1,5 @@ use super::Tab; use crate::screen::CopyOptions; -use crate::zellij_tile::data::{ModeInfo, Palette}; use crate::{ os_input_output::{AsyncReader, Pid, ServerOsApi}, panes::PaneId, @@ -9,7 +8,6 @@ use crate::{ }; use std::convert::TryInto; use std::path::PathBuf; -use zellij_tile::prelude::Style; use zellij_utils::input::layout::LayoutTemplate; use zellij_utils::ipc::IpcReceiverWithContext; use zellij_utils::pane_size::{Size, SizeInPixels}; @@ -22,6 +20,7 @@ use std::rc::Rc; use zellij_utils::nix; use zellij_utils::{ + data::{ModeInfo, Palette, Style}, input::command::TerminalAction, interprocess::local_socket::LocalSocketStream, ipc::{ClientToServerMsg, ServerToClientMsg}, diff --git a/zellij-server/src/ui/boundaries.rs b/zellij-server/src/ui/boundaries.rs index a8aff734..4cd6b1fd 100644 --- a/zellij-server/src/ui/boundaries.rs +++ b/zellij-server/src/ui/boundaries.rs @@ -1,12 +1,11 @@ -use zellij_utils::{pane_size::Viewport, zellij_tile}; +use zellij_utils::pane_size::Viewport; use crate::output::CharacterChunk; use crate::panes::terminal_character::{TerminalCharacter, EMPTY_TERMINAL_CHARACTER, RESET_STYLES}; use crate::tab::Pane; use ansi_term::Colour::{Fixed, RGB}; use std::collections::HashMap; -use zellij_tile::data::PaletteColor; -use zellij_utils::shared::colors; +use zellij_utils::{data::PaletteColor, shared::colors}; use std::fmt::{Display, Error, Formatter}; pub mod boundary_type { diff --git a/zellij-server/src/ui/pane_boundaries_frame.rs b/zellij-server/src/ui/pane_boundaries_frame.rs index 40d0cd6f..8f25c98f 100644 --- a/zellij-server/src/ui/pane_boundaries_frame.rs +++ b/zellij-server/src/ui/pane_boundaries_frame.rs @@ -2,9 +2,8 @@ use crate::output::CharacterChunk; use crate::panes::{AnsiCode, CharacterStyles, TerminalCharacter, EMPTY_TERMINAL_CHARACTER}; use crate::ui::boundaries::boundary_type; use crate::ClientId; -use zellij_tile::prelude::Style; +use zellij_utils::data::{client_id_to_colors, PaletteColor, Style}; use zellij_utils::pane_size::Viewport; -use zellij_utils::zellij_tile::prelude::{client_id_to_colors, PaletteColor}; use unicode_width::{UnicodeWidthChar, UnicodeWidthStr}; diff --git a/zellij-server/src/ui/pane_contents_and_ui.rs b/zellij-server/src/ui/pane_contents_and_ui.rs index e9702a3d..50f76316 100644 --- a/zellij-server/src/ui/pane_contents_and_ui.rs +++ b/zellij-server/src/ui/pane_contents_and_ui.rs @@ -5,9 +5,8 @@ use crate::ui::boundaries::Boundaries; use crate::ui::pane_boundaries_frame::FrameParams; use crate::ClientId; use std::collections::HashMap; -use zellij_tile::{ - data::{client_id_to_colors, single_client_color, InputMode, PaletteColor}, - prelude::Style, +use zellij_utils::data::{ + client_id_to_colors, single_client_color, InputMode, PaletteColor, Style, }; pub struct PaneContentsAndUi<'a> { pane: &'a mut Box, diff --git a/zellij-server/src/unit/screen_tests.rs b/zellij-server/src/unit/screen_tests.rs index 489b507d..0cf8d453 100644 --- a/zellij-server/src/unit/screen_tests.rs +++ b/zellij-server/src/unit/screen_tests.rs @@ -1,6 +1,5 @@ use super::{CopyOptions, Screen, ScreenInstruction}; use crate::panes::PaneId; -use crate::zellij_tile::data::{ModeInfo, Palette}; use crate::{ os_input_output::{AsyncReader, Pid, ServerOsApi}, thread_bus::Bus, @@ -19,6 +18,7 @@ use zellij_utils::ipc::{ClientAttributes, PixelDimensions}; use zellij_utils::nix; use zellij_utils::{ + data::{ModeInfo, Palette}, interprocess::local_socket::LocalSocketStream, ipc::{ClientToServerMsg, ServerToClientMsg}, }; diff --git a/zellij-server/src/wasm_vm.rs b/zellij-server/src/wasm_vm.rs index 4e08e6c4..4ab6c03d 100644 --- a/zellij-server/src/wasm_vm.rs +++ b/zellij-server/src/wasm_vm.rs @@ -17,7 +17,6 @@ use wasmer::{ WasmerEnv, }; use wasmer_wasi::{Pipe, WasiEnv, WasiState}; -use zellij_tile::data::{Event, EventType, PluginIds}; use crate::{ logging_pipe::LoggingPipe, @@ -30,13 +29,14 @@ use crate::{ use zellij_utils::{ consts::{VERSION, ZELLIJ_CACHE_DIR, ZELLIJ_PROJ_DIR, ZELLIJ_TMP_DIR}, + data::{Event, EventType, PluginIds}, errors::{ContextType, PluginContext}, }; use zellij_utils::{ input::command::TerminalAction, input::layout::RunPlugin, input::plugins::{PluginConfig, PluginType, PluginsConfig}, - serde, zellij_tile, + serde, }; #[derive(Clone, Debug)] diff --git a/zellij-tile/Cargo.toml b/zellij-tile/Cargo.toml index 2c4d374e..b593c158 100644 --- a/zellij-tile/Cargo.toml +++ b/zellij-tile/Cargo.toml @@ -12,3 +12,4 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" strum = "0.20.0" strum_macros = "0.20.0" +zellij-utils = { path = "../zellij-utils/", version = "0.31.0" } diff --git a/zellij-tile/src/lib.rs b/zellij-tile/src/lib.rs index 96483c3c..85a5bfe1 100644 --- a/zellij-tile/src/lib.rs +++ b/zellij-tile/src/lib.rs @@ -1,8 +1,7 @@ -pub mod data; pub mod prelude; pub mod shim; -use data::*; +use zellij_utils::data::Event; #[allow(unused_variables)] pub trait ZellijPlugin { diff --git a/zellij-tile/src/prelude.rs b/zellij-tile/src/prelude.rs index 2dd24a47..196696a4 100644 --- a/zellij-tile/src/prelude.rs +++ b/zellij-tile/src/prelude.rs @@ -1,3 +1,3 @@ -pub use crate::data::*; pub use crate::shim::*; pub use crate::*; +pub use zellij_utils::data::*; diff --git a/zellij-tile/src/shim.rs b/zellij-tile/src/shim.rs index fe41a21b..99920e74 100644 --- a/zellij-tile/src/shim.rs +++ b/zellij-tile/src/shim.rs @@ -1,7 +1,6 @@ use serde::{de::DeserializeOwned, Serialize}; use std::{io, path::Path}; - -use crate::data::*; +use zellij_utils::data::*; // Subscription Handling diff --git a/zellij-utils/Cargo.toml b/zellij-utils/Cargo.toml index 937857b5..28f309d3 100644 --- a/zellij-utils/Cargo.toml +++ b/zellij-utils/Cargo.toml @@ -18,7 +18,6 @@ colored = "2.0.0" colorsys = "0.6.5" crossbeam = "0.8.1" directories-next = "2.0" -interprocess = "1.1.1" lazy_static = "1.4.0" libc = "0.2" nix = "0.23.1" @@ -26,25 +25,25 @@ once_cell = "1.8.0" serde = { version = "1.0", features = ["derive"] } serde_yaml = "0.8" serde_json = "1.0" -signal-hook = "0.3" strip-ansi-escapes = "0.1.0" strum = "0.20.0" +strum_macros = "0.20.1" thiserror = "1.0.30" url = { version = "2.2.2", features = ["serde"] } vte = "0.10.1" -zellij-tile = { path = "../zellij-tile/", version = "0.31.0" } log = "0.4.17" -log4rs = "1.0.0" unicode-width = "0.1.8" miette = { version = "3.3.0", features = ["fancy"] } regex = "1.5.5" -termwiz = "0.16.0" tempfile = "3.2.0" - -[dependencies.async-std] -version = "1.3.0" -features = ["unstable"] +#[cfg(not(target_family = "wasm"))] +[target.'cfg(not(target_family = "wasm"))'.dependencies] +termwiz = "0.16.0" +log4rs = "1.0.0" +signal-hook = "0.3" +interprocess = "1.1.1" +async-std = { version = "1.3.0", features = ["unstable"] } [dev-dependencies] diff --git a/zellij-tile/src/data.rs b/zellij-utils/src/data.rs similarity index 100% rename from zellij-tile/src/data.rs rename to zellij-utils/src/data.rs diff --git a/zellij-utils/src/input/actions.rs b/zellij-utils/src/input/actions.rs index 6527a536..0550792d 100644 --- a/zellij-utils/src/input/actions.rs +++ b/zellij-utils/src/input/actions.rs @@ -2,9 +2,9 @@ use super::command::RunCommandAction; use super::layout::TabLayout; +use crate::data::InputMode; use crate::input::options::OnForceClose; use serde::{Deserialize, Serialize}; -use zellij_tile::data::InputMode; use crate::position::Position; diff --git a/zellij-utils/src/input/keybinds.rs b/zellij-utils/src/input/keybinds.rs index 83177793..af561696 100644 --- a/zellij-utils/src/input/keybinds.rs +++ b/zellij-utils/src/input/keybinds.rs @@ -3,10 +3,10 @@ use std::collections::HashMap; use super::actions::Action; use super::config; +use crate::input::{InputMode, Key}; use serde::{Deserialize, Serialize}; use strum::IntoEnumIterator; -use zellij_tile::data::*; /// Used in the config struct #[derive(Clone, Debug, PartialEq, Deserialize, Serialize)] diff --git a/zellij-utils/src/input/mod.rs b/zellij-utils/src/input/mod.rs index 807c87c9..84ae1e36 100644 --- a/zellij-utils/src/input/mod.rs +++ b/zellij-utils/src/input/mod.rs @@ -10,12 +10,12 @@ pub mod options; pub mod plugins; pub mod theme; +use super::{ + data::{CharOrArrow, Direction, Style}, + data::{InputMode, Key, ModeInfo, PluginCapabilities}, +}; use crate::envs; use termwiz::input::{InputEvent, InputParser, KeyCode, KeyEvent, Modifiers}; -use zellij_tile::{ - data::{InputMode, Key, ModeInfo, PluginCapabilities}, - prelude::{CharOrArrow, Direction, Style}, -}; /// Creates a [`ModeInfo`] struct indicating the current [`InputMode`] and its keybinds /// (as pairs of [`String`]s). diff --git a/zellij-utils/src/input/options.rs b/zellij-utils/src/input/options.rs index 131abc48..8af9c8a4 100644 --- a/zellij-utils/src/input/options.rs +++ b/zellij-utils/src/input/options.rs @@ -1,10 +1,10 @@ //! Handles cli and configuration options use crate::cli::Command; +use crate::data::InputMode; use clap::{ArgEnum, Args}; use serde::{Deserialize, Serialize}; use std::path::PathBuf; use std::str::FromStr; -use zellij_tile::data::InputMode; #[derive(Copy, Clone, Debug, PartialEq, Deserialize, Serialize, ArgEnum)] pub enum OnForceClose { diff --git a/zellij-utils/src/input/plugins.rs b/zellij-utils/src/input/plugins.rs index fba3c531..8dec828d 100644 --- a/zellij-utils/src/input/plugins.rs +++ b/zellij-utils/src/input/plugins.rs @@ -12,8 +12,8 @@ use url::Url; use super::config::ConfigFromYaml; use super::layout::{RunPlugin, RunPluginLocation}; +pub use crate::data::PluginTag; use crate::setup; -pub use zellij_tile::data::PluginTag; lazy_static! { static ref DEFAULT_CONFIG_PLUGINS: PluginsConfig = { diff --git a/zellij-utils/src/input/theme.rs b/zellij-utils/src/input/theme.rs index 6a1bc763..fc8329a7 100644 --- a/zellij-utils/src/input/theme.rs +++ b/zellij-utils/src/input/theme.rs @@ -5,8 +5,8 @@ use serde::{ use std::{collections::HashMap, fmt}; use super::options::Options; +use crate::data::{Palette, PaletteColor}; use crate::shared::detect_theme_hue; -use zellij_tile::data::{Palette, PaletteColor}; /// Intermediate deserialization of themes #[derive(Debug, Clone, PartialEq, Deserialize, Serialize)] @@ -137,6 +137,7 @@ impl ThemesFromYaml { self.0.remove(&theme) } + #[allow(clippy::wrong_self_convention)] fn from_default_theme(&mut self, theme: String) -> Option { self.clone() .get_theme(theme) diff --git a/zellij-utils/src/input/unit/keybinds_test.rs b/zellij-utils/src/input/unit/keybinds_test.rs index 387675c5..ed132898 100644 --- a/zellij-utils/src/input/unit/keybinds_test.rs +++ b/zellij-utils/src/input/unit/keybinds_test.rs @@ -1,6 +1,7 @@ use super::super::actions::*; use super::super::keybinds::*; -use zellij_tile::data::Key; +use crate::data::Key; +use crate::input::CharOrArrow; #[test] fn merge_keybinds_merges_different_keys() { diff --git a/zellij-utils/src/ipc.rs b/zellij-utils/src/ipc.rs index 4ba42515..78a9137f 100644 --- a/zellij-utils/src/ipc.rs +++ b/zellij-utils/src/ipc.rs @@ -2,6 +2,7 @@ use crate::{ cli::CliArgs, + data::{ClientId, InputMode, Style}, errors::{get_current_ctx, ErrorContext}, input::{actions::Action, layout::LayoutFromYaml, options::Options, plugins::PluginsConfig}, pane_size::{Size, SizeInPixels}, @@ -17,11 +18,6 @@ use std::{ os::unix::io::{AsRawFd, FromRawFd}, }; -use zellij_tile::{ - data::InputMode, - prelude::{ClientId, Style}, -}; - type SessionId = u64; #[derive(PartialEq, Eq, Serialize, Deserialize, Hash)] diff --git a/zellij-utils/src/lib.rs b/zellij-utils/src/lib.rs index b7c2cc95..94c4f18d 100644 --- a/zellij-utils/src/lib.rs +++ b/zellij-utils/src/lib.rs @@ -1,28 +1,32 @@ +pub mod data; + +#[cfg(not(target_family = "wasm"))] pub mod channels; +#[cfg(not(target_family = "wasm"))] pub mod cli; +#[cfg(not(target_family = "wasm"))] pub mod consts; +#[cfg(not(target_family = "wasm"))] pub mod envs; +#[cfg(not(target_family = "wasm"))] pub mod errors; +#[cfg(not(target_family = "wasm"))] pub mod input; +#[cfg(not(target_family = "wasm"))] pub mod ipc; +#[cfg(not(target_family = "wasm"))] pub mod logging; +#[cfg(not(target_family = "wasm"))] pub mod pane_size; +#[cfg(not(target_family = "wasm"))] pub mod position; +#[cfg(not(target_family = "wasm"))] pub mod setup; +#[cfg(not(target_family = "wasm"))] pub mod shared; -pub use anyhow; -pub use async_std; -pub use clap; -pub use interprocess; -pub use lazy_static; -pub use libc; -pub use nix; -pub use regex; -pub use serde; -pub use serde_yaml; -pub use signal_hook; -pub use tempfile; -pub use termwiz; -pub use vte; -pub use zellij_tile; +#[cfg(not(target_family = "wasm"))] +pub use ::{ + anyhow, async_std, clap, interprocess, lazy_static, libc, nix, regex, serde, serde_yaml, + signal_hook, tempfile, termwiz, vte, +}; diff --git a/zellij-utils/src/setup.rs b/zellij-utils/src/setup.rs index 91211f9f..9b2c36b2 100644 --- a/zellij-utils/src/setup.rs +++ b/zellij-utils/src/setup.rs @@ -476,6 +476,7 @@ impl Setup { #[cfg(test)] mod setup_test { use super::Setup; + use crate::data::InputMode; use crate::input::{ config::{Config, ConfigError}, layout::LayoutFromYamlIntermediate, @@ -554,7 +555,7 @@ mod setup_test { fn nonempty_config_nonempty_layout() { let mut goal = Config::default(); goal.options.default_shell = Some(std::path::PathBuf::from("bash")); - goal.options.default_mode = Some(zellij_tile::prelude::InputMode::Locked); + goal.options.default_mode = Some(InputMode::Locked); let config = r"--- default_mode: locked"; let layout = r"--- diff --git a/zellij-utils/src/shared.rs b/zellij-utils/src/shared.rs index 6df753da..b916c411 100644 --- a/zellij-utils/src/shared.rs +++ b/zellij-utils/src/shared.rs @@ -2,6 +2,7 @@ use std::{iter, str::from_utf8}; +use crate::data::{Palette, PaletteColor, PaletteSource, ThemeHue}; use crate::envs::get_session_name; use colorsys::Rgb; use std::os::unix::fs::PermissionsExt; @@ -9,7 +10,6 @@ use std::path::Path; use std::{fs, io}; use strip_ansi_escapes::strip; use unicode_width::UnicodeWidthStr; -use zellij_tile::data::{Palette, PaletteColor, PaletteSource, ThemeHue}; pub fn set_permissions(path: &Path, mode: u32) -> io::Result<()> { let mut permissions = fs::metadata(path)?.permissions();