summaryrefslogtreecommitdiffstats
path: root/default-plugins
diff options
context:
space:
mode:
authorhar7an <99636919+har7an@users.noreply.github.com>2022-12-08 12:50:28 +0000
committerGitHub <noreply@github.com>2022-12-08 12:50:28 +0000
commit62eaea15833b34f40270dc1ce8f6d57639dc4bdd (patch)
treeeb06c1f3075ccb5ed6f536d427e14c4fdbdef4e2 /default-plugins
parent420c7c319b1c328af9994f758264753c9467aded (diff)
Reimplement resize code (#1990)
* server/floating_panes: Start removing `unwrap`s * server/panes: Remove more `unwrap`s in floating panes code. * utils/data: Unify `Direction` type which was previously present in multiple locations. Also start working on a new Resize Method (type `ResizeStrategy`), to remove code duplication in the resize code. * server: Implement new resize handling with the `ResizeStrategy` type. Add a new action with the ability to invoke it from the CLI. Take care to maintain backwards-compatibility in terms of configuring the new resize mode. * utils/layout: Add conversion for SplitDirection from `data::Direction`. * utils/data: Add impl for `Direction` * server/panes: Rework tiled pane resizing but it's currently still broken in a few regards and misses ability to perform "regular" increase/decrease. * server/panes/tiled_panes: Add debug assertion to catch if the total area of all panes (in percent) is different from 100.0 at some point. * server/panes/tiled/grid: Fix resize bug caused by the fact that neighboring plugin panes previously weren't filtered from resize operations, even though they cannot be resized at all. * utils/data: Add `invert` for `Resize` * utils/data: Add member to `ResizeStrategy` that controls whether we invert resize behavior when increasing size towards a bounadry. This maintains current behavior. * server/screen: Handle new attribute in `ResizeStrategy` * server/panes/resizer: Return `anyhow::Error` * server/panes/tiled: Implement resize increase/decrease without specifying a direction (towards all possible directions). Currently broken in some cases. * server/pane/tiled/grid: Don't return early to preserve resize debug assertions. * server/pane/tiled/grid: Fix resize bug caused by checking for the wrong alignments in some cases. Also refactor the code for looking up aligned panes. * server/panes/tiled/grid: Cleanup code and remove log statements and unused functions. * server/panes/float/grid: Invert resize if the floating pane is hitting a boundary already. * plugins/status-bar: Add hints for new resize * server: Use new resize method * server: Fix tests with new functions and result types. * apply rustfmt * utils: Apply rustfmt * server/panes/floating: Fix resize increase behavior which would previously, upon hitting a boundary, cause the pane to invert the resize operation, which is wrong. Instead, it now does not resize floating panes on an undirected resize "increase" in directions where it hits boundaries. * server/panes/tiled: Use correct resize increments The values for the resize increments were previously wrong, causing many of the tests to fail. * server/panes/tiled: Fix resize checks to correctly consider fixed-size panes. * utils/assets/config: Update default config with new keybindings for resize mode. * server/panes/tiled: Fix resize check * server/panes/tiled: Use shortener for `Direction` type in `change_pane_size` function. * server/panes/tiled: Restore resize behavior for undirected resizes, to the way it was before this PR. * server/panes/floating: Fix resize increment for undirected resizes * utils/data: Fix doctest * utils: Fix test snapshots for tests working with the default config * changelog: Add PR #1990
Diffstat (limited to 'default-plugins')
-rw-r--r--default-plugins/status-bar/src/main.rs2
-rw-r--r--default-plugins/status-bar/src/second_line.rs65
-rw-r--r--default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs5
-rw-r--r--default-plugins/status-bar/src/tip/data/quicknav.rs9
4 files changed, 35 insertions, 46 deletions
diff --git a/default-plugins/status-bar/src/main.rs b/default-plugins/status-bar/src/main.rs
index 97f2bd2c6..027425a3a 100644
--- a/default-plugins/status-bar/src/main.rs
+++ b/default-plugins/status-bar/src/main.rs
@@ -367,6 +367,7 @@ pub fn action_key_group(keymap: &[(Key, Vec<Action>)], actions: &[&[Action]]) ->
/// separator between them:
///
/// - "hjkl"
+/// - "HJKL"
/// - "←↓↑→"
/// - "←→"
/// - "↓↑"
@@ -423,6 +424,7 @@ pub fn style_key_with_modifier(keyvec: &[Key], palette: &Palette) -> Vec<ANSIStr
// Special handling of some pre-defined keygroups
let key_string = key.join("");
let key_separator = match &key_string[..] {
+ "HJKL" => "",
"hjkl" => "",
"←↓↑→" => "",
"←→" => "",
diff --git a/default-plugins/status-bar/src/second_line.rs b/default-plugins/status-bar/src/second_line.rs
index ccab42dff..4422105da 100644
--- a/default-plugins/status-bar/src/second_line.rs
+++ b/default-plugins/status-bar/src/second_line.rs
@@ -109,8 +109,7 @@ fn full_shortcut_list_nonstandard_mode(help: &ModeInfo) -> LinePart {
fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
use Action as A;
use InputMode as IM;
- use actions::Direction as Dir;
- use actions::ResizeDirection as RDir;
+ use Direction as Dir;
use actions::SearchDirection as SDir;
use actions::SearchOption as SOpt;
@@ -188,11 +187,23 @@ fn get_keys_and_hints(mi: &ModeInfo) -> Vec<(String, String, Vec<Key>)> {
(s("Toggle"), s("Toggle"), action_key(&km, &[A::ToggleTab])),
(s("Select pane"), s("Select"), to_normal_key),
]} else if mi.mode == IM::Resize { vec![
- (s("Resize"), s("Resize"), action_key_group(&km, &[
- &[A::Resize(RDir::Left)], &[A::Resize(RDir::Down)],
- &[A::Resize(RDir::Up)], &[A::Resize(RDir::Right)]])),
+ (s("Increase to"), s("Increase"), action_key_group(&km, &[
+ &[A::Resize(Resize::Increase, Some(Dir::Left))],
+ &[A::Resize(Resize::Increase, Some(Dir::Down))],
+ &[A::Resize(Resize::Increase, Some(Dir::Up))],
+ &[A::Resize(Resize::Increase, Some(Dir::Right))]
+ ])),
+ (s("Decrease from"), s("Decrease"), action_key_group(&km, &[
+ &[A::Resize(Resize::Decrease, Some(Dir::Left))],
+ &[A::Resize(Resize::Decrease, Some(Dir::Down))],
+ &[A::Resize(Resize::Decrease, Some(Dir::Up))],
+ &[A::Resize(Resize::Decrease, Some(Dir::Right))]
+ ])),
(s("Increase/Decrease size"), s("Increase/Decrease"),
- action_key_group(&km, &[&[A::Resize(RDir::Increase)], &[A::Resize(RDir::Decrease)]])),
+ action_key_group(&km, &[
+ &[A::Resize(Resize::Increase, None)],
+ &[A::Resize(Resize::Decrease, None)]
+ ])),
(s("Select pane"), s("Select"), to_normal_key),
]} else if mi.mode == IM::Move { vec![
(s("Move"), s("Move"), action_key_group(&km, &[
@@ -666,13 +677,10 @@ mod tests {
keybinds: vec![(
InputMode::Pane,
vec![
- (Key::Left, vec![Action::MoveFocus(actions::Direction::Left)]),
- (Key::Down, vec![Action::MoveFocus(actions::Direction::Down)]),
- (Key::Up, vec![Action::MoveFocus(actions::Direction::Up)]),
- (
- Key::Right,
- vec![Action::MoveFocus(actions::Direction::Right)],
- ),
+ (Key::Left, vec![Action::MoveFocus(Direction::Left)]),
+ (Key::Down, vec![Action::MoveFocus(Direction::Down)]),
+ (Key::Up, vec![Action::MoveFocus(Direction::Up)]),
+ (Key::Right, vec![Action::MoveFocus(Direction::Right)]),
(Key::Char('n'), vec![Action::NewPane(None, None), TO_NORMAL]),
(Key::Char('x'), vec![Action::CloseFocus, TO_NORMAL]),
(
@@ -701,13 +709,10 @@ mod tests {
keybinds: vec![(
InputMode::Pane,
vec![
- (Key::Left, vec![Action::MoveFocus(actions::Direction::Left)]),
- (Key::Down, vec![Action::MoveFocus(actions::Direction::Down)]),
- (Key::Up, vec![Action::MoveFocus(actions::Direction::Up)]),
- (
- Key::Right,
- vec![Action::MoveFocus(actions::Direction::Right)],
- ),
+ (Key::Left, vec![Action::MoveFocus(Direction::Left)]),
+ (Key::Down, vec![Action::MoveFocus(Direction::Down)]),
+ (Key::Up, vec![Action::MoveFocus(Direction::Up)]),
+ (Key::Right, vec![Action::MoveFocus(Direction::Right)]),
(Key::Char('n'), vec![Action::NewPane(None, None), TO_NORMAL]),
(Key::Char('x'), vec![Action::CloseFocus, TO_NORMAL]),
(
@@ -732,22 +737,10 @@ mod tests {
keybinds: vec![(
InputMode::Pane,
vec![
- (
- Key::Ctrl('a'),
- vec![Action::MoveFocus(actions::Direction::Left)],
- ),
- (
- Key::Ctrl('\n'),
- vec![Action::MoveFocus(actions::Direction::Down)],
- ),
- (
- Key::Ctrl('1'),
- vec![Action::MoveFocus(actions::Direction::Up)],
- ),
- (
- Key::Ctrl(' '),
- vec![Action::MoveFocus(actions::Direction::Right)],
- ),
+ (Key::Ctrl('a'), vec![Action::MoveFocus(Direction::Left)]),
+ (Key::Ctrl('\n'), vec![Action::MoveFocus(Direction::Down)]),
+ (Key::Ctrl('1'), vec![Action::MoveFocus(Direction::Up)]),
+ (Key::Ctrl(' '), vec![Action::MoveFocus(Direction::Right)]),
(Key::Backspace, vec![Action::NewPane(None, None), TO_NORMAL]),
(Key::Esc, vec![Action::CloseFocus, TO_NORMAL]),
(Key::End, vec![Action::ToggleFocusFullscreen, TO_NORMAL]),
diff --git a/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs b/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs
index b7a62ab8b..67940e491 100644
--- a/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs
+++ b/default-plugins/status-bar/src/tip/data/move_focus_hjkl_tab_switch.rs
@@ -1,10 +1,7 @@
use ansi_term::{unstyled_len, ANSIString, ANSIStrings, Style};
use crate::{action_key_group, style_key_with_modifier, LinePart};
-use zellij_tile::prelude::{
- actions::{Action, Direction},
- *,
-};
+use zellij_tile::prelude::{actions::Action, *};
macro_rules! strings {
($ANSIStrings:expr) => {{
diff --git a/default-plugins/status-bar/src/tip/data/quicknav.rs b/default-plugins/status-bar/src/tip/data/quicknav.rs
index 2e7cbec32..b8077e459 100644
--- a/default-plugins/status-bar/src/tip/data/quicknav.rs
+++ b/default-plugins/status-bar/src/tip/data/quicknav.rs
@@ -1,10 +1,7 @@
use ansi_term::{unstyled_len, ANSIString, ANSIStrings, Style};
use crate::{action_key, action_key_group, style_key_with_modifier, LinePart};
-use zellij_tile::prelude::{
- actions::{Action, Direction, ResizeDirection},
- *,
-};
+use zellij_tile::prelude::{actions::Action, *};
macro_rules! strings {
($ANSIStrings:expr) => {{
@@ -75,8 +72,8 @@ fn add_keybinds(help: &ModeInfo) -> Keygroups {
let mut resize_keys = action_key_group(
&normal_keymap,
&[
- &[Action::Resize(ResizeDirection::Increase)],
- &[Action::Resize(ResizeDirection::Decrease)],
+ &[Action::Resize(Resize::Increase, None)],
+ &[Action::Resize(Resize::Decrease, None)],
],
);
if resize_keys.contains(&Key::Alt(CharOrArrow::Char('=')))