diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index a861022325c42..c349e0235c8de 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -1269,6 +1269,24 @@ mod cmd { quit_all_impl(editor, args, event, true) } + fn theme(editor: &mut Editor, args: &[&str], event: PromptEvent) { + let theme = if let Some(theme) = args.first() { + theme + } else { + editor.set_error("theme name not provided".into()); + return; + }; + + editor.set_theme_from_name(theme); + } + + fn list_themes(editor: &mut Editor, args: &[&str], event: PromptEvent) { + let mut themes = editor.theme_loader.as_ref().names(); + themes.push("default".into()); + let status = format!("Available themes: {}", themes.join(", ")); + editor.set_status(status); + } + pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ TypableCommand { name: "quit", @@ -1382,6 +1400,20 @@ mod cmd { fun: force_quit_all, completer: None, }, + TypableCommand { + name: "theme", + alias: None, + doc: "Change the theme of current view. Requires theme name as argument (:theme )", + fun: theme, + completer: None, + }, + TypableCommand { + name: "list-themes", + alias: None, + doc: "List available themes.", + fun: list_themes, + completer: None, + }, ]; @@ -2804,7 +2836,7 @@ fn hover(cx: &mut Context) { // skip if contents empty - let contents = ui::Markdown::new(contents); + let contents = ui::Markdown::new(contents, editor.syn_loader.clone()); let mut popup = Popup::new(contents); compositor.push(Box::new(popup)); }