diff options
author | qepasa <pawelpalenica11@gmail.com> | 2021-07-20 22:19:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-20 22:19:03 -0700 |
commit | f0bc2977434d54079e0ca50bd1c18cd8bb7e1830 (patch) | |
tree | 501314d4f6fcb6116acac0314cf21fa1c3e75223 | |
parent | 0cabc5f11291da1814abbf4ce68676b4d338f43a (diff) | |
parent | 105ae616829da277481b82fb9610062bea22f985 (diff) |
Merge branch 'main' into unified-logging
26 files changed, 250 insertions, 112 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c5367fd1..9fa68e518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,26 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] +* Plugins don't crash zellij anymore on receiving mouse events (https://github.com/zellij-org/zellij/pull/620) + + +## [0.15.0] - 2021-07-19 * Kill children properly (https://github.com/zellij-org/zellij/pull/601) * Change name of `Run` binding for actions (https://github.com/zellij-org/zellij/pull/602) +* Add running commands to `layouts` (https://github.com/zellij-org/zellij/pull/600) + + POSSIBLE BREAKING CHANGE for custom layouts: + Plugins are under the run category now, that means: + ``` + plugin: status-bar + ``` + is now: + ``` + run: + plugin: status-bar + ``` +* Add `on_force_close` config option (https://github.com/zellij-org/zellij/pull/609) + ## [0.14.0] - 2021-07-05 * Add improved error handling for layouts (https://github.com/zellij-org/zellij/pull/576) diff --git a/Cargo.lock b/Cargo.lock index f06e05c15..f3533409e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2622,7 +2622,7 @@ dependencies = [ [[package]] name = "zellij" -version = "0.15.0" +version = "0.16.0" dependencies = [ "insta", "log", @@ -2636,7 +2636,7 @@ dependencies = [ [[package]] name = "zellij-client" -version = "0.15.0" +version = "0.16.0" dependencies = [ "insta", "log", @@ -2647,7 +2647,7 @@ dependencies = [ [[package]] name = "zellij-server" -version = "0.15.0" +version = "0.16.0" dependencies = [ "ansi_term 0.12.1", "async-trait", @@ -2667,7 +2667,7 @@ dependencies = [ [[package]] name = "zellij-tile" -version = "0.15.0" +version = "0.16.0" dependencies = [ "serde", "serde_json", @@ -2677,14 +2677,14 @@ dependencies = [ [[package]] name = "zellij-tile-utils" -version = "0.15.0" +version = "0.16.0" dependencies = [ "ansi_term 0.12.1", ] [[package]] name = "zellij-utils" -version = "0.15.0" +version = "0.16.0" dependencies = [ "async-std", "backtrace", diff --git a/Cargo.toml b/Cargo.toml index a0fd188e4..5ccd8e48b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zellij" -version = "0.15.0" +version = "0.16.0" authors = ["Aram Drevekenin <aram@poor.dev>"] edition = "2018" description = "A terminal workspace with batteries included" @@ -14,9 +14,9 @@ resolver = "2" [dependencies] names = "0.11.0" -zellij-client = { path = "zellij-client/", version = "0.15.0" } -zellij-server = { path = "zellij-server/", version = "0.15.0" } -zellij-utils = { path = "zellij-utils/", version = "0.15.0" } +zellij-client = { path = "zellij-client/", version = "0.16.0" } +zellij-server = { path = "zellij-server/", version = "0.16.0" } +zellij-utils = { path = "zellij-utils/", version = "0.16.0" } log = "0.4.14" [dev-dependencies] diff --git a/Makefile.toml b/Makefile.toml index c58ce3d0d..e0043ab71 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -151,7 +151,7 @@ run_task = "publish-zellij" [tasks.release-commit] dependencies = ["commit-all", "tag-release"] command = "git" -args = ["push", "--atomic", "upstream", "main", "v${CARGO_MAKE_CRATE_VERSION}"] +args = ["push", "--atomic", "origin", "main", "v${CARGO_MAKE_CRATE_VERSION}"] [tasks.commit-all] ignore_errors = true diff --git a/example/run_htop_layout.yaml b/example/run_htop_layout.yaml new file mode 100644 index 000000000..949435d69 --- /dev/null +++ b/example/run_htop_layout.yaml @@ -0,0 +1,20 @@ +--- +direction: Vertical +parts: + - direction: Horizontal + split_size: + Percent: 50 + parts: + - direction: Vertical + split_size: + Percent: 50 + - direction: Vertical + split_size: + Percent: 50 + run: + command: {cmd: htop} + - direction: Horizontal + split_size: + Percent: 50 + run: + command: {cmd: htop} diff --git a/example/run_htop_layout_with_plugins.yaml b/example/run_htop_layout_with_plugins.yaml new file mode 100644 index 000000000..99f72edbe --- /dev/null +++ b/example/run_htop_layout_with_plugins.yaml @@ -0,0 +1,30 @@ +--- +direction: Horizontal +parts: + - direction: Vertical + split_size: + Fixed: 1 + run: + plugin: tab-bar + - direction: Vertical + parts: + - direction: Vertical + parts: + - direction: Vertical + split_size: + Percent: 50 + run: + command: {cmd: htop} + - direction: Vertical + split_size: + Percent: 50 + run: + command: {cmd: htop, args: ["-C"]} + - direction: Vertical + split_size: + Fixed: 5 + - direction: Vertical + split_size: + Fixed: 2 + run: + plugin: status-bar diff --git a/zellij-client/Cargo.toml b/zellij-client/Cargo.toml index 64241f585..731c0d452 100644 --- a/zellij-client/Cargo.toml +++ b/zellij-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zellij-client" -version = "0.15.0" +version = "0.16.0" authors = ["Kunal Mohan <kunalmohan99@gmail.com>"] edition = "2018" description = "The client-side library for Zellij" @@ -11,9 +11,10 @@ license = "MIT" [dependencies] mio = "0.7.11" termbg = "0.2.3" -zellij-utils = { path = "../zellij-utils/", version = "0.15.0" } +zellij-utils = { path = "../zellij-utils/", version = "0.16.0" } log = "0.4.14" + [dev-dependencies] insta = "1.6.0" diff --git a/zellij-client/src/lib.rs b/zellij-client/src/lib.rs index d9dda42ca..5c832e860 100644 --- a/zellij-client/src/lib.rs +++ b/zellij-client/src/lib.rs @@ -166,6 +166,8 @@ pub fn start_client( }) }); + let on_force_close = config_options.on_force_close.unwrap_or_default(); + let _stdin_thread = thread::Builder::new() .name("stdin_handler".to_string()) .spawn({ @@ -202,7 +204,7 @@ pub fn start_client( Box::new({ let os_api = os_input.clone(); move || { - os_api.send_to_server(ClientToServerMsg::Action(Action::Detach)); + os_api.send_to_server(ClientToServerMsg::Action(on_force_close.into())); } }), ); diff --git a/zellij-server/Cargo.toml b/zellij-server/Cargo.toml index 81616d060..e3015aaad 100644 --- a/zellij-server/Cargo.toml +++ b/zellij-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zellij-server" -version = "0.15.0" +version = "0.16.0" authors = ["Kunal Mohan <kunalmohan99@gmail.com>"] edition = "2018" description = "The server-side library for Zellij" @@ -18,11 +18,12 @@ unicode-width = "0.1.8" wasmer = "1.0.0" wasmer-wasi = "1.0.0" cassowary = "0.3.0" -zellij-utils = { path = "../zellij-utils/", version = "0.15.0" } +zellij-utils = { path = "../zellij-utils/", version = "0.16.0" } log = "0.4.14" typetag = "0.1.7" chrono = "0.4.19" + [dev-dependencies] insta = "1.6.0" diff --git a/zellij-server/src/panes/plugin_pane.rs b/zellij-server/src/panes/plugin_pane.rs index c01c7b873..256ceaea1 100644 --- a/zellij-server/src/panes/plugin_pane.rs +++ b/zellij-server/src/panes/plugin_pane.rs @@ -196,13 +196,13 @@ impl Pane for PluginPane { self.position_and_size.y -= count; } fn scroll_up(&mut self, _count: usize) { - unimplemented!() + //unimplemented!() } fn scroll_down(&mut self, _count: usize) { - unimplemented!() + //unimplemented!() } fn clear_scroll(&mut self) { - unimplemented!() + //unimplemented!() } // FIXME: This need to be reevaluated and deleted if possible. // `max` doesn't make sense when things are fixed... diff --git a/zellij-server/src/pty.rs b/zellij-server/src/pty.rs index e7884f356..5ef3b3217 100644 --- a/zellij-server/src/pty.rs +++ b/zellij-server/src/pty.rs @@ -1,11 +1,3 @@ -use zellij_utils::async_std; - -use async_std::future::timeout as async_timeout; -use async_std::task::{self, JoinHandle}; -use std::collections::HashMap; -use std::os::unix::io::RawFd; -use std::time::{Duration, Instant}; - use crate::{ os_input_output::{AsyncReader, Pid, ServerOsApi}, panes::PaneId, @@ -14,9 +6,22 @@ use crate::{ wasm_vm::PluginInstruction, ServerInstruction, }; +use async_std::{ + future::timeout as async_timeout, + task::{self, JoinHandle}, +}; +use std::{ + collections::HashMap, + os::unix::io::RawFd, + time::{Duration, Instant}, +}; use zellij_utils::{ + async_std, errors::{get_current_ctx, ContextType, PtyContext}, - input::{command::TerminalAction, layout::Layout}, + input::{ + command::TerminalAction, + layout::{Layout, Run}, + }, logging::debug_to_file, }; @@ -236,19 +241,36 @@ impl Pty { pub fn spawn_terminals_for_layout( &mut self, layout: Layout, - terminal_action: Option<TerminalAction>, + default_shell: Option<TerminalAction>, ) { - let total_panes = layout.total_terminal_panes(); + let extracted_run_instructions = layout.extract_run_instructions(); let mut new_pane_pids = vec![]; - for _ in 0..total_panes { - let (pid_primary, pid_secondary): (RawFd, Pid) = self - .bus - .os_input - .as_mut() - .unwrap() - .spawn_terminal(terminal_action.clone()); - self.id_to_child_pid.insert(pid_primary, pid_secondary); - new_pane_pids.push(pid_primary); + for run_instruction in extracted_run_instructions { + match run_instruction { + Some(Run::Command(command)) => { + let cmd = TerminalAction::RunCommand(command); + let (pid_primary, pid_secondary): (RawFd, Pid) = self + .bus + .os_input + .as_mut() + .unwrap() + .spawn_terminal(Some(cmd)); + self.id_to_child_pid.insert(pid_primary, pid_secondary); + new_pane_pids.push(pid_primary); + } + None => { + let (pid_primary, pid_secondary): (RawFd, Pid) = self + .bus + .os_input + .as_mut() + .unwrap() + .spawn_terminal(default_shell.clone()); + self.id_to_child_pid.insert(pid_primary, pid_secondary); + new_pane_pids.push(pid_primary); + } + // Investigate moving plugin loading to here. + Some(Run::Plugin(_)) => {} + } } self.bus .senders diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index 9005d7957..c96c13455 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -15,7 +15,7 @@ use crate::{ wasm_vm::PluginInstruction, ServerInstruction, SessionState, }; -use zellij_tile::data::{Event, InputMode, ModeInfo, Palette, PluginCapabilities, TabInfo}; +use zellij_tile::data::{Event, ModeInfo, Palette, PluginCapabilities, TabInfo}; use zellij_utils::{ errors::{ContextType, ScreenContext}, input::options::Options, @@ -149,7 +149,6 @@ pub(crate) struct Screen { /// The index of this [`Screen`]'s active [`Tab`]. active_tab_index: Option<usize>, mode_info: ModeInfo, - input_mode: InputMode, colors: Palette, session_state: Arc<RwLock<SessionState>>, } @@ -161,7 +160,6 @@ impl Screen { client_attributes: &ClientAttributes, max_panes: Option<usize>, mode_info: ModeInfo, - input_mode: InputMode, session_state: Arc<RwLock<SessionState>>, ) -> Self { Screen { @@ -172,7 +170,6 @@ impl Screen { active_tab_index: None, tabs: BTreeMap::new(), mode_info, - input_mode, session_state, } } @@ -192,7 +189,6 @@ impl Screen { self.max_panes, Some(PaneId::Terminal(pane_id)), self.mode_info.clone(), - self.input_mode, self.colors, self.session_state.clone(), ); @@ -354,7 +350,6 @@ impl Screen { self.max_panes, None, self.mode_info.clone(), - self.input_mode, self.colors, self.session_state.clone(), ); @@ -428,7 +423,6 @@ pub(crate) fn screen_thread_main( session_state: Arc<RwLock<SessionState>>, ) { let capabilities = config_options.simplified_ui; - let default_mode = config_options.default_mode.unwrap_or_default(); let mut screen = Screen::new( bus, @@ -439,10 +433,8 @@ pub(crate) fn screen_thread_main( capabilities: PluginCapabilities { arrow_fonts: capabilities, }, - mode: default_mode, ..ModeInfo::default() }, - default_mode, session_state, ); loop { diff --git a/zellij-server/src/tab.rs b/zellij-server/src/tab.rs index 68e7b7a66..f3b30fe3a 100644 --- a/zellij-server/src/tab.rs +++ b/zellij-server/src/tab.rs @@ -24,9 +24,12 @@ use std::{ cmp::Reverse, collections::{BTreeMap, HashSet}, }; -use zellij_tile::data::{Event, InputMode, ModeInfo, Palette}; +use zellij_tile::data::{Event, ModeInfo, Palette}; use zellij_utils::{ - input::{layout::Layout, parse_keys}, + input::{ + layout::{Layout, Run}, + parse_keys, + }, pane_size::PositionAndSize, shared::adjust_to_size, }; @@ -84,7 +87,6 @@ pub(crate) struct Tab { should_clear_display_before_rendering: bool, session_state: Arc<RwLock<SessionState>>, pub mode_info: ModeInfo, - pub input_mode: InputMode, pub colors: Palette, } @@ -96,7 +98,6 @@ pub(crate) struct TabData { pub name: String, pub active: bool, pub mode_info: ModeInfo, - pub input_mode: InputMode, pub colors: Palette, } @@ -257,7 +258,6 @@ impl Tab { max_panes: Option<usize>, pane_id: Option<PaneId>, mode_info: ModeInfo, - input_mode: InputMode, colors: Palette, session_state: Arc<RwLock<SessionState>>, ) -> Self { @@ -296,7 +296,6 @@ impl Tab { senders, should_clear_display_before_rendering: false, mode_info, - input_mode, colors, session_state, } @@ -338,7 +337,7 @@ impl Tab { let mut new_pids = new_pids.iter(); for (layout, position_and_size) in positions_and_size { // A plugin pane - if let Some(plugin) = &layout.plugin { + if let Some(Run::Plugin(Some(plugin))) = &layout.run { let (pid_tx, pid_rx) = channel(); self.senders .send_to_plugin(PluginInstruction::Load(pid_tx, plugin.clone())) diff --git a/zellij-server/src/unit/screen_tests.rs b/zellij-server/src/unit/screen_tests.rs index 173e2ccc0..df159dde0 100644 --- a/zellij-server/src/unit/screen_tests.rs +++ b/zellij-server/src/unit/screen_tests.rs @@ -1,5 +1,5 @@ use super::{Screen, ScreenInstruction}; -use crate::zellij_tile::data::{InputMode, ModeInfo, Palette}; +use crate::zellij_tile::data::{ModeInfo, Palette}; use crate::{ os_input_output::{AsyncReader, Pid, ServerOsApi}, thread_bus::Bus, @@ -81,16 +81,8 @@ fn create_new_screen(position_and_size: PositionAndSize) -> Screen { client_attributes.position_and_size = position_and_size; let max_panes = None; let mode_info = ModeInfo::default(); - let input_mode = InputMode::Normal; let session_state = Arc::new(RwLock::new(SessionState::Attached)); - Screen::new( - bus, - &client_attributes, - max_panes, - mode_info, - input_mode, - session_state, - ) + Screen::new(bus, &client_attributes, max_panes, mode_info, session_state) } #[test] diff --git a/zellij-server/src/unit/tab_tests.rs b/zellij-server/src/unit/tab_tests.rs index c19c41ceb..cc08a5b16 100644 --- a/zellij-server/src/unit/tab_tests.rs +++ b/zellij-server/src/unit/tab_tests.rs @@ -1,5 +1,5 @@ use super::Tab; -use crate::zellij_tile::data::{InputMode, ModeInfo, Palette}; +use crate::zellij_tile::data::{ModeInfo, Palette}; use crate::{ os_input_output::{AsyncReader, Pid, ServerOsApi}, panes::PaneId, @@ -82,7 +82,6 @@ fn create_new_tab(position_and_size: PositionAndSize) -> Tab { let max_panes = None; let first_pane_id = Some(PaneId::Terminal(1)); let mode_info = ModeInfo::default(); - let input_mode = InputMode::Normal; let colors = Palette::default(); let session_state = Arc::new(RwLock::new(SessionState::Attached)); Tab::new( @@ -95,7 +94,6 @@ fn create_new_tab(position_and_size: PositionAndSize) -> Tab { max_panes, first_pane_id, mode_info, - input_mode, colors, session_state, ) diff --git a/zellij-tile-utils/Cargo.toml b/zellij-tile-utils/Cargo.toml index 9c8865a97..d1e7d2330 100644 --- a/zellij-tile-utils/Cargo.toml +++ b/zellij-tile-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "zellij-tile-utils" -version = "0.15.0" +version = "0.16.0" authors = ["denis <denismaximov98@gmail.com>"] edition = "2018" description = "A utility library for Zellij plugins" diff --git a/zellij-tile/Cargo.toml b/zellij-tile/Cargo.toml index b0c18ff29..90be3e084 100644 --- a/zellij-tile/Cargo.toml +++ b/zellij-tile/Cargo.toml @@ -1,6 +1,6 @@ [package] |