Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge --layout and --layout-path #1426

Merged
merged 3 commits into from
May 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/tests/e2e/remote_runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ fn start_zellij_with_layout(channel: &mut ssh2::Channel, layout_path: &str) {
channel
.write_all(
format!(
"{} --layout-path {} --session {} --data-dir {}\n",
"{} --layout {} --session {} --data-dir {}\n",
ZELLIJ_EXECUTABLE_LOCATION, layout_path, SESSION_NAME, ZELLIJ_DATA_DIR
)
.as_bytes(),
Expand Down
6 changes: 1 addition & 5 deletions zellij-utils/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,10 @@ pub struct CliArgs {
#[clap(long, short, overrides_with = "session")]
pub session: Option<String>,

/// Name of a layout file in the layout directory
/// Name of a predefined layout or path to a layout file
#[clap(short, long, parse(from_os_str), overrides_with = "layout")]
pub layout: Option<PathBuf>,

/// Path to a layout yaml file
#[clap(long, parse(from_os_str), overrides_with = "layout_path")]
pub layout_path: Option<PathBuf>,

/// Change where zellij looks for the configuration file
#[clap(short, long, overrides_with = "config", env = ZELLIJ_CONFIG_FILE_ENV, parse(from_os_str))]
pub config: Option<PathBuf>,
Expand Down
15 changes: 12 additions & 3 deletions zellij-utils/src/input/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -239,12 +239,21 @@ impl LayoutFromYamlIntermediate {

pub fn from_path_or_default(
layout: Option<&PathBuf>,
layout_path: Option<&PathBuf>,
layout_dir: Option<PathBuf>,
) -> Option<LayoutFromYamlIntermediateResult> {
layout
.map(|p| LayoutFromYamlIntermediate::from_dir(p, layout_dir.as_ref()))
.or_else(|| layout_path.map(|p| LayoutFromYamlIntermediate::from_path(p)))
.map(|layout| {
// The way we determine where to look for the layout is similar to
// how a path would look for an executable.
// See the gh issue for more: https://github.com/zellij-org/zellij/issues/1412#issuecomment-1131559720
if layout.extension().is_some() || layout.components().count() > 1 {
// We look localy!
LayoutFromYamlIntermediate::from_path(layout)
} else {
// We look in the default dir
LayoutFromYamlIntermediate::from_dir(layout, layout_dir.as_ref())
}
})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great comments, thanks!

.or_else(|| {
Some(LayoutFromYamlIntermediate::from_dir(
&std::path::PathBuf::from("default"),
Expand Down
7 changes: 2 additions & 5 deletions zellij-utils/src/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,11 +223,8 @@ impl Setup {
.layout_dir
.clone()
.or_else(|| get_layout_dir(opts.config_dir.clone().or_else(find_default_config_dir)));
let layout_result = LayoutFromYamlIntermediate::from_path_or_default(
opts.layout.as_ref(),
opts.layout_path.as_ref(),
layout_dir,
);
let layout_result =
LayoutFromYamlIntermediate::from_path_or_default(opts.layout.as_ref(), layout_dir);
let layout = match layout_result {
None => None,
Some(Ok(layout)) => Some(layout),
Expand Down