summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src
diff options
context:
space:
mode:
authorJae-Heon Ji <32578710+jaeheonji@users.noreply.github.com>2022-02-01 02:19:21 +0900
committerGitHub <noreply@github.com>2022-02-01 02:19:21 +0900
commit1d2e303926fbf1b4b39507ae246e8557a4916e7b (patch)
treee0fef9ed587aeb86fead9a19e6f454872f080b06 /zellij-utils/src
parent1163189d6b999088cfb2d007ca398d94cfcd66d3 (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.rs1
-rw-r--r--zellij-utils/src/input/layout.rs9
-rw-r--r--zellij-utils/src/input/unit/layout_test.rs58
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());