mirror of
https://github.com/zellij-org/zellij.git
synced 2024-11-23 08:57:14 +03:00
fix(cli): new-tab now also looks in layout_dir for layouts (#2198)
* fix(cli): the new-tab action now also searches for layouts in the layout dir * style(fmt): rustfmt * fix(tests): add missing parameter to cli action
This commit is contained in:
parent
a1f5635176
commit
52de5b7db0
@ -2370,6 +2370,7 @@ pub fn send_cli_new_tab_action_default_params() {
|
|||||||
let new_tab_action = CliAction::NewTab {
|
let new_tab_action = CliAction::NewTab {
|
||||||
name: None,
|
name: None,
|
||||||
layout: None,
|
layout: None,
|
||||||
|
layout_dir: None,
|
||||||
cwd: None,
|
cwd: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(
|
send_cli_action_to_server(
|
||||||
@ -2414,6 +2415,7 @@ pub fn send_cli_new_tab_action_with_name_and_layout() {
|
|||||||
"{}/src/unit/fixtures/layout-with-three-panes.kdl",
|
"{}/src/unit/fixtures/layout-with-three-panes.kdl",
|
||||||
env!("CARGO_MANIFEST_DIR")
|
env!("CARGO_MANIFEST_DIR")
|
||||||
))),
|
))),
|
||||||
|
layout_dir: None,
|
||||||
cwd: None,
|
cwd: None,
|
||||||
};
|
};
|
||||||
send_cli_action_to_server(
|
send_cli_action_to_server(
|
||||||
|
@ -352,6 +352,10 @@ pub enum CliAction {
|
|||||||
#[clap(short, long, value_parser)]
|
#[clap(short, long, value_parser)]
|
||||||
layout: Option<PathBuf>,
|
layout: Option<PathBuf>,
|
||||||
|
|
||||||
|
/// Default folder to look for layouts
|
||||||
|
#[clap(short, long, value_parser, requires("layout"))]
|
||||||
|
layout_dir: Option<PathBuf>,
|
||||||
|
|
||||||
/// Name of the new tab
|
/// Name of the new tab
|
||||||
#[clap(short, long, value_parser)]
|
#[clap(short, long, value_parser)]
|
||||||
name: Option<String>,
|
name: Option<String>,
|
||||||
|
@ -9,6 +9,7 @@ use crate::data::InputMode;
|
|||||||
use crate::data::{Direction, Resize};
|
use crate::data::{Direction, Resize};
|
||||||
use crate::input::config::{ConfigError, KdlError};
|
use crate::input::config::{ConfigError, KdlError};
|
||||||
use crate::input::options::OnForceClose;
|
use crate::input::options::OnForceClose;
|
||||||
|
use crate::setup::{find_default_config_dir, get_layout_dir};
|
||||||
use miette::{NamedSource, Report};
|
use miette::{NamedSource, Report};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -348,14 +349,21 @@ impl Action {
|
|||||||
Action::TabNameInput(name.as_bytes().to_vec()),
|
Action::TabNameInput(name.as_bytes().to_vec()),
|
||||||
]),
|
]),
|
||||||
CliAction::UndoRenameTab => Ok(vec![Action::UndoRenameTab]),
|
CliAction::UndoRenameTab => Ok(vec![Action::UndoRenameTab]),
|
||||||
CliAction::NewTab { name, layout, cwd } => {
|
CliAction::NewTab {
|
||||||
|
name,
|
||||||
|
layout,
|
||||||
|
layout_dir,
|
||||||
|
cwd,
|
||||||
|
} => {
|
||||||
let current_dir = get_current_dir();
|
let current_dir = get_current_dir();
|
||||||
let cwd = cwd
|
let cwd = cwd
|
||||||
.map(|cwd| current_dir.join(cwd))
|
.map(|cwd| current_dir.join(cwd))
|
||||||
.or_else(|| Some(current_dir));
|
.or_else(|| Some(current_dir));
|
||||||
if let Some(layout_path) = layout {
|
if let Some(layout_path) = layout {
|
||||||
|
let layout_dir =
|
||||||
|
layout_dir.or_else(|| get_layout_dir(find_default_config_dir()));
|
||||||
let (path_to_raw_layout, raw_layout, swap_layouts) =
|
let (path_to_raw_layout, raw_layout, swap_layouts) =
|
||||||
Layout::stringified_from_path_or_default(Some(&layout_path), None)
|
Layout::stringified_from_path_or_default(Some(&layout_path), layout_dir)
|
||||||
.map_err(|e| format!("Failed to load layout: {}", e))?;
|
.map_err(|e| format!("Failed to load layout: {}", e))?;
|
||||||
let layout = Layout::from_str(&raw_layout, path_to_raw_layout, swap_layouts.as_ref().map(|(f, p)| (f.as_str(), p.as_str())), cwd).map_err(|e| {
|
let layout = Layout::from_str(&raw_layout, path_to_raw_layout, swap_layouts.as_ref().map(|(f, p)| (f.as_str(), p.as_str())), cwd).map_err(|e| {
|
||||||
let stringified_error = match e {
|
let stringified_error = match e {
|
||||||
|
@ -291,8 +291,8 @@ impl Setup {
|
|||||||
/// file options, superceeding the config file options:
|
/// file options, superceeding the config file options:
|
||||||
/// 1. command line options (`zellij options`)
|
/// 1. command line options (`zellij options`)
|
||||||
/// 2. layout options
|
/// 2. layout options
|
||||||
/// (`layout.yaml` / `zellij --layout`)
|
/// (`layout.kdl` / `zellij --layout`)
|
||||||
/// 3. config options (`config.yaml`)
|
/// 3. config options (`config.kdl`)
|
||||||
pub fn from_cli_args(cli_args: &CliArgs) -> Result<(Config, Layout, Options), ConfigError> {
|
pub fn from_cli_args(cli_args: &CliArgs) -> Result<(Config, Layout, Options), ConfigError> {
|
||||||
// note that this can potentially exit the process
|
// note that this can potentially exit the process
|
||||||
Setup::handle_setup_commands(cli_args);
|
Setup::handle_setup_commands(cli_args);
|
||||||
|
Loading…
Reference in New Issue
Block a user