mirror of
https://github.com/zellij-org/zellij.git
synced 2024-12-26 10:43:46 +03:00
Add running commands to an action
Add the ability to bind running commands to an action. Eg: ``` - action: [Run: {command: "htop",},] key: [F: 6,] `` Optionally the direction and arguments can be specified: ``` - action: [Run: {command: "htop", args: ["-C",]},] key: [F: 7,] ``` The directional splits are analogous to the `[NewPane]` splits. ``` - action: [Run: {command: "htop", args: ["-C",], direction: "Up"},] key: [F: 8,] ```
This commit is contained in:
parent
71f980a01d
commit
0bf78100dd
@ -10,6 +10,7 @@ use zellij_utils::{
|
||||
channels::SenderWithContext,
|
||||
input::{
|
||||
actions::{Action, Direction},
|
||||
command::TerminalAction,
|
||||
get_mode_info,
|
||||
},
|
||||
ipc::{ClientToServerMsg, ExitReason, ServerToClientMsg},
|
||||
@ -143,6 +144,18 @@ fn route_action(
|
||||
};
|
||||
session.senders.send_to_pty(pty_instr).unwrap();
|
||||
}
|
||||
Action::Run(command) => {
|
||||
let run_cmd = Some(TerminalAction::RunCommand(command.clone().into()));
|
||||
let pty_instr = match command.direction {
|
||||
Some(Direction::Left) => PtyInstruction::SpawnTerminalVertically(run_cmd),
|
||||
Some(Direction::Right) => PtyInstruction::SpawnTerminalVertically(run_cmd),
|
||||
Some(Direction::Up) => PtyInstruction::SpawnTerminalHorizontally(run_cmd),
|
||||
Some(Direction::Down) => PtyInstruction::SpawnTerminalHorizontally(run_cmd),
|
||||
// No direction specified - try to put it in the biggest available spot
|
||||
None => PtyInstruction::SpawnTerminal(run_cmd),
|
||||
};
|
||||
session.senders.send_to_pty(pty_instr).unwrap();
|
||||
}
|
||||
Action::CloseFocus => {
|
||||
session
|
||||
.senders
|
||||
|
@ -1,5 +1,6 @@
|
||||
//! Definition of the actions that can be bound to keys.
|
||||
|
||||
use super::command::RunCommandAction;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use zellij_tile::data::InputMode;
|
||||
|
||||
@ -65,6 +66,8 @@ pub enum Action {
|
||||
CloseTab,
|
||||
GoToTab(u32),
|
||||
TabNameInput(Vec<u8>),
|
||||
/// Run speficied command in new pane.
|
||||
Run(RunCommandAction),
|
||||
/// Detach session and exit
|
||||
Detach,
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
//! Trigger a command
|
||||
use super::actions::Direction;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::path::PathBuf;
|
||||
|
||||
@ -8,9 +9,28 @@ pub enum TerminalAction {
|
||||
RunCommand(RunCommand),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Default, Serialize, PartialEq)]
|
||||
#[derive(Clone, Debug, Deserialize, Default, Serialize, PartialEq, Eq)]
|
||||
pub struct RunCommand {
|
||||
pub command: PathBuf,
|
||||
#[serde(default)]
|
||||
pub args: Vec<String>,
|
||||
}
|
||||
|
||||
/// Intermediate representation
|
||||
#[derive(Clone, Debug, Deserialize, Default, Serialize, PartialEq, Eq)]
|
||||
pub struct RunCommandAction {
|
||||
pub command: PathBuf,
|
||||
#[serde(default)]
|
||||
pub args: Vec<String>,
|
||||
#[serde(default)]
|
||||
pub direction: Option<Direction>,
|
||||
}
|
||||
|
||||
impl From<RunCommandAction> for RunCommand {
|
||||
fn from(action: RunCommandAction) -> Self {
|
||||
RunCommand {
|
||||
command: action.command,
|
||||
args: action.args,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user