summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/input/plugins.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-utils/src/input/plugins.rs')
-rw-r--r--zellij-utils/src/input/plugins.rs113
1 files changed, 47 insertions, 66 deletions
diff --git a/zellij-utils/src/input/plugins.rs b/zellij-utils/src/input/plugins.rs
index 2a262222f..cb3d68916 100644
--- a/zellij-utils/src/input/plugins.rs
+++ b/zellij-utils/src/input/plugins.rs
@@ -1,6 +1,5 @@
//! Plugins configuration metadata
-use std::borrow::Borrow;
-use std::collections::HashMap;
+use std::collections::BTreeMap;
use std::fs;
use std::path::{Path, PathBuf};
use thiserror::Error;
@@ -14,73 +13,17 @@ use crate::consts::ASSET_MAP;
pub use crate::data::PluginTag;
use crate::errors::prelude::*;
-use std::collections::BTreeMap;
-use std::fmt;
-
-/// Used in the config struct for plugin metadata
-#[derive(Clone, PartialEq, Deserialize, Serialize)]
-pub struct PluginsConfig(pub HashMap<PluginTag, PluginConfig>);
-
-impl fmt::Debug for PluginsConfig {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- let mut stable_sorted = BTreeMap::new();
- for (plugin_tag, plugin_config) in self.0.iter() {
- stable_sorted.insert(plugin_tag, plugin_config);
- }
- write!(f, "{:#?}", stable_sorted)
- }
+#[derive(Clone, Debug, Default, Eq, PartialEq, Deserialize, Serialize)]
+pub struct PluginAliases {
+ pub aliases: BTreeMap<String, RunPlugin>,
}
-impl PluginsConfig {
- pub fn new() -> Self {
- Self(HashMap::new())
- }
- pub fn from_data(data: HashMap<PluginTag, PluginConfig>) -> Self {
- PluginsConfig(data)
- }
-
- /// Get plugin config from run configuration specified in layout files.
- pub fn get(&self, run: impl Borrow<RunPlugin>) -> Option<PluginConfig> {
- let run = run.borrow();
- match &run.location {
- RunPluginLocation::File(path) => Some(PluginConfig {
- path: path.clone(),
- run: PluginType::Pane(None),
- _allow_exec_host_cmd: run._allow_exec_host_cmd,
- location: run.location.clone(),
- userspace_configuration: run.configuration.clone(),
- }),
- RunPluginLocation::Zellij(tag) => self.0.get(tag).cloned().map(|plugin| PluginConfig {
- _allow_exec_host_cmd: run._allow_exec_host_cmd,
- userspace_configuration: run.configuration.clone(),
- ..plugin
- }),
- RunPluginLocation::Remote(_) => Some(PluginConfig {
- path: PathBuf::new(),
- run: PluginType::Pane(None),
- _allow_exec_host_cmd: run._allow_exec_host_cmd,
- location: run.location.clone(),
- userspace_configuration: run.configuration.clone(),
- }),
- }
- }
-
- pub fn iter(&self) -> impl Iterator<Item = &PluginConfig> {
- self.0.values()
+impl PluginAliases {
+ pub fn merge(&mut self, other: Self) {
+ self.aliases.extend(other.aliases);
}
-
- /// Merges two PluginConfig structs into one PluginConfig struct
- /// `other` overrides the PluginConfig of `self`.
- pub fn merge(&self, other: Self) -> Self {
- let mut plugin_config = self.0.clone();
- plugin_config.extend(other.0);
- Self(plugin_config)
- }
-}
-
-impl Default for PluginsConfig {
- fn default() -> Self {
- PluginsConfig(HashMap::new())
+ pub fn from_data(aliases: BTreeMap<String, RunPlugin>) -> Self {
+ PluginAliases { aliases }
}
}
@@ -100,6 +43,44 @@ pub struct PluginConfig {
}
impl PluginConfig {
+ pub fn from_run_plugin(run_plugin: &RunPlugin) -> Option<PluginConfig> {
+ match &run_plugin.location {
+ RunPluginLocation::File(path) => Some(PluginConfig {
+ path: path.clone(),
+ run: PluginType::Pane(None),
+ _allow_exec_host_cmd: run_plugin._allow_exec_host_cmd,
+ location: run_plugin.location.clone(),
+ userspace_configuration: run_plugin.configuration.clone(),
+ }),
+ RunPluginLocation::Zellij(tag) => {
+ let tag = tag.to_string();
+ if tag == "status-bar"
+ || tag == "tab-bar"
+ || tag == "compact-bar"
+ || tag == "strider"
+ || tag == "session-manager"
+ {
+ Some(PluginConfig {
+ path: PathBuf::from(&tag),
+ run: PluginType::Pane(None),
+ _allow_exec_host_cmd: run_plugin._allow_exec_host_cmd,
+ location: RunPluginLocation::parse(&format!("zellij:{}", tag), None)
+ .ok()?,
+ userspace_configuration: run_plugin.configuration.clone(),
+ })
+ } else {
+ None
+ }
+ },
+ RunPluginLocation::Remote(_) => Some(PluginConfig {
+ path: PathBuf::new(),
+ run: PluginType::Pane(None),
+ _allow_exec_host_cmd: run_plugin._allow_exec_host_cmd,
+ location: run_plugin.location.clone(),
+ userspace_configuration: run_plugin.configuration.clone(),
+ }),
+ }
+ }
/// Resolve wasm plugin bytes for the plugin path and given plugin directory.
///
/// If zellij was built without the 'disable_automatic_asset_installation' feature, builtin