diff options
author | Jae-Heon Ji <32578710+jaeheonji@users.noreply.github.com> | 2022-02-01 02:19:21 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-01 02:19:21 +0900 |
commit | 1d2e303926fbf1b4b39507ae246e8557a4916e7b (patch) | |
tree | e0fef9ed587aeb86fead9a19e6f454872f080b06 /zellij-utils/src | |
parent | 1163189d6b999088cfb2d007ca398d94cfcd66d3 (diff) |
feat: add focus attribute in layout (#958)
* feat(layout): add focus attribute in layout
* feat: add state of focus to tab
* chore: i love clippy
* test(layout): update focus options
* feat: add focus pane
* feat: apply focus-pane when layout is only loaded
* change the instruction name for focus-on-tab
* chore: apply cargo-fmt
* test: add e2e testcase
Diffstat (limited to 'zellij-utils/src')
-rw-r--r-- | zellij-utils/src/errors.rs | 1 | ||||
-rw-r--r-- | zellij-utils/src/input/layout.rs | 9 | ||||
-rw-r--r-- | zellij-utils/src/input/unit/layout_test.rs | 58 |
3 files changed, 68 insertions, 0 deletions
diff --git a/zellij-utils/src/errors.rs b/zellij-utils/src/errors.rs index a546e6cc7..884103894 100644 --- a/zellij-utils/src/errors.rs +++ b/zellij-utils/src/errors.rs @@ -281,6 +281,7 @@ pub enum PtyContext { SpawnTerminalVertically, SpawnTerminalHorizontally, UpdateActivePane, + GoToTab, NewTab, ClosePane, CloseTab, diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs index 9fa6709c2..d2125096e 100644 --- a/zellij-utils/src/input/layout.rs +++ b/zellij-utils/src/input/layout.rs @@ -140,6 +140,7 @@ pub struct Layout { pub run: Option<Run>, #[serde(default)] pub borderless: bool, + pub focus: Option<bool>, } // The struct that is used to deserialize the layout from @@ -421,6 +422,7 @@ pub struct LayoutTemplate { #[serde(default)] pub body: bool, pub split_size: Option<SplitSize>, + pub focus: Option<bool>, pub run: Option<RunFromYaml>, } @@ -466,6 +468,7 @@ pub struct TabLayout { pub split_size: Option<SplitSize>, #[serde(default)] pub name: String, + pub focus: Option<bool>, pub run: Option<RunFromYaml>, } @@ -712,6 +715,7 @@ impl TryFrom<TabLayout> for Layout { borderless: tab.borderless, parts: Self::from_vec_tab_layout(tab.parts)?, split_size: tab.split_size, + focus: tab.focus, run: tab.run.map(Run::try_from).transpose()?, }) } @@ -726,6 +730,7 @@ impl From<TabLayout> for LayoutTemplate { parts: Self::from_vec_tab_layout(tab.parts), body: false, split_size: tab.split_size, + focus: tab.focus, run: tab.run, } } @@ -741,6 +746,7 @@ impl TryFrom<LayoutTemplate> for Layout { borderless: template.borderless, parts: Self::from_vec_template_layout(template.parts)?, split_size: template.split_size, + focus: template.focus, run: template .run .map(Run::try_from) @@ -761,6 +767,7 @@ impl Default for TabLayout { run: None, name: String::new(), pane_name: None, + focus: None, } } } @@ -778,10 +785,12 @@ impl Default for LayoutTemplate { body: true, borderless: false, split_size: None, + focus: None, run: None, parts: vec![], }], split_size: None, + focus: None, run: None, } } diff --git a/zellij-utils/src/input/unit/layout_test.rs b/zellij-utils/src/input/unit/layout_test.rs index aec34c458..292b6b01d 100644 --- a/zellij-utils/src/input/unit/layout_test.rs +++ b/zellij-utils/src/input/unit/layout_test.rs @@ -41,11 +41,13 @@ fn default_layout_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: true, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(1)), run: Some(Run::Plugin(RunPlugin { @@ -57,6 +59,7 @@ fn default_layout_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -65,6 +68,7 @@ fn default_layout_merged_correctly() { direction: Direction::Vertical, borderless: true, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(2)), run: Some(Run::Plugin(RunPlugin { @@ -89,11 +93,13 @@ fn default_layout_new_tab_correct() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: true, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(1)), run: Some(Run::Plugin(RunPlugin { @@ -105,6 +111,7 @@ fn default_layout_new_tab_correct() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -113,6 +120,7 @@ fn default_layout_new_tab_correct() { direction: Direction::Vertical, borderless: true, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(2)), run: Some(Run::Plugin(RunPlugin { @@ -177,15 +185,18 @@ fn three_panes_with_tab_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -194,11 +205,13 @@ fn three_panes_with_tab_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -207,6 +220,7 @@ fn three_panes_with_tab_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -235,10 +249,12 @@ fn three_panes_with_tab_new_tab_is_correct() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -277,11 +293,13 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(1)), run: Some(Run::Plugin(RunPlugin { @@ -293,11 +311,13 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -306,11 +326,13 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -319,6 +341,7 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -335,6 +358,7 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(2)), run: Some(Run::Plugin(RunPlugin { @@ -359,11 +383,13 @@ fn three_panes_with_tab_and_default_plugins_new_tab_is_correct() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(1)), run: Some(Run::Plugin(RunPlugin { @@ -375,6 +401,7 @@ fn three_panes_with_tab_and_default_plugins_new_tab_is_correct() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -383,6 +410,7 @@ fn three_panes_with_tab_and_default_plugins_new_tab_is_correct() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Fixed(2)), run: Some(Run::Plugin(RunPlugin { @@ -425,16 +453,19 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(21.0)), run: None, @@ -443,11 +474,13 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(22.0)), run: None, @@ -456,11 +489,13 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(23.0)), run: None, @@ -469,6 +504,7 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(24.0)), run: None, @@ -489,6 +525,7 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(15.0)), run: None, @@ -497,6 +534,7 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(15.0)), run: None, @@ -505,6 +543,7 @@ fn deeply_nested_tab_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(15.0)), run: None, @@ -544,11 +583,13 @@ fn three_tabs_tab_one_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -557,6 +598,7 @@ fn three_tabs_tab_one_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -582,16 +624,19 @@ fn three_tabs_tab_two_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -600,6 +645,7 @@ fn three_tabs_tab_two_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -612,6 +658,7 @@ fn three_tabs_tab_two_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -637,16 +684,19 @@ fn three_tabs_tab_three_merged_correctly() { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![ Layout { direction: Direction::Vertical, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: Some(SplitSize::Percent(50.0)), run: None, @@ -655,6 +705,7 @@ fn three_tabs_tab_three_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -667,6 +718,7 @@ fn three_tabs_tab_three_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -703,10 +755,12 @@ fn no_tabs_merged_correctly() { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![Layout { direction: Direction::Horizontal, borderless: false, pane_name: None, + focus: None, parts: vec![], split_size: None, run: None, @@ -754,6 +808,7 @@ fn no_layout_template_merged_correctly() { run: None, borderless: false, pane_name: None, + focus: None, }, Layout { direction: Direction::Horizontal, @@ -762,17 +817,20 @@ fn no_layout_template_merged_correctly() { run: None, borderless: false, pane_name: None, + focus: None, }, ], split_size: None, run: None, borderless: false, pane_name: None, + focus: None, }], split_size: None, run: None, borderless: false, pane_name: None, + focus: None, }; assert_eq!(merged_layout, tab_layout.try_into().unwrap()); |