summaryrefslogtreecommitdiffstats
path: root/src/config/option/tab_option.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/option/tab_option.rs')
-rw-r--r--src/config/option/tab_option.rs63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/config/option/tab_option.rs b/src/config/option/tab_option.rs
index b729254..efeca59 100644
--- a/src/config/option/tab_option.rs
+++ b/src/config/option/tab_option.rs
@@ -1,13 +1,27 @@
-use crate::tab::TabHomePage;
+use std::str::FromStr;
+
+use serde_derive::Deserialize;
+
+use crate::{
+ error::{JoshutoError, JoshutoErrorKind},
+ tab::TabHomePage,
+};
#[derive(Clone, Debug)]
pub struct TabOption {
pub _home_page: TabHomePage,
+ pub display: TabBarDisplayOption,
}
impl TabOption {
- pub fn new(_home_page: TabHomePage) -> Self {
- Self { _home_page }
+ pub fn new(_home_page: TabHomePage, display_mode: TabBarDisplayMode, max_len: usize) -> Self {
+ Self {
+ _home_page,
+ display: TabBarDisplayOption {
+ mode: display_mode,
+ max_len,
+ },
+ }
}
pub fn home_page(&self) -> TabHomePage {
self._home_page
@@ -18,6 +32,49 @@ impl std::default::Default for TabOption {
fn default() -> Self {
Self {
_home_page: TabHomePage::Home,
+ display: TabBarDisplayOption::default(),
+ }
+ }
+}
+
+#[derive(Clone, Copy, Debug)]
+pub struct TabBarDisplayOption {
+ pub mode: TabBarDisplayMode,
+ pub max_len: usize,
+}
+
+impl Default for TabBarDisplayOption {
+ fn default() -> Self {
+ Self {
+ mode: Default::default(),
+ max_len: 16,
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, Deserialize, Default)]
+pub enum TabBarDisplayMode {
+ #[serde(rename = "num")]
+ Number,
+ #[default]
+ #[serde(rename = "dir")]
+ Directory,
+ #[serde(rename = "all")]
+ All,
+}
+
+impl FromStr for TabBarDisplayMode {
+ type Err = JoshutoError;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ match s {
+ "num" => Ok(Self::Number),
+ "dir" => Ok(Self::Directory),
+ "all" => Ok(Self::All),
+ s => Err(JoshutoError::new(
+ JoshutoErrorKind::UnrecognizedArgument,
+ format!("tab_bar_mode: `{}` unknown argument.", s),
+ )),
}
}
}