summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/TTY/VirtualConsole.cpp6
-rw-r--r--Kernel/TTY/VirtualConsole.h3
-rw-r--r--Userland/Libraries/LibVT/Terminal.cpp20
-rw-r--r--Userland/Libraries/LibVT/Terminal.h4
4 files changed, 19 insertions, 14 deletions
diff --git a/Kernel/TTY/VirtualConsole.cpp b/Kernel/TTY/VirtualConsole.cpp
index 00dd68067e..350f075b2c 100644
--- a/Kernel/TTY/VirtualConsole.cpp
+++ b/Kernel/TTY/VirtualConsole.cpp
@@ -68,7 +68,7 @@ void ConsoleImpl::scroll_up()
void ConsoleImpl::scroll_down()
{
}
-void ConsoleImpl::newline()
+void ConsoleImpl::linefeed()
{
u16 new_row = m_cursor_row;
u16 max_row = rows() - 1;
@@ -383,10 +383,6 @@ void VirtualConsole::scroll_up()
m_console_impl.m_need_full_flush = true;
}
-void VirtualConsole::newline()
-{
-}
-
void VirtualConsole::clear_line(size_t y_index)
{
m_lines[y_index].dirty = true;
diff --git a/Kernel/TTY/VirtualConsole.h b/Kernel/TTY/VirtualConsole.h
index c36bf5da17..be1db45329 100644
--- a/Kernel/TTY/VirtualConsole.h
+++ b/Kernel/TTY/VirtualConsole.h
@@ -38,7 +38,7 @@ private:
virtual void scroll_up() override;
virtual void scroll_down() override;
- virtual void newline() override;
+ virtual void linefeed() override;
virtual void put_character_at(unsigned row, unsigned column, u32 ch) override;
virtual void set_window_title(const String&) override;
@@ -137,7 +137,6 @@ private:
void scroll_down();
void scroll_up();
- void newline();
void clear_line(size_t index);
void put_character_at(unsigned row, unsigned column, u32 ch, const VT::Attribute&);
diff --git a/Userland/Libraries/LibVT/Terminal.cpp b/Userland/Libraries/LibVT/Terminal.cpp
index 42ee743396..90cdc569f5 100644
--- a/Userland/Libraries/LibVT/Terminal.cpp
+++ b/Userland/Libraries/LibVT/Terminal.cpp
@@ -521,7 +521,7 @@ void Terminal::DCH(Parameters params)
}
#endif
-void Terminal::newline()
+void Terminal::linefeed()
{
u16 new_row = m_cursor_row;
if (m_cursor_row == m_scroll_region_bottom) {
@@ -529,8 +529,11 @@ void Terminal::newline()
} else {
++new_row;
};
- set_cursor(new_row, 0);
+ // We shouldn't jump to the first column after receiving a line feed.
+ // The TTY will take care of generating the carriage return.
+ set_cursor(new_row, m_cursor_column);
}
+
void Terminal::carriage_return()
{
set_cursor(m_cursor_row, 0);
@@ -591,7 +594,7 @@ void Terminal::set_cursor(unsigned a_row, unsigned a_column)
void Terminal::NEL()
{
- newline();
+ linefeed();
carriage_return();
}
@@ -658,7 +661,7 @@ void Terminal::emit_code_point(u32 code_point)
if (m_stomp) {
m_stomp = false;
carriage_return();
- newline();
+ linefeed();
put_character_at(m_cursor_row, m_cursor_column, code_point);
set_cursor(m_cursor_row, 1);
} else {
@@ -690,7 +693,9 @@ void Terminal::execute_control_code(u8 code)
return;
}
case '\n':
- newline();
+ case '\v':
+ case '\f':
+ linefeed();
return;
case '\r':
carriage_return();
@@ -961,6 +966,11 @@ void Terminal::handle_key_press(KeyCode key, u32 code_point, u8 flags)
case KeyCode::Key_PageDown:
emit_tilde_with_modifier(6);
return;
+ case KeyCode::Key_Return:
+ // The standard says that CR should be generated by the return key.
+ // The TTY will take care of translating it to CR LF for the terminal.
+ emit_string("\r");
+ return;
default:
break;
}
diff --git a/Userland/Libraries/LibVT/Terminal.h b/Userland/Libraries/LibVT/Terminal.h
index 853319353b..f5d8560013 100644
--- a/Userland/Libraries/LibVT/Terminal.h
+++ b/Userland/Libraries/LibVT/Terminal.h
@@ -161,13 +161,13 @@ protected:
#ifndef KERNEL
void scroll_up();
void scroll_down();
- void newline();
+ void linefeed();
void put_character_at(unsigned row, unsigned column, u32 ch);
void set_window_title(const String&);
#else
virtual void scroll_up() = 0;
virtual void scroll_down() = 0;
- virtual void newline() = 0;
+ virtual void linefeed() = 0;
virtual void put_character_at(unsigned row, unsigned column, u32 ch) = 0;
virtual void set_window_title(const String&) = 0;
#endif