par-term-config 0.10.0

Configuration system for par-term terminal emulator
Documentation
//! `impl Default for Config`
//!
//! Mirrors every `#[serde(default = …)]` annotation on `Config` so that
//! `Config::default()` and a deserialized empty YAML file are always equivalent.

use std::collections::HashMap;

use crate::types::{
    BackgroundImageMode, BackgroundMode, CursorStyle, DividerStyle, DroppedFileQuoteStyle,
    ImageScalingMode, InstallPromptState, IntegrationVersions, LogLevel, ModifierRemapping,
    NewTabPosition, OptionKeyMode, PaneTitlePosition, PowerPreference, ProgressBarPosition,
    ProgressBarStyle, RemoteTabTitleFormat, SemanticHistoryEditorMode, SessionLogFormat,
    ShaderInstallPrompt, ShellExitAction, TabBarMode, TabBarPosition, TabStyle, TabTitleMode,
    ThinStrokesMode, UnfocusedCursorStyle, VsyncMode, WindowType, default_smart_selection_rules,
};

use super::{
    AiInspectorConfig, Config, CopyModeConfig, GlobalShaderConfig, NotificationConfig,
    ScrollbackConfig, SearchConfig, SshConfig, StatusBarConfig, UnicodeConfig,
};

impl Default for Config {
    fn default() -> Self {
        Self {
            cols: crate::defaults::cols(),
            rows: crate::defaults::rows(),
            font_size: crate::defaults::font_size(),
            font_family: crate::defaults::font_family(),
            font_family_bold: None,
            font_family_italic: None,
            font_family_bold_italic: None,
            font_ranges: Vec::new(),
            line_spacing: crate::defaults::line_spacing(),
            char_spacing: crate::defaults::char_spacing(),
            enable_text_shaping: crate::defaults::text_shaping(),
            enable_ligatures: crate::defaults::bool_true(),
            enable_kerning: crate::defaults::bool_true(),
            font_antialias: crate::defaults::bool_true(),
            font_hinting: true,
            font_thin_strokes: ThinStrokesMode::default(),
            minimum_contrast: crate::defaults::minimum_contrast(),
            copy_mode: CopyModeConfig::default(),
            scrollback: ScrollbackConfig::default(),
            unicode: UnicodeConfig::default(),
            cursor_blink: crate::defaults::bool_false(),
            cursor_blink_interval: crate::defaults::cursor_blink_interval(),
            cursor_style: CursorStyle::default(),
            cursor_color: crate::defaults::cursor_color(),
            cursor_text_color: None,
            lock_cursor_visibility: crate::defaults::bool_false(),
            lock_cursor_style: crate::defaults::bool_false(),
            lock_cursor_blink: crate::defaults::bool_false(),
            cursor_guide_enabled: crate::defaults::bool_false(),
            cursor_guide_color: crate::defaults::cursor_guide_color(),
            cursor_shadow_enabled: crate::defaults::bool_false(),
            cursor_shadow_color: crate::defaults::cursor_shadow_color(),
            cursor_shadow_offset: crate::defaults::cursor_shadow_offset(),
            cursor_shadow_blur: crate::defaults::cursor_shadow_blur(),
            cursor_boost: crate::defaults::cursor_boost(),
            cursor_boost_color: crate::defaults::cursor_boost_color(),
            unfocused_cursor_style: UnfocusedCursorStyle::default(),
            scrollbar_autohide_delay: crate::defaults::scrollbar_autohide_delay(),
            window_title: crate::defaults::window_title(),
            allow_title_change: crate::defaults::bool_true(),
            theme: crate::defaults::theme(),
            auto_dark_mode: false,
            light_theme: crate::defaults::light_theme(),
            dark_theme: crate::defaults::dark_theme(),
            left_option_key_mode: OptionKeyMode::default(),
            right_option_key_mode: OptionKeyMode::default(),
            modifier_remapping: ModifierRemapping::default(),
            use_physical_keys: crate::defaults::bool_false(),
            auto_copy_selection: crate::defaults::bool_true(),
            copy_trailing_newline: crate::defaults::bool_false(),
            middle_click_paste: crate::defaults::bool_true(),
            paste_delay_ms: crate::defaults::paste_delay_ms(),
            warn_paste_control_chars: crate::defaults::bool_true(),
            dropped_file_quote_style: DroppedFileQuoteStyle::default(),
            mouse_scroll_speed: crate::defaults::scroll_speed(),
            mouse_double_click_threshold: crate::defaults::double_click_threshold(),
            mouse_triple_click_threshold: crate::defaults::triple_click_threshold(),
            option_click_moves_cursor: crate::defaults::bool_true(),
            focus_follows_mouse: crate::defaults::bool_false(),
            report_horizontal_scroll: crate::defaults::bool_true(),
            word_characters: crate::defaults::word_characters(),
            smart_selection_enabled: crate::defaults::smart_selection_enabled(),
            smart_selection_rules: default_smart_selection_rules(),
            screenshot_format: crate::defaults::screenshot_format(),
            max_fps: crate::defaults::max_fps(),
            vsync_mode: VsyncMode::default(),
            power_preference: PowerPreference::default(),
            reduce_flicker: crate::defaults::reduce_flicker(),
            reduce_flicker_delay_ms: crate::defaults::reduce_flicker_delay_ms(),
            maximize_throughput: crate::defaults::maximize_throughput(),
            throughput_render_interval_ms: crate::defaults::throughput_render_interval_ms(),
            window_padding: crate::defaults::window_padding(),
            hide_window_padding_on_split: crate::defaults::bool_true(),
            snap_window_to_grid: crate::defaults::snap_window_to_grid(),
            window_opacity: crate::defaults::window_opacity(),
            window_always_on_top: crate::defaults::bool_false(),
            window_decorations: crate::defaults::bool_true(),
            window_type: WindowType::default(),
            target_monitor: None,
            target_space: None,
            lock_window_size: crate::defaults::bool_false(),
            show_window_number: crate::defaults::bool_false(),
            transparency_affects_only_default_background: crate::defaults::bool_true(),
            keep_text_opaque: crate::defaults::bool_true(),
            blur_enabled: crate::defaults::bool_false(),
            blur_radius: crate::defaults::blur_radius(),
            background_image: None,
            background_image_enabled: crate::defaults::bool_true(),
            background_image_mode: BackgroundImageMode::default(),
            background_image_opacity: crate::defaults::background_image_opacity(),
            image_scaling_mode: ImageScalingMode::default(),
            image_preserve_aspect_ratio: crate::defaults::bool_true(),
            background_mode: BackgroundMode::default(),
            pane_backgrounds: Vec::new(),
            background_color: crate::defaults::background_color(),
            download_save_location: crate::types::DownloadSaveLocation::default(),
            last_download_directory: None,
            shader: GlobalShaderConfig::default(),
            shell_exit_action: ShellExitAction::default(),
            custom_shell: None,
            shell_args: None,
            working_directory: None,
            startup_directory_mode: crate::types::StartupDirectoryMode::default(),
            startup_directory: None,
            last_working_directory: None,
            shell_env: None,
            login_shell: crate::defaults::login_shell(),
            initial_text: crate::defaults::initial_text(),
            initial_text_delay_ms: crate::defaults::initial_text_delay_ms(),
            initial_text_send_newline: crate::defaults::initial_text_send_newline(),
            answerback_string: crate::defaults::answerback_string(),
            prompt_on_quit: crate::defaults::bool_false(),
            confirm_close_running_jobs: crate::defaults::bool_false(),
            jobs_to_ignore: crate::defaults::jobs_to_ignore(),
            semantic_history_enabled: crate::defaults::bool_true(),
            semantic_history_editor_mode: SemanticHistoryEditorMode::default(),
            semantic_history_editor: crate::defaults::semantic_history_editor(),
            link_highlight_color: crate::defaults::link_highlight_color(),
            link_highlight_color_enabled: crate::defaults::bool_true(),
            link_highlight_underline: crate::defaults::bool_true(),
            link_underline_style: crate::types::LinkUnderlineStyle::default(),
            link_handler_command: String::new(),
            scrollbar_position: crate::defaults::scrollbar_position(),
            scrollbar_width: crate::defaults::scrollbar_width(),
            scrollbar_thumb_color: crate::defaults::scrollbar_thumb_color(),
            scrollbar_track_color: crate::defaults::scrollbar_track_color(),
            scrollbar_command_marks: crate::defaults::bool_true(),
            scrollbar_mark_tooltips: crate::defaults::bool_false(),
            command_separator_enabled: crate::defaults::bool_false(),
            command_separator_thickness: crate::defaults::command_separator_thickness(),
            command_separator_opacity: crate::defaults::command_separator_opacity(),
            command_separator_exit_color: crate::defaults::bool_true(),
            command_separator_color: crate::defaults::command_separator_color(),
            clipboard_max_sync_events: crate::defaults::clipboard_max_sync_events(),
            clipboard_max_event_bytes: crate::defaults::clipboard_max_event_bytes(),
            command_history_max_entries: crate::defaults::command_history_max_entries(),
            notifications: NotificationConfig::default(),
            ssh: SshConfig::default(),
            tab_style: TabStyle::default(),
            light_tab_style: crate::defaults::light_tab_style(),
            dark_tab_style: crate::defaults::dark_tab_style(),
            tab_bar_mode: TabBarMode::default(),
            tab_title_mode: TabTitleMode::default(),
            remote_tab_title_format: RemoteTabTitleFormat::default(),
            remote_tab_title_osc_priority: true,
            tab_bar_height: crate::defaults::tab_bar_height(),
            tab_bar_position: TabBarPosition::default(),
            tab_bar_width: crate::defaults::tab_bar_width(),
            tab_show_close_button: crate::defaults::bool_true(),
            tab_show_index: crate::defaults::bool_false(),
            tab_inherit_cwd: crate::defaults::bool_true(),
            max_tabs: crate::defaults::zero(),
            show_profile_drawer_button: crate::defaults::bool_false(),
            new_tab_shortcut_shows_profiles: crate::defaults::bool_false(),
            new_tab_position: NewTabPosition::default(),
            tab_bar_background: crate::defaults::tab_bar_background(),
            tab_active_background: crate::defaults::tab_active_background(),
            tab_inactive_background: crate::defaults::tab_inactive_background(),
            tab_hover_background: crate::defaults::tab_hover_background(),
            tab_active_text: crate::defaults::tab_active_text(),
            tab_inactive_text: crate::defaults::tab_inactive_text(),
            tab_active_indicator: crate::defaults::tab_active_indicator(),
            tab_activity_indicator: crate::defaults::tab_activity_indicator(),
            tab_bell_indicator: crate::defaults::tab_bell_indicator(),
            tab_close_button: crate::defaults::tab_close_button(),
            tab_close_button_hover: crate::defaults::tab_close_button_hover(),
            dim_inactive_tabs: crate::defaults::bool_true(),
            inactive_tab_opacity: crate::defaults::inactive_tab_opacity(),
            tab_min_width: crate::defaults::tab_min_width(),
            tab_stretch_to_fill: crate::defaults::tab_stretch_to_fill(),
            tab_html_titles: crate::defaults::tab_html_titles(),
            tab_border_color: crate::defaults::tab_border_color(),
            tab_border_width: crate::defaults::tab_border_width(),
            tab_inactive_outline_only: crate::defaults::bool_true(),
            pane_divider_width: crate::defaults::pane_divider_width(),
            pane_divider_hit_width: crate::defaults::pane_divider_hit_width(),
            pane_padding: crate::defaults::pane_padding(),
            pane_min_size: crate::defaults::pane_min_size(),
            pane_background_opacity: crate::defaults::pane_background_opacity(),
            pane_divider_color: crate::defaults::pane_divider_color(),
            pane_divider_hover_color: crate::defaults::pane_divider_hover_color(),
            dim_inactive_panes: crate::defaults::bool_false(),
            inactive_pane_opacity: crate::defaults::inactive_pane_opacity(),
            show_pane_titles: crate::defaults::bool_false(),
            pane_title_height: crate::defaults::pane_title_height(),
            pane_title_position: PaneTitlePosition::default(),
            pane_title_color: crate::defaults::pane_title_color(),
            pane_title_bg_color: crate::defaults::pane_title_bg_color(),
            pane_title_font: String::new(),
            pane_divider_style: DividerStyle::default(),
            max_panes: crate::defaults::max_panes(),
            pane_focus_indicator: crate::defaults::bool_true(),
            pane_focus_color: crate::defaults::pane_focus_color(),
            pane_focus_width: crate::defaults::pane_focus_width(),
            tmux_enabled: crate::defaults::bool_false(),
            tmux_path: crate::defaults::tmux_path(),
            tmux_default_session: crate::defaults::tmux_default_session(),
            tmux_auto_attach: crate::defaults::bool_false(),
            tmux_auto_attach_session: crate::defaults::tmux_auto_attach_session(),
            tmux_clipboard_sync: crate::defaults::bool_true(),
            tmux_hide_gateway_tab: crate::defaults::bool_false(),
            tmux_profile: None,
            tmux_show_status_bar: crate::defaults::bool_false(),
            tmux_status_bar_refresh_ms: crate::defaults::tmux_status_bar_refresh_ms(),
            tmux_prefix_key: crate::defaults::tmux_prefix_key(),
            tmux_status_bar_use_native_format: crate::defaults::bool_false(),
            tmux_status_bar_left: crate::defaults::tmux_status_bar_left(),
            tmux_status_bar_right: crate::defaults::tmux_status_bar_right(),
            pause_shaders_on_blur: crate::defaults::bool_true(),
            pause_refresh_on_blur: crate::defaults::bool_true(),
            unfocused_fps: crate::defaults::unfocused_fps(),
            inactive_tab_fps: crate::defaults::inactive_tab_fps(),
            shader_hot_reload: crate::defaults::bool_false(),
            shader_hot_reload_delay: crate::defaults::shader_hot_reload_delay(),
            shader_configs: HashMap::new(),
            cursor_shader_configs: HashMap::new(),
            keybindings: crate::defaults::keybindings(),
            custom_action_prefix_key: crate::defaults::custom_action_prefix_key(),
            shader_install_prompt: ShaderInstallPrompt::default(),
            shell_integration_state: InstallPromptState::default(),
            integration_versions: IntegrationVersions::default(),
            updates: crate::config::config_struct::UpdateConfig::default(),
            auto_restore_arrangement: None,
            restore_session: crate::defaults::bool_false(),
            session_undo_timeout_secs: crate::defaults::session_undo_timeout_secs(),
            session_undo_max_entries: crate::defaults::session_undo_max_entries(),
            session_undo_preserve_shell: crate::defaults::session_undo_preserve_shell(),
            search: SearchConfig::default(),
            auto_log_sessions: crate::defaults::bool_false(),
            session_log_format: SessionLogFormat::default(),
            session_log_directory: crate::defaults::session_log_directory(),
            archive_on_close: crate::defaults::bool_true(),
            session_log_redact_passwords: crate::defaults::bool_true(),
            log_level: LogLevel::default(),
            badge_enabled: crate::defaults::bool_false(),
            badge_format: crate::defaults::badge_format(),
            badge_color: crate::defaults::badge_color(),
            badge_color_alpha: crate::defaults::badge_color_alpha(),
            badge_font: crate::defaults::badge_font(),
            badge_font_bold: crate::defaults::bool_true(),
            badge_top_margin: crate::defaults::badge_top_margin(),
            badge_right_margin: crate::defaults::badge_right_margin(),
            badge_max_width: crate::defaults::badge_max_width(),
            badge_max_height: crate::defaults::badge_max_height(),
            status_bar: StatusBarConfig::default(),
            progress_bar_enabled: crate::defaults::bool_true(),
            progress_bar_style: ProgressBarStyle::default(),
            progress_bar_position: ProgressBarPosition::default(),
            progress_bar_height: crate::defaults::progress_bar_height(),
            progress_bar_opacity: crate::defaults::progress_bar_opacity(),
            progress_bar_normal_color: crate::defaults::progress_bar_normal_color(),
            progress_bar_warning_color: crate::defaults::progress_bar_warning_color(),
            progress_bar_error_color: crate::defaults::progress_bar_error_color(),
            progress_bar_indeterminate_color: crate::defaults::progress_bar_indeterminate_color(),
            triggers: Vec::new(),
            coprocesses: Vec::new(),
            scripts: Vec::new(),
            snippets: Vec::new(),
            actions: Vec::new(),
            enable_prettifier: false,
            content_prettifier: crate::config::prettifier::PrettifierYamlConfig::default(),
            collapsed_settings_sections: Vec::new(),
            dynamic_profile_sources: Vec::new(),
            allow_all_env_vars: crate::defaults::bool_false(),
            allow_http_profiles: crate::defaults::bool_false(),
            ai_inspector: AiInspectorConfig::default(),
            insecure_trigger_names: Vec::new(),
            unaccepted_risk_trigger_names: Vec::new(),
        }
    }
}