主题设置
当前的终端实现功能丰富,通常可以显示除了纯文本以外的内容。例如,文本可以被样式化为 粗体 或具有不同的颜色。终端能够显示来自 unicode 表的各种字符(如 emoji)也是很常见的,这些字符通常用于使 shell 输出更加美观。
Spring Shell 通过其主题框架支持这些功能,该框架包含两个部分,首先 样式 可用于更改文本类型,其次 图形 决定某些字符的显示方式。这两者结合在一起形成一个 主题。
有关 主题 内部的更多信息,请参见 主题。
备注
默认主题名为 default
,但可以通过属性 spring.shell.theme.name
进行更改。另一个内置主题名为 dump
,不使用颜色样式,并尽量不使用任何特殊图形。
通过覆盖设置修改现有样式。
static class MyStyleSettings extends StyleSettings {
@Override
public String highlight() {
return super.highlight();
}
}
通过覆盖设置修改现有图形。
static class MyFigureSettings extends FigureSettings {
@Override
public String error() {
return super.error();
}
}
要创建一个新主题,创建一个 ThemeSettings
并提供您自己的 style 和 figure 实现。
static class MyThemeSettings extends ThemeSettings {
@Override
public StyleSettings styles() {
return new MyStyleSettings();
}
@Override
public FigureSettings figures() {
return new MyFigureSettings();
}
}
注册一个新的 bean Theme
,在其中可以返回自定义的 ThemeSettings
和一个 theme 名称。
@Configuration
static class CustomThemeConfig {
@Bean
Theme myTheme() {
return new Theme() {
@Override
public String getName() {
return "mytheme";
}
@Override
public ThemeSettings getSettings() {
return new MyThemeSettings();
}
};
}
}
您可以使用 ThemeResolver
来解析 样式,如果您想以编程方式创建 JLine 风格的字符串,以及 图形,如果您想为字符设置主题以使其更美观。
@Autowired
private ThemeResolver resolver;
void resolve() {
String resolvedStyle = resolver.resolveStyleTag(StyleSettings.TAG_TITLE);
// bold,fg:bright-white
AttributedStyle style = resolver.resolveStyle(resolvedStyle);
// jline attributed style from expression above
String resolvedFigure = resolver.resolveFigureTag(FigureSettings.TAG_ERROR);
// character i.e. U+2716 Heavy Multiplication X Emoji, cross
}