From 5c8962b8f1ee23681b0736e41b9965f853564500 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Wed, 7 Feb 2024 06:05:16 +0000 Subject: [PATCH] LibVT+TerminalSettings: Move settings parsing functions to LibVT This change moves the automark and bell settings parsing functions to LibVT, so that they can be shared between Terminal and TerminalSettings. --- .../TerminalSettings/MainWidget.cpp | 56 +++---------------- .../TerminalSettings/MainWidget.h | 5 -- Userland/Libraries/LibVT/TerminalWidget.cpp | 40 +++++++++++++ Userland/Libraries/LibVT/TerminalWidget.h | 4 ++ 4 files changed, 52 insertions(+), 53 deletions(-) diff --git a/Userland/Applications/TerminalSettings/MainWidget.cpp b/Userland/Applications/TerminalSettings/MainWidget.cpp index 1af1981a7c..3bcc6a354a 100644 --- a/Userland/Applications/TerminalSettings/MainWidget.cpp +++ b/Userland/Applications/TerminalSettings/MainWidget.cpp @@ -43,10 +43,10 @@ ErrorOr MainWidget::setup() auto& automark_off_radio = *find_descendant_of_type_named("automark_off"); auto& automark_on_interactive_prompt_radio = *find_descendant_of_type_named("automark_on_interactive_prompt"); - m_bell_mode = parse_bell(Config::read_string("Terminal"sv, "Window"sv, "Bell"sv)).value_or(VT::TerminalWidget::BellMode::Visible); + m_bell_mode = VT::TerminalWidget::parse_bell(Config::read_string("Terminal"sv, "Window"sv, "Bell"sv)).value_or(VT::TerminalWidget::BellMode::Visible); m_original_bell_mode = m_bell_mode; - m_automark_mode = parse_automark_mode(Config::read_string("Terminal"sv, "Terminal"sv, "AutoMark"sv)).value_or(VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt); + m_automark_mode = VT::TerminalWidget::parse_automark_mode(Config::read_string("Terminal"sv, "Terminal"sv, "AutoMark"sv)).value_or(VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt); m_original_automark_mode = m_automark_mode; switch (m_bell_mode) { @@ -63,17 +63,17 @@ ErrorOr MainWidget::setup() beep_bell_radio.on_checked = [this](bool) { m_bell_mode = VT::TerminalWidget::BellMode::AudibleBeep; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, VT::TerminalWidget::stringify_bell(m_bell_mode)); set_modified(true); }; visual_bell_radio.on_checked = [this](bool) { m_bell_mode = VT::TerminalWidget::BellMode::Visible; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, VT::TerminalWidget::stringify_bell(m_bell_mode)); set_modified(true); }; no_bell_radio.on_checked = [this](bool) { m_bell_mode = VT::TerminalWidget::BellMode::Disabled; - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_bell_mode)); + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, VT::TerminalWidget::stringify_bell(m_bell_mode)); set_modified(true); }; @@ -88,12 +88,12 @@ ErrorOr MainWidget::setup() automark_off_radio.on_checked = [this](bool) { m_automark_mode = VT::TerminalWidget::AutoMarkMode::MarkNothing; - Config::write_string("Terminal"sv, "Terminal"sv, "AutoMark"sv, stringify_automark_mode(m_automark_mode)); + Config::write_string("Terminal"sv, "Terminal"sv, "AutoMark"sv, VT::TerminalWidget::stringify_automark_mode(m_automark_mode)); set_modified(true); }; automark_on_interactive_prompt_radio.on_checked = [this](bool) { m_automark_mode = VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt; - Config::write_string("Terminal"sv, "Terminal"sv, "AutoMark"sv, stringify_automark_mode(m_automark_mode)); + Config::write_string("Terminal"sv, "Terminal"sv, "AutoMark"sv, VT::TerminalWidget::stringify_automark_mode(m_automark_mode)); set_modified(true); }; @@ -109,46 +109,6 @@ ErrorOr MainWidget::setup() return {}; } -Optional MainWidget::parse_bell(StringView bell_string) -{ - if (bell_string == "AudibleBeep") - return VT::TerminalWidget::BellMode::AudibleBeep; - if (bell_string == "Visible") - return VT::TerminalWidget::BellMode::Visible; - if (bell_string == "Disabled") - return VT::TerminalWidget::BellMode::Disabled; - return {}; -} - -ByteString MainWidget::stringify_bell(VT::TerminalWidget::BellMode bell_mode) -{ - if (bell_mode == VT::TerminalWidget::BellMode::AudibleBeep) - return "AudibleBeep"; - if (bell_mode == VT::TerminalWidget::BellMode::Disabled) - return "Disabled"; - if (bell_mode == VT::TerminalWidget::BellMode::Visible) - return "Visible"; - VERIFY_NOT_REACHED(); -} - -Optional MainWidget::parse_automark_mode(StringView automark_mode) -{ - if (automark_mode == "MarkNothing") - return VT::TerminalWidget::AutoMarkMode::MarkNothing; - if (automark_mode == "MarkInteractiveShellPrompt") - return VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt; - return {}; -} - -ByteString MainWidget::stringify_automark_mode(VT::TerminalWidget::AutoMarkMode automark_mode) -{ - if (automark_mode == VT::TerminalWidget::AutoMarkMode::MarkNothing) - return "MarkNothing"; - if (automark_mode == VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt) - return "MarkInteractiveShellPrompt"; - VERIFY_NOT_REACHED(); -} - void MainWidget::apply_settings() { m_original_bell_mode = m_bell_mode; @@ -158,7 +118,7 @@ void MainWidget::apply_settings() void MainWidget::write_back_settings() const { Config::write_bool("Terminal"sv, "Terminal"sv, "ConfirmClose"sv, m_orignal_confirm_close); - Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, stringify_bell(m_original_bell_mode)); + Config::write_string("Terminal"sv, "Window"sv, "Bell"sv, VT::TerminalWidget::stringify_bell(m_original_bell_mode)); } void MainWidget::cancel_settings() diff --git a/Userland/Applications/TerminalSettings/MainWidget.h b/Userland/Applications/TerminalSettings/MainWidget.h index 9ccec4b982..f495790073 100644 --- a/Userland/Applications/TerminalSettings/MainWidget.h +++ b/Userland/Applications/TerminalSettings/MainWidget.h @@ -28,11 +28,6 @@ private: ErrorOr setup(); void write_back_settings() const; - static Optional parse_bell(StringView bell_string); - static Optional parse_automark_mode(StringView automark_mode); - static ByteString stringify_bell(VT::TerminalWidget::BellMode bell_mode); - static ByteString stringify_automark_mode(VT::TerminalWidget::AutoMarkMode automark_mode); - VT::TerminalWidget::BellMode m_bell_mode { VT::TerminalWidget::BellMode::Disabled }; VT::TerminalWidget::AutoMarkMode m_automark_mode { VT::TerminalWidget::AutoMarkMode::MarkInteractiveShellPrompt }; bool m_confirm_close { true }; diff --git a/Userland/Libraries/LibVT/TerminalWidget.cpp b/Userland/Libraries/LibVT/TerminalWidget.cpp index 37533245b3..d5f047bb99 100644 --- a/Userland/Libraries/LibVT/TerminalWidget.cpp +++ b/Userland/Libraries/LibVT/TerminalWidget.cpp @@ -1415,6 +1415,46 @@ ByteString TerminalWidget::stringify_cursor_shape(VT::CursorShape cursor_shape) VERIFY_NOT_REACHED(); } +Optional TerminalWidget::parse_bell(StringView bell_string) +{ + if (bell_string == "AudibleBeep") + return BellMode::AudibleBeep; + if (bell_string == "Visible") + return BellMode::Visible; + if (bell_string == "Disabled") + return BellMode::Disabled; + return {}; +} + +ByteString TerminalWidget::stringify_bell(TerminalWidget::BellMode bell_mode) +{ + if (bell_mode == BellMode::AudibleBeep) + return "AudibleBeep"; + if (bell_mode == BellMode::Disabled) + return "Disabled"; + if (bell_mode == BellMode::Visible) + return "Visible"; + VERIFY_NOT_REACHED(); +} + +Optional TerminalWidget::parse_automark_mode(StringView automark_mode) +{ + if (automark_mode == "MarkNothing") + return AutoMarkMode::MarkNothing; + if (automark_mode == "MarkInteractiveShellPrompt") + return AutoMarkMode::MarkInteractiveShellPrompt; + return {}; +} + +ByteString TerminalWidget::stringify_automark_mode(AutoMarkMode automark_mode) +{ + if (automark_mode == AutoMarkMode::MarkNothing) + return "MarkNothing"; + if (automark_mode == AutoMarkMode::MarkInteractiveShellPrompt) + return "MarkInteractiveShellPrompt"; + VERIFY_NOT_REACHED(); +} + void TerminalWidget::handle_pty_owner_change(pid_t new_owner) { if (m_auto_mark_mode == AutoMarkMode::MarkInteractiveShellPrompt && new_owner == m_startup_process_id) { diff --git a/Userland/Libraries/LibVT/TerminalWidget.h b/Userland/Libraries/LibVT/TerminalWidget.h index ca8e296628..d76c37a692 100644 --- a/Userland/Libraries/LibVT/TerminalWidget.h +++ b/Userland/Libraries/LibVT/TerminalWidget.h @@ -115,7 +115,11 @@ public: virtual void set_cursor_shape(CursorShape) override; static Optional parse_cursor_shape(StringView); + static Optional parse_bell(StringView); + static Optional parse_automark_mode(StringView); static ByteString stringify_cursor_shape(VT::CursorShape); + static ByteString stringify_bell(BellMode); + static ByteString stringify_automark_mode(AutoMarkMode); private: TerminalWidget(int ptm_fd, bool automatic_size_policy);