summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-11-05 15:32:05 +0100
committerGitHub <noreply@github.com>2023-11-05 15:32:05 +0100
commit28a165a969a9e1ee9f1fe66e4d63134b895b2ef7 (patch)
tree678ec1cd9d536d9cb7fcdb071e27cf12caf43afb /zellij-utils/src
parent9eb9734bcca3cb0dcdff592da4d7a536d860c363 (diff)
feat(ux): allow renaming sessions (#2903)
* change session name through the cli * change session name from the session-manager * style(fmt): rustfmt
Diffstat (limited to 'zellij-utils/src')
-rw-r--r--zellij-utils/src/cli.rs3
-rw-r--r--zellij-utils/src/data.rs1
-rw-r--r--zellij-utils/src/errors.rs2
-rw-r--r--zellij-utils/src/input/actions.rs2
-rw-r--r--zellij-utils/src/ipc.rs1
-rw-r--r--zellij-utils/src/kdl/mod.rs6
-rw-r--r--zellij-utils/src/plugin_api/action.proto2
-rw-r--r--zellij-utils/src/plugin_api/action.rs10
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto2
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs10
10 files changed, 39 insertions, 0 deletions
diff --git a/zellij-utils/src/cli.rs b/zellij-utils/src/cli.rs
index c196c17d1..02380ba4b 100644
--- a/zellij-utils/src/cli.rs
+++ b/zellij-utils/src/cli.rs
@@ -527,4 +527,7 @@ pub enum CliAction {
#[clap(short, long, value_parser)]
configuration: Option<PluginUserConfiguration>,
},
+ RenameSession {
+ name: String,
+ },
}
diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs
index 82daf118d..bed6f4747 100644
--- a/zellij-utils/src/data.rs
+++ b/zellij-utils/src/data.rs
@@ -1104,4 +1104,5 @@ pub enum PluginCommand {
Vec<u8>, // body
BTreeMap<String, String>, // context
),
+ RenameSession(String), // String -> new session name
}
diff --git a/zellij-utils/src/errors.rs b/zellij-utils/src/errors.rs
index 1e4eab8a2..536b3bfba 100644
--- a/zellij-utils/src/errors.rs
+++ b/zellij-utils/src/errors.rs
@@ -347,6 +347,7 @@ pub enum ScreenContext {
ReplacePane,
NewInPlacePluginPane,
DumpLayoutToHd,
+ RenameSession,
}
/// Stack call representations corresponding to the different types of [`PtyInstruction`]s.
@@ -404,6 +405,7 @@ pub enum ClientContext {
Connected,
ActiveClients,
Log,
+ LogError,
OwnClientId,
StartedParsingStdinQuery,
DoneParsingStdinQuery,
diff --git a/zellij-utils/src/input/actions.rs b/zellij-utils/src/input/actions.rs
index c0714e59f..c36579c37 100644
--- a/zellij-utils/src/input/actions.rs
+++ b/zellij-utils/src/input/actions.rs
@@ -250,6 +250,7 @@ pub enum Action {
BreakPane,
BreakPaneRight,
BreakPaneLeft,
+ RenameSession(String),
}
impl Action {
@@ -537,6 +538,7 @@ impl Action {
in_place,
)])
},
+ CliAction::RenameSession { name } => Ok(vec![Action::RenameSession(name)]),
}
}
}
diff --git a/zellij-utils/src/ipc.rs b/zellij-utils/src/ipc.rs
index a60ecc615..b6e837228 100644
--- a/zellij-utils/src/ipc.rs
+++ b/zellij-utils/src/ipc.rs
@@ -101,6 +101,7 @@ pub enum ServerToClientMsg {
Connected,
ActiveClients(Vec<ClientId>),
Log(Vec<String>),
+ LogError(Vec<String>),
SwitchSession(ConnectToSession),
}
diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs
index 0c32bfacb..061e24ebc 100644
--- a/zellij-utils/src/kdl/mod.rs
+++ b/zellij-utils/src/kdl/mod.rs
@@ -505,6 +505,7 @@ impl Action {
})?;
Ok(Action::Search(search_direction))
},
+ "RenameSession" => Ok(Action::RenameSession(string)),
_ => Err(ConfigError::new_kdl_error(
format!("Unsupported action: {}", action_name),
action_node.span().offset(),
@@ -957,6 +958,11 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
"BreakPane" => Ok(Action::BreakPane),
"BreakPaneRight" => Ok(Action::BreakPaneRight),
"BreakPaneLeft" => Ok(Action::BreakPaneLeft),
+ "RenameSession" => parse_kdl_action_char_or_string_arguments!(
+ action_name,
+ action_arguments,
+ kdl_action
+ ),
_ => Err(ConfigError::new_kdl_error(
format!("Unsupported action: {}", action_name).into(),
kdl_action.span().offset(),
diff --git a/zellij-utils/src/plugin_api/action.proto b/zellij-utils/src/plugin_api/action.proto
index 1545b9bf4..59eea7af1 100644
--- a/zellij-utils/src/plugin_api/action.proto
+++ b/zellij-utils/src/plugin_api/action.proto
@@ -51,6 +51,7 @@ message Action {
IdAndName rename_terminal_pane_payload = 42;
IdAndName rename_plugin_pane_payload = 43;
IdAndName rename_tab_payload = 44;
+ string rename_session_payload = 45;
}
}
@@ -221,6 +222,7 @@ enum ActionName {
BreakPane = 77;
BreakPaneRight = 78;
BreakPaneLeft = 79;
+ RenameSession = 80;
}
message Position {
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index 0addb0dcc..1048d91f6 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -626,6 +626,12 @@ impl TryFrom<ProtobufAction> for Action {
Some(_) => Err("BreakPaneLeft should not have a payload"),
None => Ok(Action::BreakPaneLeft),
},
+ Some(ProtobufActionName::RenameSession) => match protobuf_action.optional_payload {
+ Some(OptionalPayload::RenameSessionPayload(name)) => {
+ Ok(Action::RenameSession(name))
+ },
+ _ => Err("Wrong payload for Action::RenameSession"),
+ },
_ => Err("Unknown Action"),
}
}
@@ -1164,6 +1170,10 @@ impl TryFrom<Action> for ProtobufAction {
name: ProtobufActionName::BreakPaneLeft as i32,
optional_payload: None,
}),
+ Action::RenameSession(session_name) => Ok(ProtobufAction {
+ name: ProtobufActionName::RenameSession as i32,
+ optional_payload: Some(OptionalPayload::RenameSessionPayload(session_name)),
+ }),
Action::NoOp
| Action::Confirm
| Action::NewInPlacePane(..)
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index 0b950ff0e..53994a88c 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -86,6 +86,7 @@ enum CommandName {
WebRequest = 72;
DeleteDeadSession = 73;
DeleteAllDeadSessions = 74;
+ RenameSession = 75;
}
message PluginCommand {
@@ -135,6 +136,7 @@ message PluginCommand {
RunCommandPayload run_command_payload = 43;
WebRequestPayload web_request_payload = 44;
string delete_dead_session_payload = 45;
+ string rename_session_payload = 46;
}
}
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 6b70b18eb..ed476687c 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -635,6 +635,12 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
_ => Err("Mismatched payload for DeleteDeadSession"),
},
Some(CommandName::DeleteAllDeadSessions) => Ok(PluginCommand::DeleteAllDeadSessions),
+ Some(CommandName::RenameSession) => match protobuf_plugin_command.payload {
+ Some(Payload::RenameSessionPayload(new_session_name)) => {
+ Ok(PluginCommand::RenameSession(new_session_name))
+ },
+ _ => Err("Mismatched payload for RenameSession"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -1059,6 +1065,10 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
name: CommandName::DeleteAllDeadSessions as i32,
payload: None,
}),
+ PluginCommand::RenameSession(new_session_name) => Ok(ProtobufPluginCommand {
+ name: CommandName::RenameSession as i32,
+ payload: Some(Payload::RenameSessionPayload(new_session_name)),
+ }),
}
}
}