テーマ

現在のターミナルの実装は機能が豊富で、通常はプレーンテキスト以外の何かを表示できます。たとえば、テキストを太字にしたり、異なる色にしたりすることができます。シェル出力をよりきれいにするために通常使用される絵文字のような、Unicode テーブルからさまざまな文字を表示できるターミナルも一般的です。

Spring Shell は、2 つの部分を含むテーマフレームワークを介してこれらをサポートします。1 つ目は、スタイルを使用してテキスト型を変更し、2 つ目は、一部の文字がどのように表示されるかを示します。これら 2 つはテーマとして結合されます。

内部のテーマの詳細については、テーマを参照してください。

デフォルトのテーマは 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();
	}
}

カスタム ThemeSettings とテーマ名を返すことができる新しい Bean Theme を登録します。

@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 を使用してスタイルを解決し、文字をよりきれいにするためにテーマを設定する場合は Figure を使用できます。

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