diff --git a/Userland/Libraries/LibVT/Terminal.cpp b/Userland/Libraries/LibVT/Terminal.cpp index 6e4575df4d..477cc6e4db 100644 --- a/Userland/Libraries/LibVT/Terminal.cpp +++ b/Userland/Libraries/LibVT/Terminal.cpp @@ -267,7 +267,31 @@ void Terminal::XTERM_WM(Parameters params) { if (params.size() < 1) return; - dbgln("FIXME: XTERM_WM: Ps: {} (param count: {})", params[0], params.size()); + switch (params[0]) { + case 22: { + if (params.size() > 1 && params[1] == 1) { + dbgln("FIXME: we don't support icon titles"); + return; + } + dbgln_if(TERMINAL_DEBUG, "Title stack push: {}", m_current_window_title); + [[maybe_unused]] auto rc = m_title_stack.try_append(move(m_current_window_title)); + break; + } + case 23: { + if (params.size() > 1 && params[1] == 1) + return; + if (m_title_stack.is_empty()) { + dbgln("Shenanigans: Tried to pop from empty title stack"); + return; + } + m_current_window_title = m_title_stack.take_last(); + dbgln_if(TERMINAL_DEBUG, "Title stack pop: {}", m_current_window_title); + m_client.set_window_title(m_current_window_title); + break; + } + default: + dbgln("FIXME: XTERM_WM: Ps: {} (param count: {})", params[0], params.size()); + } } void Terminal::DECSTBM(Parameters params) @@ -934,12 +958,14 @@ void Terminal::execute_osc_sequence(OscParameters parameters, u8 last_byte) case 0: case 1: case 2: - if (parameters.size() < 2) + if (parameters.size() < 2) { dbgln("Attempted to set window title without any parameters"); - else - m_client.set_window_title(stringview_ify(1)); - // FIXME: the split breaks titles containing semicolons. - // Should we expose the raw OSC string from the parser? Or join by semicolon? + } else { + // FIXME: the split breaks titles containing semicolons. + // Should we expose the raw OSC string from the parser? Or join by semicolon? + m_current_window_title = stringview_ify(1).to_string(); + m_client.set_window_title(m_current_window_title); + } break; case 8: #ifndef KERNEL diff --git a/Userland/Libraries/LibVT/Terminal.h b/Userland/Libraries/LibVT/Terminal.h index 3ede089c27..e5a596c523 100644 --- a/Userland/Libraries/LibVT/Terminal.h +++ b/Userland/Libraries/LibVT/Terminal.h @@ -339,6 +339,9 @@ protected: Attribute m_current_attribute; Attribute m_saved_attribute; + String m_current_window_title; + Vector m_title_stack; + #ifndef KERNEL u32 m_next_href_id { 0 }; #endif