autocompletion does not anymore cut string if no longer matching string is found

This commit is contained in:
thrust26 2017-10-17 21:10:37 +02:00
parent 631a8c1567
commit 2af885b417
1 changed files with 23 additions and 15 deletions

View File

@ -208,18 +208,18 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
int lastDelimPos = -1; int lastDelimPos = -1;
char delimiter = '\0'; char delimiter = '\0';
char str[256]; char inputStr[256];
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
str[i] = buffer(_promptStartPos + i) & 0x7f; inputStr[i] = buffer(_promptStartPos + i) & 0x7f;
// whitespace characters // whitespace characters
if(strchr("{*@<> =[]()+-/&|!^~%", str[i])) if(strchr("{*@<> =[]()+-/&|!^~%", inputStr[i]))
{ {
lastDelimPos = i; lastDelimPos = i;
delimiter = str[i]; delimiter = inputStr[i];
} }
} }
str[len] = '\0'; inputStr[len] = '\0';
int strLen = len - lastDelimPos - 1; int strLen = len - lastDelimPos - 1;
StringList list; StringList list;
@ -230,7 +230,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
{ {
// no delimiters, do only command completion: // no delimiters, do only command completion:
const DebuggerParser& parser = instance().debugger().parser(); const DebuggerParser& parser = instance().debugger().parser();
parser.getCompletions(str, list); parser.getCompletions(inputStr, list);
if(list.size() < 1) if(list.size() < 1)
break; break;
@ -244,9 +244,9 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
else else
{ {
// Special case for 'help' command // Special case for 'help' command
if(BSPF::startsWithIgnoreCase(str, "help")) if(BSPF::startsWithIgnoreCase(inputStr, "help"))
{ {
instance().debugger().parser().getCompletions(str + lastDelimPos + 1, list); instance().debugger().parser().getCompletions(inputStr + lastDelimPos + 1, list);
} }
else else
{ {
@ -256,8 +256,8 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
// we got a delimiter, so this must be a label or a function // we got a delimiter, so this must be a label or a function
const Debugger& dbg = instance().debugger(); const Debugger& dbg = instance().debugger();
dbg.cartDebug().getCompletions(str + lastDelimPos + 1, list); dbg.cartDebug().getCompletions(inputStr + lastDelimPos + 1, list);
dbg.getCompletions(str + lastDelimPos + 1, list); dbg.getCompletions(inputStr + lastDelimPos + 1, list);
} }
} }
@ -297,13 +297,21 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod)
_promptStartPos = _currentPos; _promptStartPos = _currentPos;
for(int i = 0; i < lastDelimPos; i++) if(prefix.length() < strLen)
putcharIntern(str[i]); {
for(int i = 0; i < len; i++)
putcharIntern(inputStr[i]);
}
else
{
for(int i = 0; i < lastDelimPos; i++)
putcharIntern(inputStr[i]);
if(lastDelimPos > 0) if(lastDelimPos > 0)
putcharIntern(delimiter); putcharIntern(delimiter);
print(prefix); print(prefix);
}
_promptEndPos = _currentPos; _promptEndPos = _currentPos;
} }
dirty = true; dirty = true;