ttx 0.1.0
Loading...
Searching...
No Matches
osc_21.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/container/string/string.h"
4#include "di/types/integers.h"
5#include "di/vocab/optional/optional_forward_declaration.h"
6#include "ttx/features.h"
9
10namespace ttx::terminal {
20struct OSC21 {
21 constexpr static auto palette = 4u;
22 constexpr static auto special = 5u;
23 constexpr static auto dynamic_start = 10u;
24 constexpr static auto dynamic_foreground = 10u;
25 constexpr static auto dynamic_background = 11u;
26 constexpr static auto dynamic_cursor = 12u;
27 constexpr static auto dynamic_selection_background = 17u;
28 constexpr static auto dynamic_selection_foreground = 19u;
29 constexpr static auto dynamic_end = 19u;
30 constexpr static auto reset_offset = 100u;
31 constexpr static auto kitty = 21u;
32
33 constexpr static auto is_valid_osc_number(u32 number) {
34 return number == palette || number == special || (number >= dynamic_start && number <= dynamic_end) ||
35 number == kitty || number == palette + reset_offset || number == special + reset_offset ||
36 (number >= dynamic_start + reset_offset && number <= dynamic_end + reset_offset);
37 }
38
39 struct Request {
40 bool query { false };
43 di::Optional<di::String> kitty_color_name {};
44
45 auto is_reset() const -> bool { return !query && color.is_default(); }
46
47 auto operator==(Request const&) const -> bool = default;
48
49 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Request>) {
50 return di::make_fields<"OSC21::Request">(
51 di::field<"query", &Request::query>, di::field<"palette", &Request::palette>,
52 di::field<"color", &Request::color>, di::field<"kitty_color_name", &Request::kitty_color_name>);
53 }
54 };
55
56 di::Vector<Request> requests;
57
58 static auto parse(di::StringView data) -> di::Optional<OSC21>;
59
60 auto serialize(Feature features) const -> di::String;
61
62 auto operator==(OSC21 const&) const -> bool = default;
63
64 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<OSC21>) {
65 return di::make_fields<"OSC21">(di::field<"requests", &OSC21::requests>);
66 }
67};
68}
Definition absolute_position.h:6
PaletteIndex
Extended palette index which includes dynamic colors.
Definition palette.h:27
@ Unknown
Definition palette.h:47
Feature
Definition features.h:9
Definition color.h:10
Definition osc_21.h:39
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< Request >)
Definition osc_21.h:49
bool query
Definition osc_21.h:40
auto operator==(Request const &) const -> bool=default
PaletteIndex palette
Definition osc_21.h:41
di::Optional< di::String > kitty_color_name
Definition osc_21.h:43
Color color
Definition osc_21.h:42
auto is_reset() const -> bool
Definition osc_21.h:45
Represents a color palette query or change.
Definition osc_21.h:20
static constexpr auto dynamic_cursor
Definition osc_21.h:26
static constexpr auto dynamic_start
Definition osc_21.h:23
static constexpr auto reset_offset
Definition osc_21.h:30
static constexpr auto dynamic_background
Definition osc_21.h:25
static auto parse(di::StringView data) -> di::Optional< OSC21 >
Definition osc_21.cpp:117
static constexpr auto dynamic_end
Definition osc_21.h:29
static constexpr auto is_valid_osc_number(u32 number)
Definition osc_21.h:33
static constexpr auto dynamic_selection_background
Definition osc_21.h:27
static constexpr auto palette
Definition osc_21.h:21
auto serialize(Feature features) const -> di::String
Definition osc_21.cpp:345
di::Vector< Request > requests
Definition osc_21.h:56
static constexpr auto dynamic_foreground
Definition osc_21.h:24
static constexpr auto kitty
Definition osc_21.h:31
auto operator==(OSC21 const &) const -> bool=default
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< OSC21 >)
Definition osc_21.h:64
static constexpr auto special
Definition osc_21.h:22
static constexpr auto dynamic_selection_foreground
Definition osc_21.h:28