aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-11-16 11:10:32 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-11-16 11:10:32 +0100
commit06d2c22c59fe07334f0a7643a73cff94ce418f49 (patch)
treeaeb6337c7cc5a76ccdd7b9f61802949b3cbb1bda
parentchore: bump version to v0.18.1 (diff)
downloadsl0pstatus-06d2c22c59fe07334f0a7643a73cff94ce418f49.tar.gz
sl0pstatus-06d2c22c59fe07334f0a7643a73cff94ce418f49.tar.xz
sl0pstatus-06d2c22c59fe07334f0a7643a73cff94ce418f49.zip
feat: add hide_frame_except_for_fullscreen
-rw-r--r--plugin-dev-workspace.kdl5
-rw-r--r--src/bin/zjstatus.rs2
-rw-r--r--src/config.rs6
-rw-r--r--src/frames.rs65
4 files changed, 36 insertions, 42 deletions
diff --git a/plugin-dev-workspace.kdl b/plugin-dev-workspace.kdl
index 3ad2535..4af6fe3 100644
--- a/plugin-dev-workspace.kdl
+++ b/plugin-dev-workspace.kdl
@@ -28,8 +28,9 @@ layout {
swap_layout_format "#[bg=blue,fg=#000000] {name} #[bg=red,fg=black] foo "
swap_layout_hide_if_empty "false"
- hide_frame_for_single_pane "true"
- hide_frame_except_for_search "false"
+ hide_frame_for_single_pane "true"
+ hide_frame_except_for_search "false"
+ hide_frame_except_for_fullscreen "false"
mode_normal "#[bg=$blue] #[bg=yellow] "
mode_tmux "#[bg=$yellow] "
diff --git a/src/bin/zjstatus.rs b/src/bin/zjstatus.rs
index 4366db7..e902503 100644
--- a/src/bin/zjstatus.rs
+++ b/src/bin/zjstatus.rs
@@ -203,6 +203,7 @@ impl State {
frames::hide_frames_conditionally(
self.module_config.hide_frame_for_single_pane,
self.module_config.hide_frame_except_for_search,
+ self.module_config.hide_frame_except_for_fullscreen,
&self.state.tabs,
&pane_info,
&self.state.mode,
@@ -261,6 +262,7 @@ impl State {
frames::hide_frames_conditionally(
self.module_config.hide_frame_for_single_pane,
self.module_config.hide_frame_except_for_search,
+ self.module_config.hide_frame_except_for_fullscreen,
&current_session.tabs,
&current_session.panes,
&self.state.mode,
diff --git a/src/config.rs b/src/config.rs
index 0002cd0..f0befbb 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -78,6 +78,7 @@ pub struct ModuleConfig {
pub format_space: FormattedPart,
pub hide_frame_for_single_pane: bool,
pub hide_frame_except_for_search: bool,
+ pub hide_frame_except_for_fullscreen: bool,
pub border: BorderConfig,
pub format_precedence: Vec<Part>,
pub hide_on_overlength: bool,
@@ -98,6 +99,10 @@ impl ModuleConfig {
Some(toggle) => toggle == "true",
None => false,
};
+ let hide_frame_except_for_fullscreen = match config.get("hide_frame_except_for_fullscreen") {
+ Some(toggle) => toggle == "true",
+ None => false,
+ };
let left_parts_config = match config.get("format_left") {
Some(conf) => conf,
@@ -148,6 +153,7 @@ impl ModuleConfig {
format_space: FormattedPart::from_format_string(format_space_config, config),
hide_frame_for_single_pane,
hide_frame_except_for_search,
+ hide_frame_except_for_fullscreen,
border: border_config,
format_precedence,
hide_on_overlength,
diff --git a/src/frames.rs b/src/frames.rs
index 40e8caf..19f6d5d 100644
--- a/src/frames.rs
+++ b/src/frames.rs
@@ -4,6 +4,7 @@ use zellij_tile::prelude::*;
pub fn hide_frames_conditionally(
cfg_hide_frames_for_single_pane: bool,
cfg_hide_frames_except_for_search: bool,
+ cfg_hide_frames_except_for_fullscreen: bool,
tabs: &[TabInfo],
pane_info: &PaneManifest,
mode_info: &ModeInfo,
@@ -28,62 +29,46 @@ pub fn hide_frames_conditionally(
let frame_enabled = panes.iter().any(|p| p.pane_content_x - p.pane_x > 0);
- if cfg_hide_frames_except_for_search {
- hide_frames_except_for_search(frame_enabled, mode_info);
+ let frames_for_search =
+ cfg_hide_frames_except_for_search && should_show_frames_for_search(mode_info);
+ let frames_for_fullscreen =
+ cfg_hide_frames_except_for_fullscreen && should_show_frames_for_fullscreen(&panes);
+ let frames_for_single_pane =
+ cfg_hide_frames_for_single_pane && should_show_frames_for_multiple_panes(mode_info, &panes);
- return;
+ if (frames_for_search || frames_for_fullscreen || frames_for_single_pane) && !frame_enabled {
+ toggle_pane_frames();
}
- if cfg_hide_frames_for_single_pane {
- hide_frames_on_single_pane(frame_enabled, mode_info, panes);
+ if (!frames_for_search && !frames_for_fullscreen && !frames_for_single_pane) && frame_enabled {
+ toggle_pane_frames();
}
}
-pub fn hide_frames_except_for_search(frame_enabled: bool, mode_info: &ModeInfo) {
- match mode_info.mode {
- InputMode::EnterSearch => {
- if !frame_enabled {
- tracing::debug!("toggle cause search");
- toggle_pane_frames();
- }
- }
- _ => {
- if frame_enabled {
- tracing::debug!("toggle cause not search");
- toggle_pane_frames();
- }
- }
- }
+pub fn should_show_frames_for_search(mode_info: &ModeInfo) -> bool {
+ mode_info.mode == InputMode::EnterSearch
+}
+
+pub fn should_show_frames_for_fullscreen(panes: &[&PaneInfo]) -> bool {
+ let active_pane = match panes.iter().find(|p| p.is_focused) {
+ Some(p) => p,
+ None => return false,
+ };
+
+ active_pane.is_fullscreen
}
#[tracing::instrument(skip_all)]
-pub fn hide_frames_on_single_pane(
- frame_enabled: bool,
- mode_info: &ModeInfo,
- panes: Vec<&PaneInfo>,
-) {
+pub fn should_show_frames_for_multiple_panes(mode_info: &ModeInfo, panes: &[&PaneInfo]) -> bool {
tracing::debug!("mode: {:?}", mode_info.mode);
if mode_info.mode == InputMode::RenamePane
|| mode_info.mode == InputMode::Search
|| mode_info.mode == InputMode::EnterSearch
{
- if !frame_enabled {
- tracing::debug!("toggle cause of mode");
- toggle_pane_frames();
- }
-
- return;
- }
-
- if panes.len() == 1 && frame_enabled {
- tracing::debug!("toggle enabled");
- toggle_pane_frames();
+ return true;
}
- if panes.len() > 1 && !frame_enabled {
- tracing::debug!("toggle not enabled");
- toggle_pane_frames();
- }
+ panes.len() > 1
}
fn is_plugin_for_current_tab(panes: &[PaneInfo], plugin_pane_id: PluginIds) -> bool {