summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/input/layout.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-utils/src/input/layout.rs')
-rw-r--r--zellij-utils/src/input/layout.rs40
1 files changed, 36 insertions, 4 deletions
diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs
index ad2fca896..82da8cbf0 100644
--- a/zellij-utils/src/input/layout.rs
+++ b/zellij-utils/src/input/layout.rs
@@ -108,12 +108,18 @@ impl RunPluginOrAlias {
.aliases
.get(run_plugin_alias.name.as_str())
.map(|r| {
- r.clone().merge_configuration(
+ let mut merged_run_plugin = r.clone().merge_configuration(
&run_plugin_alias
.configuration
.as_ref()
.map(|c| c.inner().clone()),
- )
+ );
+ // if the alias has its own cwd, it should always override the alias
+ // value's cwd
+ if run_plugin_alias.initial_cwd.is_some() {
+ merged_run_plugin.initial_cwd = run_plugin_alias.initial_cwd.clone();
+ }
+ merged_run_plugin
});
run_plugin_alias.run_plugin = merged_run_plugin;
}
@@ -127,6 +133,9 @@ impl RunPluginOrAlias {
pub fn get_configuration(&self) -> Option<PluginUserConfiguration> {
self.get_run_plugin().map(|r| r.configuration.clone())
}
+ pub fn get_initial_cwd(&self) -> Option<PathBuf> {
+ self.get_run_plugin().and_then(|r| r.initial_cwd.clone())
+ }
pub fn from_url(
url: &str,
configuration: &Option<BTreeMap<String, String>>,
@@ -141,10 +150,11 @@ impl RunPluginOrAlias {
.as_ref()
.map(|c| PluginUserConfiguration::new(c.clone()))
.unwrap_or_default(),
+ ..Default::default()
})),
Err(PluginsConfigError::InvalidUrlScheme(_))
| Err(PluginsConfigError::InvalidUrl(..)) => {
- let mut plugin_alias = PluginAlias::new(&url, configuration);
+ let mut plugin_alias = PluginAlias::new(&url, configuration, None);
if let Some(alias_dict) = alias_dict {
plugin_alias.run_plugin = alias_dict
.aliases
@@ -190,6 +200,17 @@ impl RunPluginOrAlias {
_ => false,
}
}
+ pub fn with_initial_cwd(mut self, initial_cwd: Option<PathBuf>) -> Self {
+ match self {
+ RunPluginOrAlias::RunPlugin(ref mut run_plugin) => {
+ run_plugin.initial_cwd = initial_cwd;
+ },
+ RunPluginOrAlias::Alias(ref mut alias) => {
+ alias.initial_cwd = initial_cwd;
+ },
+ }
+ self
+ }
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
@@ -365,6 +386,7 @@ pub struct RunPlugin {
pub _allow_exec_host_cmd: bool,
pub location: RunPluginLocation,
pub configuration: PluginUserConfiguration,
+ pub initial_cwd: Option<PathBuf>,
}
impl RunPlugin {
@@ -379,6 +401,10 @@ impl RunPlugin {
self.configuration = PluginUserConfiguration::new(configuration);
self
}
+ pub fn with_initial_cwd(mut self, initial_cwd: Option<PathBuf>) -> Self {
+ self.initial_cwd = initial_cwd;
+ self
+ }
pub fn merge_configuration(mut self, configuration: &Option<BTreeMap<String, String>>) -> Self {
if let Some(configuration) = configuration {
self.configuration.merge(configuration);
@@ -391,16 +417,22 @@ impl RunPlugin {
pub struct PluginAlias {
pub name: String,
pub configuration: Option<PluginUserConfiguration>,
+ pub initial_cwd: Option<PathBuf>,
pub run_plugin: Option<RunPlugin>,
}
impl PluginAlias {
- pub fn new(name: &str, configuration: &Option<BTreeMap<String, String>>) -> Self {
+ pub fn new(
+ name: &str,
+ configuration: &Option<BTreeMap<String, String>>,
+ initial_cwd: Option<PathBuf>,
+ ) -> Self {
PluginAlias {
name: name.to_owned(),
configuration: configuration
.as_ref()
.map(|c| PluginUserConfiguration::new(c.clone())),
+ initial_cwd,
..Default::default()
}
}