Compare commits
No commits in common. "d73a270fb1ea3c100f54413cebd9ab1fc847a452" and "703c1a485ce14ba0798179316118e917880afbea" have entirely different histories.
d73a270fb1
...
703c1a485c
|
@ -69,6 +69,8 @@ namespace Kernel
|
||||||
void do_backspace();
|
void do_backspace();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
TerminalDriver::Color m_foreground { TerminalColor::BRIGHT_WHITE };
|
||||||
|
TerminalDriver::Color m_background { TerminalColor::BLACK };
|
||||||
termios m_termios;
|
termios m_termios;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -84,10 +84,6 @@ namespace Kernel
|
||||||
uint32_t m_column { 0 };
|
uint32_t m_column { 0 };
|
||||||
Cell* m_buffer { nullptr };
|
Cell* m_buffer { nullptr };
|
||||||
|
|
||||||
TerminalDriver::Color m_foreground { TerminalColor::BRIGHT_WHITE };
|
|
||||||
TerminalDriver::Color m_background { TerminalColor::BLACK };
|
|
||||||
bool m_colors_inverted { false };
|
|
||||||
|
|
||||||
BAN::RefPtr<TerminalDriver> m_terminal_driver;
|
BAN::RefPtr<TerminalDriver> m_terminal_driver;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -110,11 +110,11 @@ namespace Kernel
|
||||||
case 0:
|
case 0:
|
||||||
m_foreground = TerminalColor::BRIGHT_WHITE;
|
m_foreground = TerminalColor::BRIGHT_WHITE;
|
||||||
m_background = TerminalColor::BLACK;
|
m_background = TerminalColor::BLACK;
|
||||||
m_colors_inverted = false;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: m_colors_inverted = true; break;
|
case 7:
|
||||||
case 27: m_colors_inverted = false; break;
|
BAN::swap(m_foreground, m_background);
|
||||||
|
break;
|
||||||
|
|
||||||
case 30: m_foreground = TerminalColor::BLACK; break;
|
case 30: m_foreground = TerminalColor::BLACK; break;
|
||||||
case 31: m_foreground = TerminalColor::RED; break;
|
case 31: m_foreground = TerminalColor::RED; break;
|
||||||
|
@ -384,9 +384,9 @@ namespace Kernel
|
||||||
ASSERT(x < m_width && y < m_height);
|
ASSERT(x < m_width && y < m_height);
|
||||||
auto& cell = m_buffer[y * m_width + x];
|
auto& cell = m_buffer[y * m_width + x];
|
||||||
cell.codepoint = codepoint;
|
cell.codepoint = codepoint;
|
||||||
cell.foreground = m_colors_inverted ? m_background : m_foreground;
|
cell.foreground = m_foreground;
|
||||||
cell.background = m_colors_inverted ? m_foreground : m_background;
|
cell.background = m_background;
|
||||||
m_terminal_driver->putchar_at(codepoint, x, y, cell.foreground, cell.background);
|
m_terminal_driver->putchar_at(codepoint, x, y, m_foreground, m_background);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirtualTTY::putcodepoint(uint32_t codepoint)
|
void VirtualTTY::putcodepoint(uint32_t codepoint)
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
#include <BAN/ScopeGuard.h>
|
#include <BAN/ScopeGuard.h>
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
@ -193,10 +192,6 @@ BAN::ErrorOr<void> Execute::execute_command(const PipedCommand& piped_command)
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const int stdin_flags = fcntl(STDIN_FILENO, F_GETFL);
|
|
||||||
if (stdin_flags == -1)
|
|
||||||
perror("fcntl");
|
|
||||||
|
|
||||||
for (size_t i = 0; i < piped_command.commands.size(); i++)
|
for (size_t i = 0; i < piped_command.commands.size(); i++)
|
||||||
{
|
{
|
||||||
int new_pipe[2] { STDIN_FILENO, STDOUT_FILENO };
|
int new_pipe[2] { STDIN_FILENO, STDOUT_FILENO };
|
||||||
|
@ -283,13 +278,8 @@ BAN::ErrorOr<void> Execute::execute_command(const PipedCommand& piped_command)
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isatty(STDIN_FILENO))
|
if (isatty(STDIN_FILENO) && tcsetpgrp(0, getpgrp()) == -1)
|
||||||
{
|
|
||||||
if (tcsetpgrp(0, getpgrp()) == -1)
|
|
||||||
perror("tcsetpgrp");
|
perror("tcsetpgrp");
|
||||||
if (stdin_flags != -1 && fcntl(STDIN_FILENO, F_SETFL, stdin_flags) == -1)
|
|
||||||
perror("fcntl");
|
|
||||||
}
|
|
||||||
m_last_return_value = child_codes.back();
|
m_last_return_value = child_codes.back();
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -283,20 +283,16 @@ void Terminal::handle_sgr()
|
||||||
case -1: case 0:
|
case -1: case 0:
|
||||||
m_bg_color = s_default_bg_color;
|
m_bg_color = s_default_bg_color;
|
||||||
m_fg_color = s_default_fg_color;
|
m_fg_color = s_default_fg_color;
|
||||||
m_colors_inverted = false;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
// FIXME: bold
|
// FIXME: bold
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
m_colors_inverted = true;
|
BAN::swap(m_fg_color, m_bg_color);
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
// default font
|
// default font
|
||||||
break;
|
break;
|
||||||
case 27:
|
|
||||||
m_colors_inverted = false;
|
|
||||||
break;
|
|
||||||
case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37:
|
case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37:
|
||||||
m_fg_color = s_colors_dark[m_csi_info.fields[0] - 30];
|
m_fg_color = s_colors_dark[m_csi_info.fields[0] - 30];
|
||||||
break;
|
break;
|
||||||
|
@ -557,11 +553,8 @@ Rectangle Terminal::putcodepoint(uint32_t codepoint)
|
||||||
const uint32_t cell_x = m_cursor.x * cell_w;
|
const uint32_t cell_x = m_cursor.x * cell_w;
|
||||||
const uint32_t cell_y = m_cursor.y * cell_h;
|
const uint32_t cell_y = m_cursor.y * cell_h;
|
||||||
|
|
||||||
const auto fg_color = m_colors_inverted ? m_bg_color : m_fg_color;
|
m_window->fill_rect(cell_x, cell_y, cell_w, cell_h, m_bg_color);
|
||||||
const auto bg_color = m_colors_inverted ? m_fg_color : m_bg_color;
|
m_window->draw_character(codepoint, m_font, cell_x, cell_y, m_fg_color);
|
||||||
|
|
||||||
m_window->fill_rect(cell_x, cell_y, cell_w, cell_h, bg_color);
|
|
||||||
m_window->draw_character(codepoint, m_font, cell_x, cell_y, fg_color);
|
|
||||||
m_last_graphic_char = codepoint;
|
m_last_graphic_char = codepoint;
|
||||||
should_invalidate = { cell_x, cell_y, cell_w, cell_h };
|
should_invalidate = { cell_x, cell_y, cell_w, cell_h };
|
||||||
m_cursor.x++;
|
m_cursor.x++;
|
||||||
|
|
|
@ -97,5 +97,4 @@ private:
|
||||||
Cursor m_saved_cursor { 0, 0 };
|
Cursor m_saved_cursor { 0, 0 };
|
||||||
uint32_t m_fg_color { 0 };
|
uint32_t m_fg_color { 0 };
|
||||||
uint32_t m_bg_color { 0 };
|
uint32_t m_bg_color { 0 };
|
||||||
bool m_colors_inverted { false };
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue