Shell: Get default backspace key from c_cc[VERASE]
This commit is contained in:
parent
fb466b5af7
commit
775c77c0fa
|
@ -382,7 +382,17 @@ BAN::Optional<BAN::String> Input::get_input(BAN::Optional<BAN::StringView> custo
|
||||||
continue;
|
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':
|
case '\e':
|
||||||
{
|
{
|
||||||
|
@ -680,6 +690,8 @@ Input::Input()
|
||||||
s_raw_termios.c_lflag &= ~(ECHO | ICANON);
|
s_raw_termios.c_lflag &= ~(ECHO | ICANON);
|
||||||
atexit([] { tcsetattr(0, TCSANOW, &s_original_termios); });
|
atexit([] { tcsetattr(0, TCSANOW, &s_original_termios); });
|
||||||
s_termios_initialized = true;
|
s_termios_initialized = true;
|
||||||
|
|
||||||
|
m_backspace = s_original_termios.c_cc[VERASE];
|
||||||
}
|
}
|
||||||
|
|
||||||
char hostname_buffer[HOST_NAME_MAX];
|
char hostname_buffer[HOST_NAME_MAX];
|
||||||
|
|
|
@ -31,5 +31,7 @@ private:
|
||||||
BAN::Optional<BAN::Vector<BAN::String>> m_tab_completions;
|
BAN::Optional<BAN::Vector<BAN::String>> m_tab_completions;
|
||||||
size_t m_tab_completion_keep { 0 };
|
size_t m_tab_completion_keep { 0 };
|
||||||
|
|
||||||
|
char m_backspace;
|
||||||
|
|
||||||
int m_waiting_utf8 { 0 };
|
int m_waiting_utf8 { 0 };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue