跳到主要内容

主题设置

ChatGPT-4o-mini 中英对照 Theming

当前的终端实现功能丰富,通常可以显示除了纯文本以外的内容。例如,文本可以被样式化为 粗体 或具有不同的颜色。终端能够显示来自 unicode 表的各种字符(如 emoji)也是很常见的,这些字符通常用于使 shell 输出更加美观。

Spring Shell 通过其主题框架支持这些功能,该框架包含两个部分,首先 样式 可用于更改文本类型,其次 图形 决定某些字符的显示方式。这两者结合在一起形成一个 主题

有关 主题 内部的更多信息,请参见 主题

备注

默认主题名为 default,但可以通过属性 spring.shell.theme.name 进行更改。另一个内置主题名为 dump,不使用颜色样式,并尽量不使用任何特殊图形。

通过覆盖设置修改现有样式。

static class MyStyleSettings extends StyleSettings {

@Override
public String highlight() {
return super.highlight();
}
}
java

通过覆盖设置修改现有图形。

static class MyFigureSettings extends FigureSettings {

@Override
public String error() {
return super.error();
}
}
java

要创建一个新主题,创建一个 ThemeSettings 并提供您自己的 stylefigure 实现。

static class MyThemeSettings extends ThemeSettings {

@Override
public StyleSettings styles() {
return new MyStyleSettings();
}

@Override
public FigureSettings figures() {
return new MyFigureSettings();
}
}
java

注册一个新的 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();
}
};
}
}
java

您可以使用 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
}
java