1use crate::tui::config::KeyboardProtocolConfig;
2
3pub use vtcode_commons::ui_protocol::{KeyboardProtocolSettings, SessionSurface};
5
6impl From<SessionSurface> for crate::tui::config::UiSurfacePreference {
7 fn from(value: SessionSurface) -> Self {
8 match value {
9 SessionSurface::Auto => Self::Auto,
10 SessionSurface::Alternate => Self::Alternate,
11 SessionSurface::Inline => Self::Inline,
12 }
13 }
14}
15
16impl From<crate::tui::config::UiSurfacePreference> for SessionSurface {
17 fn from(value: crate::tui::config::UiSurfacePreference) -> Self {
18 match value {
19 crate::tui::config::UiSurfacePreference::Auto => Self::Auto,
20 crate::tui::config::UiSurfacePreference::Alternate => Self::Alternate,
21 crate::tui::config::UiSurfacePreference::Inline => Self::Inline,
22 }
23 }
24}
25
26impl From<KeyboardProtocolConfig> for KeyboardProtocolSettings {
27 fn from(value: KeyboardProtocolConfig) -> Self {
28 Self {
29 enabled: value.enabled,
30 mode: value.mode,
31 disambiguate_escape_codes: value.disambiguate_escape_codes,
32 report_event_types: value.report_event_types,
33 report_alternate_keys: value.report_alternate_keys,
34 report_all_keys: value.report_all_keys,
35 }
36 }
37}
38
39impl From<KeyboardProtocolSettings> for KeyboardProtocolConfig {
40 fn from(value: KeyboardProtocolSettings) -> Self {
41 Self {
42 enabled: value.enabled,
43 mode: value.mode,
44 disambiguate_escape_codes: value.disambiguate_escape_codes,
45 report_event_types: value.report_event_types,
46 report_alternate_keys: value.report_alternate_keys,
47 report_all_keys: value.report_all_keys,
48 }
49 }
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq)]
54pub struct FullscreenInteractionSettings {
55 pub mouse_capture: bool,
56 pub copy_on_select: bool,
57 pub scroll_speed: u8,
58}
59
60impl Default for FullscreenInteractionSettings {
61 fn default() -> Self {
62 Self {
63 mouse_capture: true,
64 copy_on_select: true,
65 scroll_speed: 3,
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn session_surface_conversion_roundtrip() {
76 let variants = [SessionSurface::Auto, SessionSurface::Alternate, SessionSurface::Inline];
77
78 for variant in variants {
79 let converted: crate::tui::config::UiSurfacePreference = variant.into();
80 let roundtrip = SessionSurface::from(converted);
81 assert_eq!(variant, roundtrip);
82 }
83 }
84
85 #[test]
86 fn ui_surface_defaults_to_inline() {
87 assert_eq!(SessionSurface::default(), SessionSurface::Inline);
88 assert_eq!(crate::tui::config::UiSurfacePreference::default(), crate::tui::config::UiSurfacePreference::Inline);
89 }
90
91 #[test]
92 fn keyboard_protocol_conversion_roundtrip() {
93 let settings = KeyboardProtocolSettings {
94 enabled: true,
95 mode: "custom".to_string(),
96 disambiguate_escape_codes: true,
97 report_event_types: false,
98 report_alternate_keys: true,
99 report_all_keys: false,
100 };
101
102 let config: KeyboardProtocolConfig = settings.clone().into();
103 let restored = KeyboardProtocolSettings::from(config);
104
105 assert_eq!(settings, restored);
106 }
107
108 #[test]
109 fn fullscreen_interaction_settings_default_values() {
110 let settings = FullscreenInteractionSettings::default();
111
112 assert!(settings.mouse_capture);
113 assert!(settings.copy_on_select);
114 assert_eq!(settings.scroll_speed, 3);
115 }
116}