mirror of
https://github.com/zellij-org/zellij.git
synced 2024-11-26 22:15:19 +03:00
Display session name within session
This commit is contained in:
parent
50d049a0ed
commit
4fcf558156
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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()))
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
);
|
||||
|
@ -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)]
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user