diff options
| author | Bartosz Zbytniewski <50180524+devzbysiu@users.noreply.github.com> | 2024-02-18 19:40:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-19 03:40:03 +0900 |
| commit | dd5ea26cc72f3c39e9f8b4d8452a42c9c2f85442 (patch) | |
| tree | e37c0d0b75d7edb7538c44ba10ba752d8ff68497 /zellij-utils/src/plugin_api | |
| parent | docs(changelog): break pane fix (diff) | |
| download | sl0ppij-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.proto | 7 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/action.rs | 52 |
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( |
