主题

当前的终端实现功能丰富,通常不仅能显示纯文本。例如,文本可以被设置为粗体或具有不同的颜色。终端还通常能够显示 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
}
© . This site is unofficial and not affiliated with VMware.