ttx 0.1.0
Loading...
Searching...
No Matches
features.h
Go to the documentation of this file.
1#pragma once
2
3#include "di/reflect/prelude.h"
4#include "di/util/bitwise_enum.h"
5#include "dius/sync_file.h"
7
8namespace ttx {
29
30DI_DEFINE_ENUM_BITWISE_OPERATIONS(Feature)
31
32constexpr auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<Feature>) {
33 using enum Feature;
34 return di::make_enumerators<"Feature">(
35 di::enumerator<"None", None>,
36 di::enumerator<"SyncronizedOutput", SyncronizedOutput,
37 "Allow using DEC private mode 2026 to synchronize screen updates to prevent tearing">,
38 di::enumerator<"TextSizingWidth", TextSizingWidth,
39 "Supports using kitty text sizing protocol (OSC 66) to specify explicit widths">,
40 di::enumerator<"TextSizingFull", TextSizingFull,
41 "Supports using kitty text sizing protocol (OSC 66) to specify multi-height cells">,
42 di::enumerator<"ThemeDetection", ThemeDetection,
43 "Supports light/dark mode detection via DEC private mode 2031">,
44 di::enumerator<"InBandSizeReports", InBandSizeReports,
45 "Supported in-band size reports via DEC private mode 2048">,
46 di::enumerator<"GraphemeClusteringMode", GraphemeClusteringMode,
47 "Reports some support for grapheme clustering DEC private mode 2038">,
48 di::enumerator<"KittyKeyProtocol", KittyKeyProtocol, "Supports kitty key reporting protocol">,
49 di::enumerator<"Undercurl", Undercurl, "Supports undercurl (fancy underline) and underline colors">,
50 di::enumerator<"BasicGraphemeClustering", BasicGraphemeClustering, "Properly handles multi-code point emojis">,
51 di::enumerator<"FullGraphemeClustering", FullGraphemeClustering,
52 "Grapheme clustering behavior matches the kitty specification on extreme edge cases">,
53 di::enumerator<
54 "TextSizingPresentation", TextSizingPresentation,
55 "Supports using kitty text sizing protocl (OSC 66) to specifiy fractional scaling and cell alignment">,
56 di::enumerator<"Clipboard", Clipboard, "Supports settings the clipboard via OSC 52">,
57 di::enumerator<"DynamicPalette", DynamicPalette, "Supports setting the color palette dynamically via OSC 4">,
58 di::enumerator<"BackgroundCharacterErase", BackgroundCharacterErase,
59 "Clearing the screen will set the background color of cells">,
60 di::enumerator<"SeamlessNavigation", SeamlessNavigation,
61 "Suppports the seamless navigation protocol (OSC 8671)">,
62 di::enumerator<"DynamicPaletteKitty", DynamicPaletteKitty,
63 "Supports setting the color palette via kitty color protocol (OSC 21)">);
64}
65
71
72auto detect_features(dius::SyncFile& terminal) -> di::Result<FeatureResult>;
73}
Implementation of clipboard handling for ttx.
Definition clipboard.h:41
Definition palette.h:69
ThemeMode
Theme mode (light or dark).
Definition palette.h:10
@ Dark
Definition palette.h:12
Definition clipboard.h:10
@ None
Definition direction.h:8
constexpr auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< ClipboardMode >)
Definition clipboard.h:21
Feature
Definition features.h:9
@ KittyKeyProtocol
Supports kitty key protocol.
Definition features.h:17
@ Undercurl
Supports undercurl (fancy underline) and underline colors.
Definition features.h:18
@ TextSizingPresentation
Supports text-sizing with scale=1 but fractional scale and alignment.
Definition features.h:21
@ GraphemeClusteringMode
Supports grapheme clustering mode via mode 2027.
Definition features.h:16
@ TextSizingWidth
Supports using the text sizing protocol to specify explicit text width.
Definition features.h:12
@ None
Definition features.h:10
@ BackgroundCharacterErase
Clearing the screen sets the current SGR background color.
Definition features.h:24
@ InBandSizeReports
Supports in-band size reports via mode 2048.
Definition features.h:15
@ DynamicPalette
Supports changing the color palette dynamically.
Definition features.h:23
@ ThemeDetection
Supports light/dark mode detection via mode 2031.
Definition features.h:14
@ SeamlessNavigation
Supports seamless navigation protocol (OSC 8671).
Definition features.h:25
@ BasicGraphemeClustering
Supports grapheme clustering, but may not match the kitty spec.
Definition features.h:19
@ FullGraphemeClustering
Grapheme clustering behavior matches kitty spec.
Definition features.h:20
@ All
Definition features.h:27
@ DynamicPaletteKitty
Supports kitty color protocol (OSC 21).
Definition features.h:26
@ SyncronizedOutput
Allow using DEC mode 2026 to synchronize screen updates.
Definition features.h:11
@ TextSizingFull
Supports using the text sizing protocol to multi-height cells.
Definition features.h:13
auto detect_features(dius::SyncFile &terminal) -> di::Result< FeatureResult >
Definition features.cpp:157
Definition features.h:66
terminal::Palette palette
Definition features.h:68
terminal::ThemeMode theme_mode
Definition features.h:69
Feature features
Definition features.h:67