Bläddra i källkod

LibVT+Kernel: Support clearing the scrollback buffer

As per the `xterm ctlseqs` documentation, `\e3J` should clear the
scrollback buffer, and leave the visible lines unchanged.

This commit fixes a FIXME.
Daniel Bertalan 4 år sedan
förälder
incheckning
8f8fd9c5a8

+ 1 - 1
Kernel/TTY/VirtualConsole.cpp

@@ -33,7 +33,7 @@ void ConsoleImpl::clear()
 {
     m_client.clear();
 }
-void ConsoleImpl::clear_including_history()
+void ConsoleImpl::clear_history()
 {
 }
 

+ 1 - 1
Kernel/TTY/VirtualConsole.h

@@ -35,7 +35,7 @@ public:
 private:
     virtual void invalidate_cursor() override;
     virtual void clear() override;
-    virtual void clear_including_history() override;
+    virtual void clear_history() override;
 
     virtual void scroll_up(u16 region_top, u16 region_bottom, size_t count) override;
     virtual void scroll_down(u16 region_top, u16 region_bottom, size_t count) override;

+ 4 - 7
Userland/Libraries/LibVT/Terminal.cpp

@@ -32,17 +32,15 @@ void Terminal::clear()
 {
     dbgln_if(TERMINAL_DEBUG, "Clear the entire screen");
     for (size_t i = 0; i < rows(); ++i)
-        active_buffer()[i].clear(m_current_state.attribute);
+        active_buffer()[i].clear(Attribute());
     set_cursor(0, 0);
 }
 
-void Terminal::clear_including_history()
+void Terminal::clear_history()
 {
+    dbgln_if(TERMINAL_DEBUG, "Clear history");
     m_history.clear();
     m_history_start = 0;
-
-    clear();
-
     m_client.terminal_history_changed();
 }
 #endif
@@ -626,8 +624,7 @@ void Terminal::ED(Parameters params)
         clear();
         break;
     case 3:
-        // FIXME: <esc>[3J should also clear the scrollback buffer.
-        clear();
+        clear_history();
         break;
     default:
         unimplemented_csi_sequence(params, {}, 'J');

+ 8 - 2
Userland/Libraries/LibVT/Terminal.h

@@ -74,12 +74,18 @@ public:
 
     void set_cursor(unsigned row, unsigned column, bool skip_debug = false);
 
+    void clear_including_history()
+    {
+        clear_history();
+        clear();
+    }
+
 #ifndef KERNEL
     void clear();
-    void clear_including_history();
+    void clear_history();
 #else
     virtual void clear() = 0;
-    virtual void clear_including_history() = 0;
+    virtual void clear_history() = 0;
 #endif
 
 #ifndef KERNEL