Rework themes support
- Add theme settings for figures. - Settings for styles are now in it own class and ThemeSettings are wrapping those. - Prefixed formatting string to have `style-` prefix. - Templates can now use added `figures` dictionary which is resolved per activated theme. - Create `dump` theme. - New `ThemeActive` interface where default impl uses dump theme if `CI` or `NO_COLOR` env is set. - Rework existing templates. - Fixes #442
This commit is contained in:
@@ -18,6 +18,7 @@ package org.springframework.shell.samples.standard;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.jline.utils.AttributedString;
|
||||
import org.jline.utils.AttributedStringBuilder;
|
||||
@@ -26,8 +27,9 @@ import org.jline.utils.AttributedStyle;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.shell.standard.ShellComponent;
|
||||
import org.springframework.shell.standard.ShellMethod;
|
||||
import org.springframework.shell.style.FigureSettings;
|
||||
import org.springframework.shell.style.StyleSettings;
|
||||
import org.springframework.shell.style.ThemeResolver;
|
||||
import org.springframework.shell.style.ThemeSettings;
|
||||
|
||||
@ShellComponent
|
||||
public class StyleCommands {
|
||||
@@ -39,10 +41,10 @@ public class StyleCommands {
|
||||
List<String> rgbRedHue = Arrays.asList("#ff0000", "#ff4000", "#ff8000", "#ffbf00", "#ffff00", "#bfff00", "#80ff00",
|
||||
"#40ff00", "#00ff00", "#00ff40", "#00ff80", "#00ffbf", "#00ffff", "#00bfff", "#0080ff", "#0040ff",
|
||||
"#0000ff", "#4000ff", "#8000ff", "#bf00ff", "#ff00ff", "#ff00bf", "#ff0080", "#ff0040", "#ff0000");
|
||||
List<String> themeTags = Arrays.asList(ThemeSettings.TAG_TITLE, ThemeSettings.TAG_VALUE, ThemeSettings.TAG_LIST_KEY,
|
||||
ThemeSettings.TAG_LIST_VALUE, ThemeSettings.TAG_LEVEL_INFO, ThemeSettings.TAG_LEVEL_WARN,
|
||||
ThemeSettings.TAG_LEVEL_ERROR, ThemeSettings.TAG_ITEM_ENABLED, ThemeSettings.TAG_ITEM_DISABLED,
|
||||
ThemeSettings.TAG_ITEM_SELECTED, ThemeSettings.TAG_ITEM_UNSELECTED, ThemeSettings.TAG_ITEM_SELECTOR);
|
||||
List<String> themeTags = Arrays.asList(StyleSettings.TAG_TITLE, StyleSettings.TAG_VALUE, StyleSettings.TAG_LIST_KEY,
|
||||
StyleSettings.TAG_LIST_VALUE, StyleSettings.TAG_LEVEL_INFO, StyleSettings.TAG_LEVEL_WARN,
|
||||
StyleSettings.TAG_LEVEL_ERROR, StyleSettings.TAG_ITEM_ENABLED, StyleSettings.TAG_ITEM_DISABLED,
|
||||
StyleSettings.TAG_ITEM_SELECTED, StyleSettings.TAG_ITEM_UNSELECTED, StyleSettings.TAG_ITEM_SELECTOR);
|
||||
|
||||
@Autowired
|
||||
private ThemeResolver themeResolver;
|
||||
@@ -82,14 +84,32 @@ public class StyleCommands {
|
||||
AttributedStringBuilder builder = new AttributedStringBuilder();
|
||||
themeTags.stream()
|
||||
.forEach(tag -> {
|
||||
String resolvedStyle = themeResolver.resolveTag(tag);
|
||||
String resolvedStyle = themeResolver.resolveStyleTag(tag);
|
||||
AttributedStyle style = themeResolver.resolveStyle(resolvedStyle);
|
||||
AttributedString styledStr = new AttributedString(tag, style);
|
||||
builder.append(String.format("%-25s", tag));
|
||||
builder.append(" ");
|
||||
builder.append(styledStr);
|
||||
builder.append("\n");
|
||||
});;
|
||||
});
|
||||
return builder.toAttributedString();
|
||||
}
|
||||
|
||||
@ShellMethod(key = "style figure", value = "Showcase figures", group = "Styles")
|
||||
public AttributedString stylesFigures() {
|
||||
AttributedStringBuilder builder = new AttributedStringBuilder();
|
||||
Stream.of(FigureSettings.tags())
|
||||
.forEach(tag -> {
|
||||
builder.append(String.format("%-25s", tag));
|
||||
builder.append(" ");
|
||||
String resolveFigureTag = themeResolver.resolveFigureTag(tag);
|
||||
combinations3().stream().forEach(spec -> {
|
||||
AttributedStyle style = themeResolver.resolveStyle(spec);
|
||||
builder.append(" ");
|
||||
builder.append(new AttributedString(resolveFigureTag, style));
|
||||
});
|
||||
builder.append("\n");
|
||||
});
|
||||
return builder.toAttributedString();
|
||||
}
|
||||
|
||||
@@ -112,4 +132,16 @@ public class StyleCommands {
|
||||
});
|
||||
return styles;
|
||||
}
|
||||
|
||||
private List<String> combinations3() {
|
||||
List<String> styles = new ArrayList<>();
|
||||
Arrays.asList("fg").stream().forEach(ground -> {
|
||||
colors.stream().forEach(color -> {
|
||||
named.stream().forEach(named -> {
|
||||
styles.add(String.format("%s,%s:%s", named, ground, color));
|
||||
});
|
||||
});
|
||||
});
|
||||
return styles;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user