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 d189731f87..337f7b7fc5 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 309dc75018..9e556e1079 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 1e937fe2b4..98a2426b1f 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 2199e12fb7..7338d633a4 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 18ccf35b35..3f92c5376f 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 aeb74abba8..9790984ee9 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 a344f940d7..60c22cc985 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 a3ab117ce1..25f0e4fbbb 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 8fe4a5af93..b772eb5c46 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 eba00edc47..4154571e44 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 00b5dbb85d..490837d52f 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 5059a8fc62..b4384165a7 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 8434ae39ec..442a4dd61b 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 3fed2b7f45..23df7948b3 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 244e8b25a3..87e0ac7e1e 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 19f4ee42af..2e4b4e35e4 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 060bdd8fc9..64af585915 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 143aec4320..03fa0c0634 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 42c4e32922..057c146602 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 efb83db929..62c2436ebc 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 e953c4febc..253f62bcb3 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 43b1491d6b..9d284b3236 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 b2202baf94..685c832cef 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 2ae984c30f..10ed525f81 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 bcad718408..efb8909de9 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 6cc5221969..045515fa7a 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 a8aff73444..4cd6b1fd76 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 40d0cd6fb8..8f25c98fe6 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 e9702a3d11..50f763167e 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 489b507d8e..0cf8d45353 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 4e08e6c493..4ab6c03d61 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 2c4d374efb..b593c158e5 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 96483c3c39..85a5bfe1fc 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 2dd24a4715..196696a4c9 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 fe41a21b77..99920e744a 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 937857b568..28f309d338 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 6527a53633..0550792dfd 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 83177793a3..af56169690 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 807c87c920..84ae1e3669 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 crate::envs; -use termwiz::input::{InputEvent, InputParser, KeyCode, KeyEvent, Modifiers}; -use zellij_tile::{ +use super::{ + data::{CharOrArrow, Direction, Style}, data::{InputMode, Key, ModeInfo, PluginCapabilities}, - prelude::{CharOrArrow, Direction, Style}, }; +use crate::envs; +use termwiz::input::{InputEvent, InputParser, KeyCode, KeyEvent, Modifiers}; /// 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 131abc48d4..8af9c8a4d5 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 fba3c531c6..8dec828d56 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 6a1bc7639d..fc8329a7e9 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 387675c524..ed13289819 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 4ba4251502..78a9137f23 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 b7c2cc95ad..94c4f18dbf 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 91211f9f97..9b2c36b233 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 6df753daf8..b916c4119d 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();