diff options
| -rw-r--r-- | docs/themes.md | 5 | ||||
| -rw-r--r-- | src/colors.zig | 19 | ||||
| -rw-r--r-- | src/themes/lapis_plain.zig | 81 | ||||
| -rw-r--r-- | test/gui_monkey.py | 2 | ||||
| -rw-r--r-- | test/snapshots/theme.golden | 2 | ||||
| -rw-r--r-- | test/snapshots/theme.snap | 7 | ||||
| -rw-r--r-- | test/snapshots/themesel.golden | 123 | ||||
| -rw-r--r-- | test/snapshots/themesel.snap | 9 |
8 files changed, 190 insertions, 58 deletions
diff --git a/docs/themes.md b/docs/themes.md index c7204173..db6349c4 100644 --- a/docs/themes.md +++ b/docs/themes.md @@ -6,10 +6,13 @@ terminals together. `orchard` is the initial theme. Execute `Theme <name>` anywhere, or open `Themes` with `SPC t t` and select a theme's command. Put the same command in your [startup configuration](config.md) to keep a preference. `NextColor` cycles through the native themes first, -then `acme` and `lapis`, the [faithful ports](#faithful-ports), the legacy +then `acme`, `lapis` and `lapis_plain`, the [faithful ports](#faithful-ports), the legacy `helix` and `dark`, and the imported palettes. `Themes` shows the same order in sections: `Pardes themes`, one per ported family, `Legacy themes` and `Imported themes (helix, zed)`; its navigation skips the section headings. +`lapis` draws its ornament in the GUI; `lapis_plain` is the same theme on +flat grounds (no dot grid under the text, no stripes behind the focused +tag), with lapis's framed and shadowed tags and its file-name shadow. See the [Agave visual review](ui-review.md) for the original six-palette gallery. | Theme | Character | Page | Accent | diff --git a/src/colors.zig b/src/colors.zig index b6da0d2c..c78043cc 100644 --- a/src/colors.zig +++ b/src/colors.zig @@ -106,7 +106,7 @@ test "every native theme's separators stand off its page, and its focus tint off } test "every faithful port meets pardes's chrome floors in its own colours, with nothing left to derive" { - const first = comptime indexOfTheme("lapis") + 1; + const first = comptime indexOfTheme("lapis_plain") + 1; const last = comptime indexOfTheme("helix"); for (themes[first..last]) |*th| { const chrome = ChromeTheme.fromTheme(th); @@ -394,6 +394,7 @@ const curated = struct { pub const orchard_black = @import("themes/orchard_black.zig"); pub const acme = @import("themes/acme.zig"); pub const lapis = @import("themes/lapis.zig"); + pub const lapis_plain = @import("themes/lapis_plain.zig"); // Faithful ports of well-known themes, a family at a time (src/themes/ // <name>.zig says where each value came from): `theme_groups`. pub const dark_plus = @import("themes/dark_plus.zig"); @@ -565,6 +566,22 @@ test "the picker's sections run in ring order and cover it" { try std.testing.expect(groupAt(native_count) != null); } +test "lapis_plain is lapis on flat grounds, framed and shadowed as lapis" { + const lapis = themes[indexOfTheme("lapis")]; + const plain = themes[indexOfTheme("lapis_plain")]; + try std.testing.expectEqual(indexOfTheme("lapis") + 1, indexOfTheme("lapis_plain")); + var same = plain; + same.name = lapis.name; + same.decor = lapis.decor; + try std.testing.expectEqualDeep(lapis, same); + const decor = plain.decor.?; + try std.testing.expect(decor.page_dots == null and decor.tag_stripe == null); + try std.testing.expectEqualDeep(lapis.decor.?.tag_border, decor.tag_border); + try std.testing.expectEqualDeep(lapis.decor.?.tag_shadow, decor.tag_shadow); + try std.testing.expectEqualDeep(lapis.decor.?.title_shadow, decor.title_shadow); + try std.testing.expectEqualDeep(lapis.decor.?.rail_checker, decor.rail_checker); +} + /// Original and classic-inspired Pardes palettes precede retained imports. pub const native_theme_count = 15; diff --git a/src/themes/lapis_plain.zig b/src/themes/lapis_plain.zig new file mode 100644 index 00000000..5b4c48dd --- /dev/null +++ b/src/themes/lapis_plain.zig @@ -0,0 +1,81 @@ +//! Lapis plain: lapis (src/themes/lapis.zig) with flat grounds. The page +//! under the text is lapis-deep with no dot grid, and the focused tag's +//! plaque is its tint with no gold stripes behind its words; the rest is +//! lapis's own: every colour, the gold frames and vermilion shadows of the +//! tag plaques, the gold rules, the checker in the scroll column and the +//! file name's vermilion offset shadow. +pub const theme = .{ + .name = "lapis_plain", + // --lapis-deep, --vellum + .bg = .{ 0x0a, 0x10, 0x30 }, + .fg = .{ 0xee, 0xe6, 0xd2 }, + // A gold highlight in lapis ink, as the directory's current entry. + .sel_bg = .{ 0xe8, 0xc4, 0x6a }, + .sel_fg = .{ 0x0f, 0x1a, 0x4a }, + // --lapis, --vellum-dim + .tag_bg = .{ 0x0f, 0x1a, 0x4a }, + .tag_fg = .{ 0x9a, 0xa6, 0xd9 }, + .tag_name_fg = .{ 0xe8, 0xc4, 0x6a }, + .tag_active_name_fg = .{ 0xf2, 0xd2, 0x80 }, + // The plaques' hover lapis, taken a step further: 1.5:1 off the tag. + .tag_active_bg = .{ 0x25, 0x39, 0x7d }, + .tag_active_fg = .{ 0xee, 0xe6, 0xd2 }, + .box = .{ 0xe8, 0xc4, 0x6a }, + .box_dim = .{ 0x3a, 0x4a, 0x8a }, + .box_border = .{ 0x9a, 0xa6, 0xd9 }, + .box_dirty = .{ 0xff, 0x6a, 0x4a }, + .column_box = .{ 0xff, 0x6a, 0x4a }, + .column_box_dim = .{ 0x8a, 0x3a, 0x3a }, + // Rubrics: vermilion keywords, gilded strings, the code window's green + // for numbers, vellum-dim comments. + .kw = .{ 0xff, 0x6a, 0x4a }, + .str = .{ 0xe8, 0xc4, 0x6a }, + .num = .{ 0xe7, 0xff, 0xe0 }, + .comment = .{ 0x9a, 0xa6, 0xd9 }, + .lineno = .{ 0x5a, 0x6a, 0xa8 }, + .lineno_active = .{ 0x6a, 0x7a, 0xb8 }, + // --lapis-ink under a gold thumb (the page's scrollbar-color). + .scroll_track = .{ 0x05, 0x0a, 0x24 }, + .scroll_thumb = .{ 0xe8, 0xc4, 0x6a }, + // Gold rules, a vermilion hairline between a tag and its text. + .border = .{ 0xe8, 0xc4, 0x6a }, + // An empty column is the page, not a slab of gold leaf. + .empty_col = .{ 0x0a, 0x10, 0x30 }, + .tag_rule = .{ 0xd4, 0x41, 0x2f }, + .search_bg = .{ 0x6a, 0x2a, 0x1c }, + .search_fg = .{ 0xff, 0xd0, 0xb0 }, + .diagnostic_error = .{ 0xff, 0x6a, 0x4a }, + .diagnostic_warning = .{ 0xe8, 0xc4, 0x6a }, + .diagnostic_info = .{ 0x9a, 0xc6, 0xff }, + .diagnostic_hint = .{ 0xa8, 0xe0, 0xc0 }, + .decor = .{ + .rail_checker = .{ 0xe8, 0xc4, 0x6a }, + .rail_checker_px = 3, + // The trail: a 2px gold frame and a 5px vermilion shadow; the + // focused plaque filled flat. + .tag_border = .{ 0xe8, 0xc4, 0x6a }, + .tag_border_px = 2, + .tag_shadow = .{ 0xd4, 0x41, 0x2f }, + .tag_shadow_px = 5, + .title_shadow = .{ 0xd4, 0x41, 0x2f }, + .title_shadow_px = 2, + }, + .palette = .{ + .{ 0x0a, 0x10, 0x30 }, + .{ 0xff, 0x6a, 0x4a }, + .{ 0xa8, 0xe0, 0xc0 }, + .{ 0xe8, 0xc4, 0x6a }, + .{ 0x9a, 0xc6, 0xff }, + .{ 0xd8, 0xa0, 0xe8 }, + .{ 0x8a, 0xd8, 0xd8 }, + .{ 0xee, 0xe6, 0xd2 }, + .{ 0x9a, 0xa6, 0xd9 }, + .{ 0xff, 0x9a, 0x6a }, + .{ 0xc8, 0xf0, 0xd8 }, + .{ 0xff, 0xde, 0x90 }, + .{ 0xc0, 0xdc, 0xff }, + .{ 0xe8, 0xc0, 0xf4 }, + .{ 0xb0, 0xec, 0xec }, + .{ 0xff, 0xf8, 0xe8 }, + }, +}; diff --git a/test/gui_monkey.py b/test/gui_monkey.py index 2b32f050..540c377a 100644 --- a/test/gui_monkey.py +++ b/test/gui_monkey.py @@ -25,7 +25,7 @@ from fs import session # noqa: E402 MOTIONS = ['off', 'crisp', 'smooth', 'bouncy', 'playful'] LIFTS = ['off', 'shadow', 'rim', 'auto'] BLOOMS = ['0', '2'] -THEMES = ['lapis', 'forge', 'acme', 'dusk', 'daybreak'] +THEMES = ['lapis', 'lapis_plain', 'forge', 'acme', 'dusk', 'daybreak'] W, H = 1280, 840 diff --git a/test/snapshots/theme.golden b/test/snapshots/theme.golden index 351f8905..cbd5ee61 100644 --- a/test/snapshots/theme.golden +++ b/test/snapshots/theme.golden @@ -586,6 +586,8 @@ |28: 0-0 d,#e8c46a, 1-49 d,#0a1030, 50-50 d,#e8c46a, 51-99 d,#0a1030, |29: 0-0 d,#e8c46a, 1-49 d,#0a1030, 50-50 d,#e8c46a, 51-99 d,#0a1030, |30: 0-0 d,#e8c46a, 1-49 d,#0a1030, 50-50 d,#e8c46a, 51-99 d,#0a1030, +== snap lapis-plain grid=100x31 cursor=4,6 +== style lapis-plain grid=100x31 == snap dark-plus grid=100x31 cursor=4,6 == style dark-plus grid=100x31 |0: 0-75 #a7a7a7,#3c3c3c, 76-84 #d4d4d4,#264f78, 85-99 #d4d4d4,#3c3c3c, diff --git a/test/snapshots/theme.snap b/test/snapshots/theme.snap index 4cb360d3..2a046ef3 100644 --- a/test/snapshots/theme.snap +++ b/test/snapshots/theme.snap @@ -109,11 +109,16 @@ snapstyle lapis press middle @NextColor 1 release middle @NextColor 1 stable 700 10000 +snap lapis-plain +snapstyle lapis-plain +press middle @NextColor 1 +release middle @NextColor 1 +stable 700 10000 snap dark-plus snapstyle dark-plus press middle @NextColor 1 release middle @NextColor 1 stable 700 10000 -# After orchard_black: acme and lapis, then the first faithful ports. +# After orchard_black: acme, lapis and lapis_plain, then the first faithful ports. snap solarized-dark snapstyle solarized-dark diff --git a/test/snapshots/themesel.golden b/test/snapshots/themesel.golden index a82d88f5..253fc73a 100644 --- a/test/snapshots/themesel.golden +++ b/test/snapshots/themesel.golden @@ -482,7 +482,7 @@ |27: 16 Theme orchard_black |28: 17 Theme acme |29: 18 Theme lapis -|30: 19 +|30: 19 Theme lapis_plain == style step-orchard-black grid=100x31 |0: 0-99 #b2c3b8,#1d2824, |1: 0-1 d,#887455, 2-2 d,#314738, 3-99 #becfc4,#314738, @@ -514,7 +514,7 @@ |27: 0-0 d,#111813, 1-1 d,#000000, 2-3 d,#000000,b 4-6 #616f64,#000000,b 7-99 #f2f8ef,#000000, |28: 0-0 d,#111813, 1-3 d,#000000, 4-6 #59675c,#000000, 7-99 #f2f8ef,#000000, |29: 0-0 d,#111813, 1-3 d,#000000, 4-6 #59675c,#000000, 7-99 #f2f8ef,#000000, -|30: 0-0 d,#111813, 1-3 d,#000000, 4-99 #59675c,#000000, +|30: 0-0 d,#111813, 1-3 d,#000000, 4-6 #59675c,#000000, 7-99 #f2f8ef,#000000, == snap step-acme grid=100x31 cursor=7,27 |17: 7 Theme atelier Theme |18: 8 Theme forge @@ -528,8 +528,8 @@ |26: 16 Theme orchard_black |27: 17 Theme acme |28: 18 Theme lapis -|29: 19 -|30: 20 # Visual Studio Code +|29: 19 Theme lapis_plain +|30: 20 == style step-acme grid=100x31 |0: 0-99 #000000,#eaffff, |1: 0-1 d,#8888cc, 2-2 d,#eaffff, 3-99 #000000,#eaffff, @@ -560,8 +560,8 @@ |26: 0-0 d,#99994c, 1-3 d,#ffffea, 4-6 #999980,#ffffea, 7-99 #000000,#ffffea, |27: 0-0 d,#99994c, 1-1 d,#ffffea, 2-3 d,#ffffea,b 4-6 #999980,#ffffea,b 7-99 #000000,#ffffea, |28: 0-0 d,#99994c, 1-3 d,#ffffea, 4-6 #999980,#ffffea, 7-99 #000000,#ffffea, -|29: 0-0 d,#99994c, 1-3 d,#ffffea, 4-99 #999980,#ffffea, -|30: 0-0 d,#99994c, 1-3 d,#ffffea, 4-6 #999980,#ffffea, 7-99 #000000,#ffffea, +|29: 0-0 d,#99994c, 1-3 d,#ffffea, 4-6 #999980,#ffffea, 7-99 #000000,#ffffea, +|30: 0-0 d,#99994c, 1-3 d,#ffffea, 4-99 #999980,#ffffea, == snap step-lapis grid=100x31 cursor=7,27 |17: 8 Theme forge Theme |18: 9 Theme lagoon @@ -574,9 +574,9 @@ |25: 16 Theme orchard_black |26: 17 Theme acme |27: 18 Theme lapis -|28: 19 -|29: 20 # Visual Studio Code -|30: 21 Theme dark_plus +|28: 19 Theme lapis_plain +|29: 20 +|30: 21 # Visual Studio Code == style step-lapis grid=100x31 |0: 0-99 #9aa6d9,#0f1a4a, |1: 0-1 d,#8a3a3a, 2-2 d,#25397d, 3-99 #eee6d2,#25397d, @@ -606,24 +606,43 @@ |25: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, |26: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, |27: 0-0 d,#050a24, 1-1 d,#0a1030, 2-3 d,#0a1030,b 4-6 #6a7ab8,#0a1030,b 7-99 #eee6d2,#0a1030, +|28: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, +|29: 0-0 d,#050a24, 1-3 d,#0a1030, 4-99 #5a6aa8,#0a1030, +|30: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, +== snap step-lapis-plain grid=100x31 cursor=7,27 +|17: 9 Theme lagoon Theme +|18: 10 Theme solarium +|19: 11 Theme spectrum +|20: 12 Theme harvest +|21: 13 Theme clay +|22: 14 Theme forge_black +|23: 15 Theme forge_soft +|24: 16 Theme orchard_black +|25: 17 Theme acme +|26: 18 Theme lapis +|27: 19 Theme lapis_plain +|28: 20 +|29: 21 # Visual Studio Code +|30: 22 Theme dark_plus +== style step-lapis-plain grid=100x31 +|18: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, |28: 0-0 d,#050a24, 1-3 d,#0a1030, 4-99 #5a6aa8,#0a1030, |29: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, -|30: 0-0 d,#050a24, 1-3 d,#0a1030, 4-6 #5a6aa8,#0a1030, 7-99 #eee6d2,#0a1030, == snap step-dark-plus grid=100x31 cursor=7,27 -|17: 11 Theme spectrum Theme -|18: 12 Theme harvest -|19: 13 Theme clay -|20: 14 Theme forge_black -|21: 15 Theme forge_soft -|22: 16 Theme orchard_black -|23: 17 Theme acme -|24: 18 Theme lapis -|25: 19 -|26: 20 # Visual Studio Code -|27: 21 Theme dark_plus -|28: 22 -|29: 23 # Solarized -|30: 24 Theme solarized_dark +|17: 12 Theme harvest Theme +|18: 13 Theme clay +|19: 14 Theme forge_black +|20: 15 Theme forge_soft +|21: 16 Theme orchard_black +|22: 17 Theme acme +|23: 18 Theme lapis +|24: 19 Theme lapis_plain +|25: 20 +|26: 21 # Visual Studio Code +|27: 22 Theme dark_plus +|28: 23 +|29: 24 # Solarized +|30: 25 Theme solarized_dark == style step-dark-plus grid=100x31 |0: 0-99 #a7a7a7,#3c3c3c, |1: 0-1 d,#458276, 2-2 d,#1e1e1e, 3-99 #ffffff,#1e1e1e, @@ -657,20 +676,20 @@ |29: 0-3 d,#1e1e1e, 4-6 #858585,#1e1e1e, 7-99 #d4d4d4,#1e1e1e, |30: 0-3 d,#1e1e1e, 4-6 #858585,#1e1e1e, 7-99 #d4d4d4,#1e1e1e, == snap step-solarized-dark grid=100x31 cursor=7,27 -|17: 14 Theme forge_black Theme -|18: 15 Theme forge_soft -|19: 16 Theme orchard_black -|20: 17 Theme acme -|21: 18 Theme lapis -|22: 19 -|23: 20 # Visual Studio Code -|24: 21 Theme dark_plus -|25: 22 -|26: 23 # Solarized -|27: 24 Theme solarized_dark -|28: 25 Theme solarized_light -|29: 26 -|30: 27 # Dracula +|17: 15 Theme forge_soft Theme +|18: 16 Theme orchard_black +|19: 17 Theme acme +|20: 18 Theme lapis +|21: 19 Theme lapis_plain +|22: 20 +|23: 21 # Visual Studio Code +|24: 22 Theme dark_plus +|25: 23 +|26: 24 # Solarized +|27: 25 Theme solarized_dark +|28: 26 Theme solarized_light +|29: 27 +|30: 28 # Dracula == style step-solarized-dark grid=100x31 |0: 0-99 #01090b,#657b83, |1: 0-1 d,#758a41, 2-2 d,#93a1a1, 3-99 #073642,#93a1a1, @@ -737,20 +756,20 @@ |29: 0-3 d,#1e1e1e, 4-99 #858585,#1e1e1e, |30: 0-3 d,#1e1e1e, 4-6 #858585,#1e1e1e, 7-99 #d4d4d4,#1e1e1e, == snap tail grid=100x31 cursor=7,29 -|17: 326 Theme wolf_alabaster_dark -|18: 327 Theme wolf_alabaster_dark_bg -|19: 328 Theme wolf_alabaster_dark_mono -|20: 329 Theme wolf_alabaster_light -|21: 330 Theme wolf_alabaster_light_bg -|22: 331 Theme wolf_alabaster_light_mono -|23: 332 Theme yellowed -|24: 333 Theme yo -|25: 334 Theme yo_berry -|26: 335 Theme yo_light -|27: 336 Theme zed_onedark -|28: 337 Theme zed_onelight -|29: 338 Theme zenburn -|30: 339 +|17: 327 Theme wolf_alabaster_dark +|18: 328 Theme wolf_alabaster_dark_bg +|19: 329 Theme wolf_alabaster_dark_mono +|20: 330 Theme wolf_alabaster_light +|21: 331 Theme wolf_alabaster_light_bg +|22: 332 Theme wolf_alabaster_light_mono +|23: 333 Theme yellowed +|24: 334 Theme yo +|25: 335 Theme yo_berry +|26: 336 Theme yo_light +|27: 337 Theme zed_onedark +|28: 338 Theme zed_onelight +|29: 339 Theme zenburn +|30: 340 == snap picked grid=100x31 cursor=7,3 |16: 14 line 14 |17: 15 line 15 diff --git a/test/snapshots/themesel.snap b/test/snapshots/themesel.snap index 01e4dc5e..1d61bf6a 100644 --- a/test/snapshots/themesel.snap +++ b/test/snapshots/themesel.snap @@ -11,7 +11,7 @@ # and nothing to cancel: the row you ran is the theme you have. # # The whole ring is in the buffer, in sections: the fifteen native themes, -# acme and lapis, the faithful ports a family at a time, the legacy helix and +# acme, lapis and lapis_plain, the faithful ports a family at a time, the legacy helix and # dark, then everything exported from the vendored helix .toml and zed .json # files, sorted. The colors below are # read with snapstyle, so this proves the generated themes are real data and @@ -82,7 +82,7 @@ key tab stable 700 15000 snap step-clay snapstyle step-clay -# The three native contrast variants precede acme and lapis, and then the first +# The three native contrast variants precede acme, lapis and lapis_plain, and then the first # ported family's section. Its heading # and blank separator are not stops in the n/N command walk. key n @@ -113,6 +113,11 @@ snapstyle step-lapis key n key tab stable 700 15000 +snap step-lapis-plain +snapstyle step-lapis-plain +key n +key tab +stable 700 15000 snap step-dark-plus snapstyle step-dark-plus # across the Visual Studio Code section into Solarized: a section heading and |
