主题

当前终端实现功能丰富,通常不仅可以显示纯文本,还能展示更多内容。例如,文本可以被设置为加粗或拥有不同的颜色。终端还常常用来自Unicode表中的各种字符(如表情符号)来使命令行输出更加美观。spring-doc.cadn.net.cn

Spring Shell 通过其主题框架支持这些功能,该框架包含两部分。 首先,样式可以用于更改文本格式;其次,图像用于自定义字符的显示方式。这两部分然后组合成一个 主题spring-doc.cadn.net.cn

关于主题内部详情,请参阅主题spring-doc.cadn.net.cn

默认主题名为default,但可以通过设置属性spring.shell.theme.name来更改。另外还有一个内置的主题名为dump,不使用任何颜色样式,并尽量避免使用特殊符号。

您可以覆盖默认设置以修改现有样式和图形:spring-doc.cadn.net.cn

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并提供您自己的样式图形实现:spring-doc.cadn.net.cn

static class MyThemeSettings extends ThemeSettings {

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

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

}

注册一个新的bean Theme,其中你可以返回你自定义的ThemeSettings 和一个主题名称。spring-doc.cadn.net.cn

@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样式的字符串,或者如果您想使字符更具美观性,则可以使用图示进行主题设置。spring-doc.cadn.net.cn

@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
}