aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLovecraftian Horror <LovecraftianHorror@pm.me>2021-07-08 14:16:25 -0400
committerLovecraftian Horror <LovecraftianHorror@pm.me>2021-07-08 14:16:25 -0400
commit4fcf558156dec6cfebd9fc6ba8605594369fded6 (patch)
treef783ff1424bd645c643377401041f105f86953aa
parentdocs(changelog): Change Run binding #602 (diff)
downloadsl0ppij-4fcf558156dec6cfebd9fc6ba8605594369fded6.tar.gz
sl0ppij-4fcf558156dec6cfebd9fc6ba8605594369fded6.tar.xz
sl0ppij-4fcf558156dec6cfebd9fc6ba8605594369fded6.zip
Display session name within session
-rw-r--r--default-plugins/tab-bar/src/line.rs11
-rw-r--r--default-plugins/tab-bar/src/main.rs1
-rw-r--r--zellij-server/src/lib.rs5
-rw-r--r--zellij-server/src/route.rs7
-rw-r--r--zellij-server/src/screen.rs11
-rw-r--r--zellij-tile/src/data.rs44
-rw-r--r--zellij-utils/src/input/mod.rs51
7 files changed, 64 insertions, 66 deletions
diff --git a/default-plugins/tab-bar/src/line.rs b/default-plugins/tab-bar/src/line.rs
index cad5b720..3ebeaac3 100644
--- a/default-plugins/tab-bar/src/line.rs
+++ b/default-plugins/tab-bar/src/line.rs
@@ -144,8 +144,12 @@ fn add_next_tabs_msg(
title_bar.push(right_more_message);
}
-fn tab_line_prefix(palette: Palette) -> LinePart {
- let prefix_text = " Zellij ".to_string();
+fn tab_line_prefix(session_name: Option<&str>, palette: Palette) -> LinePart {
+ let mut prefix_text = " Zellij ".to_string();
+ if let Some(name) = session_name {
+ prefix_text.push_str(&format!("({}) ", name));
+ }
+
let prefix_text_len = prefix_text.chars().count();
let prefix_styled_text = style!(palette.white, palette.cyan)
.bold()
@@ -165,6 +169,7 @@ pub fn tab_separator(capabilities: PluginCapabilities) -> &'static str {
}
pub fn tab_line(
+ session_name: Option<&str>,
mut all_tabs: Vec<LinePart>,
active_tab_index: usize,
cols: usize,
@@ -181,7 +186,7 @@ pub fn tab_line(
};
tabs_to_render.push(active_tab);
- let prefix = tab_line_prefix(palette);
+ let prefix = tab_line_prefix(session_name, palette);
populate_tabs_in_tab_line(
&mut tabs_before_active,
&mut tabs_after_active,
diff --git a/default-plugins/tab-bar/src/main.rs b/default-plugins/tab-bar/src/main.rs
index 1f83dcde..a185ccc3 100644
--- a/default-plugins/tab-bar/src/main.rs
+++ b/default-plugins/tab-bar/src/main.rs
@@ -64,6 +64,7 @@ impl ZellijPlugin for State {
all_tabs.push(tab);
}
let tab_line = tab_line(
+ self.mode_info.session_name.as_deref(),
all_tabs,
active_tab_index,
cols,
diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs
index 660acdc9..a15eb4c9 100644
--- a/zellij-server/src/lib.rs
+++ b/zellij-server/src/lib.rs
@@ -15,7 +15,7 @@ use std::path::PathBuf;
use std::sync::{Arc, Mutex, RwLock};
use std::thread;
use wasmer::Store;
-use zellij_tile::data::{Event, Palette, PluginCapabilities};
+use zellij_tile::data::{Event, ModeInfo, Palette, PluginCapabilities};
use crate::{
os_input_output::ServerOsApi,
@@ -31,7 +31,6 @@ use zellij_utils::{
errors::{ContextType, ErrorInstruction, ServerContext},
input::{
command::{RunCommand, TerminalAction},
- get_mode_info,
layout::Layout,
options::Options,
},
@@ -235,7 +234,7 @@ pub fn start_server(os_input: Box<dyn ServerOsApi>, socket_path: PathBuf) {
.unwrap();
let default_mode = options.default_mode.unwrap_or_default();
let mode_info =
- get_mode_info(default_mode, attrs.palette, session_data.capabilities);
+ ModeInfo::new(default_mode, attrs.palette, session_data.capabilities);
session_data
.senders
.send_to_screen(ScreenInstruction::ChangeMode(mode_info.clone()))
diff --git a/zellij-server/src/route.rs b/zellij-server/src/route.rs
index 22d843f0..0796ac74 100644
--- a/zellij-server/src/route.rs
+++ b/zellij-server/src/route.rs
@@ -1,6 +1,6 @@
use std::sync::{Arc, RwLock};
-use zellij_utils::zellij_tile::data::Event;
+use zellij_utils::zellij_tile::data::{Event, ModeInfo};
use crate::{
os_input_output::ServerOsApi, pty::PtyInstruction, screen::ScreenInstruction,
@@ -11,7 +11,6 @@ use zellij_utils::{
input::{
actions::{Action, Direction},
command::TerminalAction,
- get_mode_info,
},
ipc::{ClientToServerMsg, ExitReason, ServerToClientMsg},
};
@@ -43,12 +42,12 @@ fn route_action(
.senders
.send_to_plugin(PluginInstruction::Update(
None,
- Event::ModeUpdate(get_mode_info(mode, palette, session.capabilities)),
+ Event::ModeUpdate(ModeInfo::new(mode, palette, session.capabilities)),
))
.unwrap();
session
.senders
- .send_to_screen(ScreenInstruction::ChangeMode(get_mode_info(
+ .send_to_screen(ScreenInstruction::ChangeMode(ModeInfo::new(
mode,
palette,
session.capabilities,
diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs
index 9005d795..9f5435de 100644
--- a/zellij-server/src/screen.rs
+++ b/zellij-server/src/screen.rs
@@ -434,14 +434,13 @@ pub(crate) fn screen_thread_main(
bus,
&client_attributes,
max_panes,
- ModeInfo {
- palette: client_attributes.palette,
- capabilities: PluginCapabilities {
+ ModeInfo::new(
+ default_mode,
+ client_attributes.palette,
+ PluginCapabilities {
arrow_fonts: capabilities,
},
- mode: default_mode,
- ..ModeInfo::default()
- },
+ ),
default_mode,
session_state,
);
diff --git a/zellij-tile/src/data.rs b/zellij-tile/src/data.rs
index 4e4b6823..48ef4df9 100644
--- a/zellij-tile/src/data.rs
+++ b/zellij-tile/src/data.rs
@@ -148,6 +148,50 @@ pub struct ModeInfo {
pub keybinds: Vec<(String, String)>, // <shortcut> => <shortcut description>
pub palette: Palette,
pub capabilities: PluginCapabilities,
+ pub session_name: Option<String>,
+}
+
+impl ModeInfo {
+ /// Creates a [`ModeInfo`] struct indicating the current [`InputMode`] and its keybinds
+ /// (as pairs of [`String`]s).
+ pub fn new(mode: InputMode, palette: Palette, capabilities: PluginCapabilities) -> Self {
+ let keybinds = match mode {
+ InputMode::Normal | InputMode::Locked => Vec::new(),
+ InputMode::Resize => vec![("←↓↑→".to_string(), "Resize".to_string())],
+ InputMode::Pane => vec![
+ ("←↓↑→".to_string(), "Move focus".to_string()),
+ ("p".to_string(), "Next".to_string()),
+ ("n".to_string(), "New".to_string()),
+ ("d".to_string(), "Down split".to_string()),
+ ("r".to_string(), "Right split".to_string()),
+ ("x".to_string(), "Close".to_string()),
+ ("f".to_string(), "Fullscreen".to_string()),
+ ],
+ InputMode::Tab => vec![
+ ("←↓↑→".to_string(), "Move focus".to_string()),
+ ("n".to_string(), "New".to_string()),
+ ("x".to_string(), "Close".to_string()),
+ ("r".to_string(), "Rename".to_string()),
+ ("s".to_string(), "Sync".to_string()),
+ ],
+ InputMode::Scroll => vec![
+ ("↓↑".to_string(), "Scroll".to_string()),
+ ("PgUp/PgDn".to_string(), "Scroll Page".to_string()),
+ ],
+ InputMode::RenameTab => vec![("Enter".to_string(), "when done".to_string())],
+ InputMode::Session => vec![("d".to_string(), "Detach".to_string())],
+ };
+
+ let session_name = std::env::var("ZELLIJ_SESSION_NAME").ok();
+
+ Self {
+ mode,
+ keybinds,
+ palette,
+ capabilities,
+ session_name,
+ }
+ }
}
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
diff --git a/zellij-utils/src/input/mod.rs b/zellij-utils/src/input/mod.rs
index 11c5a843..e037fe66 100644
--- a/zellij-utils/src/input/mod.rs
+++ b/zellij-utils/src/input/mod.rs
@@ -10,56 +10,7 @@ pub mod options;
pub mod theme;
use termion::input::TermRead;
-use zellij_tile::data::{InputMode, Key, ModeInfo, Palette, PluginCapabilities};
-
-/// Creates a [`Help`] struct indicating the current [`InputMode`] and its keybinds
-/// (as pairs of [`String`]s).
-// TODO this should probably be automatically generated in some way
-pub fn get_mode_info(
- mode: InputMode,
- palette: Palette,
- capabilities: PluginCapabilities,
-) -> ModeInfo {
- let mut keybinds: Vec<(String, String)> = vec![];
- match mode {
- InputMode::Normal | InputMode::Locked => {}
- InputMode::Resize => {
- keybinds.push(("←↓↑→".to_string(), "Resize".to_string()));
- }
- InputMode::Pane => {
- keybinds.push(("←↓↑→".to_string(), "Move focus".to_string()));
- keybinds.push(("p".to_string(), "Next".to_string()));
- keybinds.push(("n".to_string(), "New".to_string()));
- keybinds.push(("d".to_string(), "Down split".to_string()));
- keybinds.push(("r".to_string(), "Right split".to_string()));
- keybinds.push(("x".to_string(), "Close".to_string()));
- keybinds.push(("f".to_string(), "Fullscreen".to_string()));
- }
- InputMode::Tab => {
- keybinds.push(("←↓↑→".to_string(), "Move focus".to_string()));
- keybinds.push(("n".to_string(), "New".to_string()));
- keybinds.push(("x".to_string(), "Close".to_string()));
- keybinds.push(("r".to_string(), "Rename".to_string()));
- keybinds.push(("s".to_string(), "Sync".to_string()));
- }
- InputMode::Scroll => {
- keybinds.push(("↓↑".to_string(), "Scroll".to_string()));
- keybinds.push(("PgUp/PgDn".to_string(), "Scroll Page".to_string()));
- }
- InputMode::RenameTab => {
- keybinds.push(("Enter".to_string(), "when done".to_string()));
- }
- InputMode::Session => {
- keybinds.push(("d".to_string(), "Detach".to_string()));
- }
- }
- ModeInfo {
- mode,
- keybinds,
- palette,
- capabilities,
- }
-}
+use zellij_tile::data::Key;
pub fn parse_keys(input_bytes: &[u8]) -> Vec<Key> {
input_bytes.keys().flatten().map(cast_termion_key).collect()