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.
This commit is contained in:
Andreas Kling 2020-07-05 23:34:02 +02:00
parent e8a59ef842
commit 0c4b0c0312
Notes: sideshowbarker 2024-07-19 05:07:43 +09:00
5 changed files with 27 additions and 0 deletions

View file

@ -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");

View file

@ -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;

View file

@ -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; }

View file

@ -133,9 +133,15 @@ TerminalWidget::TerminalWidget(int ptm_fd, bool automatic_size_policy, RefPtr<Co
paste();
});
m_clear_including_history_action = GUI::Action::create("Clear including history", { Mod_Ctrl | Mod_Shift, Key_K }, [this](auto&) {
clear_including_history();
});
m_context_menu = GUI::Menu::construct();
m_context_menu->add_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();
}

View file

@ -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<GUI::Action> m_copy_action;
RefPtr<GUI::Action> m_paste_action;
RefPtr<GUI::Action> m_clear_including_history_action;
RefPtr<GUI::Menu> m_context_menu;
RefPtr<GUI::Menu> m_context_menu_for_hyperlink;