diff --git a/kernel/kernel/Terminal/PseudoTerminal.cpp b/kernel/kernel/Terminal/PseudoTerminal.cpp index 7132834a..5c8ea167 100644 --- a/kernel/kernel/Terminal/PseudoTerminal.cpp +++ b/kernel/kernel/Terminal/PseudoTerminal.cpp @@ -165,7 +165,7 @@ namespace Kernel PseudoTerminalSlave::PseudoTerminalSlave(BAN::String&& name, uint32_t number, mode_t mode, uid_t uid, gid_t gid) : TTY({ - .c_iflag = 0, + .c_iflag = ICRNL, .c_oflag = 0, .c_cflag = CS8, .c_lflag = ECHO | ECHOE | ECHOK | ICANON | ISIG, diff --git a/kernel/kernel/Terminal/TTY.cpp b/kernel/kernel/Terminal/TTY.cpp index 0a38161c..4e9a6a3a 100644 --- a/kernel/kernel/Terminal/TTY.cpp +++ b/kernel/kernel/Terminal/TTY.cpp @@ -243,19 +243,14 @@ namespace Kernel LockGuard _(m_mutex); - if (m_termios.c_lflag & ICANON) - { - if ((m_termios.c_iflag & ISTRIP)) - ch &= 0x7F; - if ((m_termios.c_iflag & IGNCR) && ch == CR) - return; - uint8_t conv = ch; - if ((m_termios.c_iflag & ICRNL) && ch == CR) - conv = NL; - if ((m_termios.c_iflag & INLCR) && ch == NL) - conv = CR; - ch = conv; - } + if ((m_termios.c_iflag & ISTRIP)) + ch &= 0x7F; + if ((m_termios.c_iflag & IGNCR) && ch == CR) + return; + if ((m_termios.c_iflag & ICRNL) && ch == CR) + ch = NL; + else if ((m_termios.c_iflag & INLCR) && ch == NL) + ch = CR; if (m_termios.c_lflag & ISIG) { @@ -298,11 +293,10 @@ namespace Kernel should_flush = true; } - if (ch == NL || ch == m_termios.c_cc[VEOL]) + if (ch == NL || ch == CR || ch == m_termios.c_cc[VEOL]) { should_flush = true; force_echo = !!(m_termios.c_lflag & ECHONL); - ch = NL; } } diff --git a/kernel/kernel/Terminal/VirtualTTY.cpp b/kernel/kernel/Terminal/VirtualTTY.cpp index c2e5d37c..8c1feb1e 100644 --- a/kernel/kernel/Terminal/VirtualTTY.cpp +++ b/kernel/kernel/Terminal/VirtualTTY.cpp @@ -37,7 +37,7 @@ namespace Kernel VirtualTTY::VirtualTTY(BAN::RefPtr driver) : TTY({ - .c_iflag = 0, + .c_iflag = ICRNL, .c_oflag = 0, .c_cflag = CS8, .c_lflag = ECHO | ECHOE | ECHOK | ICANON | ISIG, diff --git a/userspace/libraries/LibInput/KeyEvent.cpp b/userspace/libraries/LibInput/KeyEvent.cpp index 28690dd2..552f219a 100644 --- a/userspace/libraries/LibInput/KeyEvent.cpp +++ b/userspace/libraries/LibInput/KeyEvent.cpp @@ -58,7 +58,7 @@ namespace LibInput "å", "ä", "ö", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, - /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\n", " ", + /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\r", " ", "!", "\"", "#", "¤", "%", "&", "/", "§", "½", "(", ")", "[", "]", "{", "}", "=", "?", "+", "\\", "´", "`", "¨", "¸", "\b", "@", "£", "$", "€", @@ -77,7 +77,7 @@ namespace LibInput "Å", "Ä", "Ö", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, - /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\n", " ", + /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\r", " ", "!", "\"", "#", "¤", "%", "&", "/", "§", "½", "(", ")", "[", "]", "{", "}", "=", "?", "+", "\\", "´", "`", "¨", "¸", "\b", "@", "£", "$", "€", @@ -96,7 +96,7 @@ namespace LibInput "Å", "Ä", "Ö", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, - /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\n", " ", + /*"Insert", "PrintScreen", "Delete", "Home", "End", "PageUp", "PageDown",*/ nullptr, nullptr, "\x7F", nullptr, nullptr, nullptr, nullptr, "\r", " ", "!", "\"", "#", "¤", "%", "&", "/", "§", "½", "(", ")", "[", "]", "{", "}", "=", "?", "+", "\\", "´", "`", "¨", "¸", "\b", "@", "£", "$", "€",