From 0c4b0c0312e32f802103c84d5061351222ee84ec Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 5 Jul 2020 23:34:02 +0200 Subject: [PATCH] Terminal+LibVT: Add "clear including history" action (Ctrl+Shift+K) :^) Sometimes you just want to get rid of all your scrollback history in the terminal, and now there's a way to do that. --- Applications/Terminal/main.cpp | 3 +++ Libraries/LibVT/Terminal.cpp | 8 ++++++++ Libraries/LibVT/Terminal.h | 2 ++ Libraries/LibVT/TerminalWidget.cpp | 11 +++++++++++ Libraries/LibVT/TerminalWidget.h | 3 +++ 5 files changed, 27 insertions(+) diff --git a/Applications/Terminal/main.cpp b/Applications/Terminal/main.cpp index 34cf76e56e..85ccb58cc9 100644 --- a/Applications/Terminal/main.cpp +++ b/Applications/Terminal/main.cpp @@ -297,6 +297,9 @@ int main(int argc, char** argv) edit_menu.add_action(terminal.copy_action()); edit_menu.add_action(terminal.paste_action()); + auto& view_menu = menubar->add_menu("View"); + view_menu.add_action(terminal.clear_including_history_action()); + GUI::ActionGroup font_action_group; font_action_group.set_exclusive(true); auto& font_menu = menubar->add_menu("Font"); diff --git a/Libraries/LibVT/Terminal.cpp b/Libraries/LibVT/Terminal.cpp index 2ae12fcb76..01adcacbd0 100644 --- a/Libraries/LibVT/Terminal.cpp +++ b/Libraries/LibVT/Terminal.cpp @@ -49,6 +49,14 @@ void Terminal::clear() set_cursor(0, 0); } +void Terminal::clear_including_history() +{ + m_history.clear(); + clear(); + + m_client.terminal_history_changed(); +} + inline bool is_valid_parameter_character(u8 ch) { return ch >= 0x30 && ch <= 0x3f; diff --git a/Libraries/LibVT/Terminal.h b/Libraries/LibVT/Terminal.h index 86de66578a..e1d565cdff 100644 --- a/Libraries/LibVT/Terminal.h +++ b/Libraries/LibVT/Terminal.h @@ -59,6 +59,8 @@ public: void on_input(u8); void clear(); + void clear_including_history(); + void set_size(u16 columns, u16 rows); u16 columns() const { return m_columns; } u16 rows() const { return m_rows; } diff --git a/Libraries/LibVT/TerminalWidget.cpp b/Libraries/LibVT/TerminalWidget.cpp index a73c312f8a..79e1ad67b1 100644 --- a/Libraries/LibVT/TerminalWidget.cpp +++ b/Libraries/LibVT/TerminalWidget.cpp @@ -133,9 +133,15 @@ TerminalWidget::TerminalWidget(int ptm_fd, bool automatic_size_policy, RefPtradd_action(copy_action()); m_context_menu->add_action(paste_action()); + m_context_menu->add_separator(); + m_context_menu->add_action(clear_including_history_action()); } TerminalWidget::~TerminalWidget() @@ -865,3 +871,8 @@ void TerminalWidget::did_change_font() if (!size().is_empty()) relayout(size()); } + +void TerminalWidget::clear_including_history() +{ + m_terminal.clear_including_history(); +} diff --git a/Libraries/LibVT/TerminalWidget.h b/Libraries/LibVT/TerminalWidget.h index af6b91d1bf..f4d56e21d8 100644 --- a/Libraries/LibVT/TerminalWidget.h +++ b/Libraries/LibVT/TerminalWidget.h @@ -79,9 +79,11 @@ public: GUI::Action& copy_action() { return *m_copy_action; } GUI::Action& paste_action() { return *m_paste_action; } + GUI::Action& clear_including_history_action() { return *m_clear_including_history_action; } void copy(); void paste(); + void clear_including_history(); virtual bool accepts_focus() const override { return true; } @@ -178,6 +180,7 @@ private: RefPtr m_copy_action; RefPtr m_paste_action; + RefPtr m_clear_including_history_action; RefPtr m_context_menu; RefPtr m_context_menu_for_hyperlink;