Shell: Get default backspace key from c_cc[VERASE]

This commit is contained in:
Bananymous 2025-06-02 15:55:20 +03:00
parent fb466b5af7
commit 775c77c0fa
2 changed files with 15 additions and 1 deletions

View File

@ -382,7 +382,17 @@ BAN::Optional<BAN::String> Input::get_input(BAN::Optional<BAN::StringView> custo
continue;
}
switch (ch)
if (ch == m_backspace)
{
if (m_buffer_col <= 0)
continue;
while ((m_buffers[m_buffer_index][m_buffer_col - 1] & 0xC0) == 0x80)
m_buffers[m_buffer_index].remove(--m_buffer_col);
m_buffers[m_buffer_index].remove(--m_buffer_col);
printf("\b\e[s%s \e[u", m_buffers[m_buffer_index].data() + m_buffer_col);
fflush(stdout);
}
else switch (ch)
{
case '\e':
{
@ -680,6 +690,8 @@ Input::Input()
s_raw_termios.c_lflag &= ~(ECHO | ICANON);
atexit([] { tcsetattr(0, TCSANOW, &s_original_termios); });
s_termios_initialized = true;
m_backspace = s_original_termios.c_cc[VERASE];
}
char hostname_buffer[HOST_NAME_MAX];

View File

@ -31,5 +31,7 @@ private:
BAN::Optional<BAN::Vector<BAN::String>> m_tab_completions;
size_t m_tab_completion_keep { 0 };
char m_backspace;
int m_waiting_utf8 { 0 };
};