Skip to main content

vtcode_core/terminal_setup/terminals/
hyper.rs

1//! Hyper terminal configuration generator.
2//!
3//! Generates JavaScript configuration for Hyper terminal.
4
5use crate::terminal_setup::config_writer::{ConfigFormat, ConfigWriter};
6use crate::terminal_setup::detector::TerminalType;
7use crate::terminal_setup::features::multiline;
8use anyhow::Result;
9
10/// Generate complete Hyper configuration with all features
11pub fn generate_config(features: &[crate::terminal_setup::detector::TerminalFeature]) -> Result<String> {
12    let mut config_sections = Vec::new();
13
14    // Add header comment
15    config_sections.push("// VT Code Terminal Configuration for Hyper".to_string());
16    config_sections.push("// Add this to your ~/.hyper.js config file".to_string());
17    config_sections.push(String::new());
18
19    // Generate feature-specific configurations
20    for feature in features {
21        match feature {
22            crate::terminal_setup::detector::TerminalFeature::Multiline => {
23                config_sections.push("// Multiline input: Shift+Enter".to_string());
24                let multiline_config = multiline::generate_config(TerminalType::Hyper)?;
25                config_sections.push(multiline_config);
26            }
27            crate::terminal_setup::detector::TerminalFeature::CopyPaste => {
28                config_sections.push("// Enhanced copy/paste".to_string());
29                config_sections.push(
30                    r#"config: {
31  copyOnSelect: true,
32  quickEdit: true,
33}
34"#
35                    .to_string(),
36                );
37            }
38            crate::terminal_setup::detector::TerminalFeature::ShellIntegration => {
39                config_sections.push("// Shell integration: Use Hyper plugins".to_string());
40                config_sections.push("// Install: hyper-statusline, hyper-search".to_string());
41                config_sections.push(String::new());
42            }
43            crate::terminal_setup::detector::TerminalFeature::ThemeSync => {
44                config_sections.push("// Theme colors will be configured separately".to_string());
45                config_sections.push(String::new());
46            }
47            crate::terminal_setup::detector::TerminalFeature::Notifications => {
48                config_sections.push("// System notifications".to_string());
49                config_sections.push("// Hyper supports notifications via plugins".to_string());
50                config_sections.push("// Install: hyper-statusline, hyper-search".to_string());
51                config_sections.push(String::new());
52            }
53        }
54    }
55
56    Ok(config_sections.join("\n"))
57}
58
59/// Merge Hyper configuration with existing JavaScript config file
60pub fn merge_with_existing(existing_content: &str, new_config: &str) -> Result<String> {
61    ConfigWriter::merge_with_markers(existing_content, new_config, ConfigFormat::JavaScript)
62}
63
64#[cfg(test)]
65mod tests {
66    use super::*;
67    use crate::terminal_setup::detector::TerminalFeature;
68
69    #[test]
70    fn test_generate_multiline_config() {
71        let features = vec![TerminalFeature::Multiline];
72        let config = generate_config(&features).unwrap();
73        assert!(config.contains("shift+enter") || config.contains("Multiline"));
74    }
75
76    #[test]
77    fn test_generate_copy_paste_config() {
78        let features = vec![TerminalFeature::CopyPaste];
79        let config = generate_config(&features).unwrap();
80        assert!(config.contains("copyOnSelect"));
81    }
82}