最新の安定バージョンについては、Spring Shell 4.0.0 を使用してください!

テーマ

現在のターミナル実装は豊富な機能を備えており、プレーンテキスト以外のものも表示できます。たとえば、テキストを太字にしたり、色を変えたりといったスタイル設定が可能です。また、シェルの出力をより美しくするために使われる絵文字など、Unicode テーブルに登録された様々な文字を表示できるターミナルも一般的です。

Spring Shell は、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
}