mirror of
https://github.com/ilyakooo0/helix.git
synced 2024-11-29 13:32:09 +03:00
commands: Make no arg ':theme' show name (#3740)
Most commands that accept an argument show their current value if no argument is specified. The `:theme` command previously displayed an error message in the status bar if not provided with an argument: ``` Theme name not provided ``` It now shows the current theme name in the status bar if no argument is specified. Signed-off-by: James O. D. Hunt <jamesodhunt@gmail.com> Signed-off-by: James O. D. Hunt <jamesodhunt@gmail.com>
This commit is contained in:
parent
ba9e50e93b
commit
ac0fe29867
@ -28,7 +28,7 @@
|
|||||||
| `:quit-all!`, `:qa!` | Force close all views ignoring unsaved changes. |
|
| `:quit-all!`, `:qa!` | Force close all views ignoring unsaved changes. |
|
||||||
| `:cquit`, `:cq` | Quit with exit code (default 1). Accepts an optional integer exit code (:cq 2). |
|
| `:cquit`, `:cq` | Quit with exit code (default 1). Accepts an optional integer exit code (:cq 2). |
|
||||||
| `:cquit!`, `:cq!` | Force quit with exit code (default 1) ignoring unsaved changes. Accepts an optional integer exit code (:cq! 2). |
|
| `:cquit!`, `:cq!` | Force quit with exit code (default 1) ignoring unsaved changes. Accepts an optional integer exit code (:cq! 2). |
|
||||||
| `:theme` | Change the editor theme. |
|
| `:theme` | Change the editor theme (show current theme if no name specified). |
|
||||||
| `:clipboard-yank` | Yank main selection into system clipboard. |
|
| `:clipboard-yank` | Yank main selection into system clipboard. |
|
||||||
| `:clipboard-yank-join` | Yank joined selections into system clipboard. A separator can be provided as first argument. Default value is newline. |
|
| `:clipboard-yank-join` | Yank joined selections into system clipboard. A separator can be provided as first argument. Default value is newline. |
|
||||||
| `:primary-clipboard-yank` | Yank main selection into system primary clipboard. |
|
| `:primary-clipboard-yank` | Yank main selection into system primary clipboard. |
|
||||||
|
@ -772,16 +772,21 @@ fn theme(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
PromptEvent::Validate => {
|
PromptEvent::Validate => {
|
||||||
let theme_name = args.first().with_context(|| "Theme name not provided")?;
|
if let Some(theme_name) = args.first() {
|
||||||
let theme = cx
|
let theme = cx
|
||||||
.editor
|
.editor
|
||||||
.theme_loader
|
.theme_loader
|
||||||
.load(theme_name)
|
.load(theme_name)
|
||||||
.with_context(|| "Theme does not exist")?;
|
.with_context(|| "Theme does not exist")?;
|
||||||
if !(true_color || theme.is_16_color()) {
|
if !(true_color || theme.is_16_color()) {
|
||||||
bail!("Unsupported theme: theme requires true color support");
|
bail!("Unsupported theme: theme requires true color support");
|
||||||
|
}
|
||||||
|
cx.editor.set_theme(theme);
|
||||||
|
} else {
|
||||||
|
let name = cx.editor.theme.name().to_string();
|
||||||
|
|
||||||
|
cx.editor.set_status(name);
|
||||||
}
|
}
|
||||||
cx.editor.set_theme(theme);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1866,7 +1871,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
|||||||
TypableCommand {
|
TypableCommand {
|
||||||
name: "theme",
|
name: "theme",
|
||||||
aliases: &[],
|
aliases: &[],
|
||||||
doc: "Change the editor theme.",
|
doc: "Change the editor theme (show current theme if no name specified).",
|
||||||
fun: theme,
|
fun: theme,
|
||||||
completer: Some(completers::theme),
|
completer: Some(completers::theme),
|
||||||
},
|
},
|
||||||
|
@ -14,19 +14,14 @@ use toml::{map::Map, Value};
|
|||||||
use crate::graphics::UnderlineStyle;
|
use crate::graphics::UnderlineStyle;
|
||||||
pub use crate::graphics::{Color, Modifier, Style};
|
pub use crate::graphics::{Color, Modifier, Style};
|
||||||
|
|
||||||
pub static DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| {
|
pub static DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| Theme {
|
||||||
// let raw_theme: Value = toml::from_slice(include_bytes!("../../theme.toml"))
|
name: "default".into(),
|
||||||
// .expect("Failed to parse default theme");
|
..toml::from_slice(include_bytes!("../../theme.toml")).expect("Failed to parse default theme")
|
||||||
// Theme::from(raw_theme)
|
|
||||||
|
|
||||||
toml::from_slice(include_bytes!("../../theme.toml")).expect("Failed to parse default theme")
|
|
||||||
});
|
});
|
||||||
pub static BASE16_DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| {
|
|
||||||
// let raw_theme: Value = toml::from_slice(include_bytes!("../../base16_theme.toml"))
|
|
||||||
// .expect("Failed to parse base 16 default theme");
|
|
||||||
// Theme::from(raw_theme)
|
|
||||||
|
|
||||||
toml::from_slice(include_bytes!("../../base16_theme.toml"))
|
pub static BASE16_DEFAULT_THEME: Lazy<Theme> = Lazy::new(|| Theme {
|
||||||
|
name: "base16_theme".into(),
|
||||||
|
..toml::from_slice(include_bytes!("../../base16_theme.toml"))
|
||||||
.expect("Failed to parse base 16 default theme")
|
.expect("Failed to parse base 16 default theme")
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -53,7 +48,12 @@ impl Loader {
|
|||||||
return Ok(self.base16_default());
|
return Ok(self.base16_default());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.load_theme(name, name, false).map(Theme::from)
|
let theme = self.load_theme(name, name, false).map(Theme::from)?;
|
||||||
|
|
||||||
|
Ok(Theme {
|
||||||
|
name: name.into(),
|
||||||
|
..theme
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// load the theme and its parent recursively and merge them
|
// load the theme and its parent recursively and merge them
|
||||||
@ -180,8 +180,10 @@ impl Loader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug, Default)]
|
||||||
pub struct Theme {
|
pub struct Theme {
|
||||||
|
name: String,
|
||||||
|
|
||||||
// UI styles are stored in a HashMap
|
// UI styles are stored in a HashMap
|
||||||
styles: HashMap<String, Style>,
|
styles: HashMap<String, Style>,
|
||||||
// tree-sitter highlight styles are stored in a Vec to optimize lookups
|
// tree-sitter highlight styles are stored in a Vec to optimize lookups
|
||||||
@ -200,6 +202,7 @@ impl From<Value> for Theme {
|
|||||||
styles,
|
styles,
|
||||||
scopes,
|
scopes,
|
||||||
highlights,
|
highlights,
|
||||||
|
..Default::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -217,6 +220,7 @@ impl<'de> Deserialize<'de> for Theme {
|
|||||||
styles,
|
styles,
|
||||||
scopes,
|
scopes,
|
||||||
highlights,
|
highlights,
|
||||||
|
..Default::default()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -266,6 +270,10 @@ impl Theme {
|
|||||||
self.highlights[index]
|
self.highlights[index]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn name(&self) -> &str {
|
||||||
|
&self.name
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get(&self, scope: &str) -> Style {
|
pub fn get(&self, scope: &str) -> Style {
|
||||||
self.try_get(scope).unwrap_or_default()
|
self.try_get(scope).unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user