[[theming]] = Theming ifndef::snippets[:snippets: ../../test/java/org/springframework/shell/docs] Current terminal implementations are rich in features and can usually show something else that just plain text. For example a text can be styled to be _bold_ or have different colors. It's also common for terminals to be able to show various characters from an unicode table like emoji's which are usually used to make shell output more pretty. Spring Shell supports these via it's theming framework which contains two parts, firstly _styling_ can be used to change text type and secondly _figures_ how some characters are shown. These two are then combined together as a _theme_. More about _theming_ internals, see xref:appendices-techical-intro-theming.adoc[Theming]. NOTE: Default theme is named `default` but can be change using property `spring.shell.theme.name`. Other built-in theme named `dump` uses no styling for colors and tries to not use any special figures. Modify existing style by overriding settings. [source, java, indent=0] ---- include::{snippets}/ThemingSnippets.java[tag=custom-style-class] ---- Modify existing figures by overriding settings. [source, java, indent=0] ---- include::{snippets}/ThemingSnippets.java[tag=custom-figure-class] ---- To create a new theme, create a `ThemeSettings` and provide your own _style_ and _figure_ implementations. [source, java, indent=0] ---- include::{snippets}/ThemingSnippets.java[tag=custom-theme-class] ---- Register a new bean `Theme` where you can return your custom `ThemeSettings` and a _theme_ name. [source, java, indent=0] ---- include::{snippets}/ThemingSnippets.java[tag=custom-theme-config] ---- You can use `ThemeResolver` to resolve _styles_ if you want to create JLine-styled strings programmatically and _figures_ if you want to theme characters for being more pretty. [source, java, indent=0] ---- include::{snippets}/ThemingSnippets.java[tag=using-theme-resolver] ----