主题
当前的终端实现功能丰富,通常可以显示除了纯文本之外的内容。例如,文本可以设置为粗体或具有不同的颜色。终端也常见能够显示 Unicode 表中的各种字符,例如表情符号,这些通常用于美化 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
并提供您自己的样式和图形实现。
static class MyThemeSettings extends ThemeSettings {
@Override
public StyleSettings styles() {
return new MyStyleSettings();
}
@Override
public FigureSettings figures() {
return new MyFigureSettings();
}
}
注册一个新的 Bean Theme
,您可以在其中返回自定义的 ThemeSettings
和主题名称。
@Configuration
static class CustomThemeConfig {
@Bean
Theme myTheme() {
return new Theme() {
@Override
public String getName() {
return "mytheme";
}
@Override
public ThemeSettings getSettings() {
return new MyThemeSettings();
}
};
}
}
如果您想以编程方式创建 JLine 样式的字符串,可以使用 ThemeResolver
来解析样式;如果您想为字符设置主题以使其更美观,可以使用 ThemeResolver
来解析图形。
@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
}