aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api
diff options
context:
space:
mode:
authorBartosz Zbytniewski <50180524+devzbysiu@users.noreply.github.com>2024-02-18 19:40:03 +0100
committerGitHub <noreply@github.com>2024-02-19 03:40:03 +0900
commitdd5ea26cc72f3c39e9f8b4d8452a42c9c2f85442 (patch)
treee37c0d0b75d7edb7538c44ba10ba752d8ff68497 /zellij-utils/src/plugin_api
parentdocs(changelog): break pane fix (diff)
downloadsl0ppij-dd5ea26cc72f3c39e9f8b4d8452a42c9c2f85442.tar.gz
sl0ppij-dd5ea26cc72f3c39e9f8b4d8452a42c9c2f85442.tar.xz
sl0ppij-dd5ea26cc72f3c39e9f8b4d8452a42c9c2f85442.zip
feat: add moving tab to other position (#3047)
* feat: add moving tab to other position * docs(changelog): revert changes * test: update config snapshots * refactor: get rid of HorizontalDirection enum * refactor: cleanup code order * refactor: use debug! instead of info! * refactor: use more defensive way to switch tabs * refactor: revert tip changes * refactor: code formatting * refactor: improve invalid input notification * refactor: inline fns for calculating target index --------- Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
Diffstat (limited to 'zellij-utils/src/plugin_api')
-rw-r--r--zellij-utils/src/plugin_api/action.proto7
-rw-r--r--zellij-utils/src/plugin_api/action.rs52
2 files changed, 53 insertions, 6 deletions
diff --git a/zellij-utils/src/plugin_api/action.proto b/zellij-utils/src/plugin_api/action.proto
index 0ed5b3b7..d59da4ad 100644
--- a/zellij-utils/src/plugin_api/action.proto
+++ b/zellij-utils/src/plugin_api/action.proto
@@ -54,6 +54,7 @@ message Action {
string rename_session_payload = 45;
LaunchOrFocusPluginPayload launch_plugin_payload = 46;
CliPipePayload message_payload = 47;
+ MoveTabDirection move_tab_payload = 48;
}
}
@@ -91,6 +92,11 @@ enum SearchOption {
Wrap = 2;
}
+enum MoveTabDirection {
+ Left = 0;
+ Right = 1;
+}
+
message LaunchOrFocusPluginPayload {
string plugin_url = 1;
bool should_float = 2;
@@ -236,6 +242,7 @@ enum ActionName {
RenameSession = 80;
LaunchPlugin = 81;
CliPipe = 82;
+ MoveTab = 83;
}
message Position {
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index be54e617..ed657897 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -2,12 +2,13 @@ pub use super::generated_api::api::{
action::{
action::OptionalPayload, Action as ProtobufAction, ActionName as ProtobufActionName,
DumpScreenPayload, EditFilePayload, GoToTabNamePayload, IdAndName,
- LaunchOrFocusPluginPayload, MovePanePayload, NameAndValue as ProtobufNameAndValue,
- NewFloatingPanePayload, NewPanePayload, NewPluginPanePayload, NewTiledPanePayload,
- PaneIdAndShouldFloat, PluginConfiguration as ProtobufPluginConfiguration,
- Position as ProtobufPosition, RunCommandAction as ProtobufRunCommandAction,
- ScrollAtPayload, SearchDirection as ProtobufSearchDirection,
- SearchOption as ProtobufSearchOption, SwitchToModePayload, WriteCharsPayload, WritePayload,
+ LaunchOrFocusPluginPayload, MovePanePayload, MoveTabDirection as ProtobufMoveTabDirection,
+ NameAndValue as ProtobufNameAndValue, NewFloatingPanePayload, NewPanePayload,
+ NewPluginPanePayload, NewTiledPanePayload, PaneIdAndShouldFloat,
+ PluginConfiguration as ProtobufPluginConfiguration, Position as ProtobufPosition,
+ RunCommandAction as ProtobufRunCommandAction, ScrollAtPayload,
+ SearchDirection as ProtobufSearchDirection, SearchOption as ProtobufSearchOption,
+ SwitchToModePayload, WriteCharsPayload, WritePayload,
},
input_mode::InputMode as ProtobufInputMode,
resize::{Resize as ProtobufResize, ResizeDirection as ProtobufResizeDirection},
@@ -358,6 +359,15 @@ impl TryFrom<ProtobufAction> for Action {
Some(_) => Err("UndoRenameTab should not have a payload"),
None => Ok(Action::UndoRenameTab),
},
+ Some(ProtobufActionName::MoveTab) => match protobuf_action.optional_payload {
+ Some(OptionalPayload::MoveTabPayload(move_tab_payload)) => {
+ let direction: Direction = ProtobufMoveTabDirection::from_i32(move_tab_payload)
+ .ok_or("Malformed move tab direction for Action::MoveTab")?
+ .try_into()?;
+ Ok(Action::MoveTab(direction))
+ },
+ _ => Err("Wrong payload for Action::MoveTab"),
+ },
Some(ProtobufActionName::Run) => match protobuf_action.optional_payload {
Some(OptionalPayload::RunPayload(run_command_action)) => {
let run_command_action = run_command_action.try_into()?;
@@ -994,6 +1004,13 @@ impl TryFrom<Action> for ProtobufAction {
name: ProtobufActionName::UndoRenameTab as i32,
optional_payload: None,
}),
+ Action::MoveTab(direction) => {
+ let direction: ProtobufMoveTabDirection = direction.try_into()?;
+ Ok(ProtobufAction {
+ name: ProtobufActionName::MoveTab as i32,
+ optional_payload: Some(OptionalPayload::MoveTabPayload(direction as i32)),
+ })
+ },
Action::Run(run_command_action) => {
let run_command_action: ProtobufRunCommandAction = run_command_action.try_into()?;
Ok(ProtobufAction {
@@ -1311,6 +1328,29 @@ impl TryFrom<SearchDirection> for ProtobufSearchDirection {
}
}
+impl TryFrom<ProtobufMoveTabDirection> for Direction {
+ type Error = &'static str;
+ fn try_from(
+ protobuf_move_tab_direction: ProtobufMoveTabDirection,
+ ) -> Result<Self, &'static str> {
+ match protobuf_move_tab_direction {
+ ProtobufMoveTabDirection::Left => Ok(Direction::Left),
+ ProtobufMoveTabDirection::Right => Ok(Direction::Right),
+ }
+ }
+}
+
+impl TryFrom<Direction> for ProtobufMoveTabDirection {
+ type Error = &'static str;
+ fn try_from(direction: Direction) -> Result<Self, &'static str> {
+ match direction {
+ Direction::Left => Ok(ProtobufMoveTabDirection::Left),
+ Direction::Right => Ok(ProtobufMoveTabDirection::Right),
+ _ => Err("Wrong direction for ProtobufMoveTabDirection"),
+ }
+ }
+}
+
impl TryFrom<ProtobufRunCommandAction> for RunCommandAction {
type Error = &'static str;
fn try_from(