主題設定

目前的終端機實作功能豐富,通常可以顯示除了純文字以外的其他內容。例如,文字可以設定樣式為粗體或具有不同的顏色。終端機也常見能夠顯示來自 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
}