Pressing ^D in a non-empty input terminates LLDB. This was due to the fact that we stack more than one editline instance on top of each other and we still expect CTRL+D to exit the editline instance, but it should only do so when the line is empty. Otherwise it should (and does) delete the character at the cursor.

<rdar://problem/15944703>

llvm-svn: 200489
This commit is contained in:
Greg Clayton 2014-01-30 20:59:18 +00:00
parent 196666cf5f
commit 10c0ef7b8a
1 changed files with 15 additions and 1 deletions

View File

@ -630,7 +630,21 @@ Editline::GetCharFromInputFileCallback (EditLine *e, char *c)
if (editline && editline->m_got_eof == false)
{
char ch = ::fgetc(editline->GetInputFile());
if (ch == '\x04' || ch == EOF)
if (ch == '\x04')
{
// Only turn a CTRL+D into a EOF if we receive the
// CTRL+D an empty line, otherwise it will forward
// delete the character at the cursor
const LineInfo *line_info = ::el_line(e);
if (line_info != NULL &&
line_info->buffer == line_info->cursor &&
line_info->cursor == line_info->lastchar)
{
ch = EOF;
}
}
if (ch == EOF)
{
editline->m_got_eof = true;
}