mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[code] Delete specific lines in the console history with backspace.
Change-Id: I9ed4709937f35c67aea0b958fabbad145b8c0c80
This commit is contained in:
@@ -80,6 +80,26 @@ void ConsoleStore::deleteLastLineIfEmpty() {
|
||||
}
|
||||
}
|
||||
|
||||
int ConsoleStore::deleteCommandAndResultsAtIndex(int index) {
|
||||
int numberOfLinesAtStart = numberOfLines();
|
||||
assert(index >= 0 && index < numberOfLinesAtStart);
|
||||
int indexOfLineToDelete = index;
|
||||
while (indexOfLineToDelete < numberOfLinesAtStart - 1) {
|
||||
if (lineAtIndex(indexOfLineToDelete + 1).isCommand()) {
|
||||
break;
|
||||
}
|
||||
indexOfLineToDelete++;
|
||||
}
|
||||
ConsoleLine lineToDelete = lineAtIndex(indexOfLineToDelete);
|
||||
while (indexOfLineToDelete > 0 && !lineAtIndex(indexOfLineToDelete).isCommand()) {
|
||||
deleteLineAtIndex(indexOfLineToDelete);
|
||||
indexOfLineToDelete--;
|
||||
lineToDelete = lineAtIndex(indexOfLineToDelete);
|
||||
}
|
||||
deleteLineAtIndex(indexOfLineToDelete);
|
||||
return indexOfLineToDelete;
|
||||
}
|
||||
|
||||
void ConsoleStore::push(const char marker, const char * text, size_t length) {
|
||||
// TODO: Verify that the text field does not accept texts that are bigger than
|
||||
// k_historySize, or put an alert message if the command is too big.
|
||||
@@ -114,6 +134,26 @@ int ConsoleStore::indexOfNullMarker() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ConsoleStore::deleteLineAtIndex(int index) {
|
||||
assert(index >=0 && index < numberOfLines());
|
||||
int currentLineIndex = 0;
|
||||
for (int i = 0; i < k_historySize - 1; i++) {
|
||||
if (m_history[i] == 0) {
|
||||
currentLineIndex++;
|
||||
continue;
|
||||
}
|
||||
if (currentLineIndex == index) {
|
||||
int nextLineStart = i;
|
||||
while (m_history[nextLineStart] != 0 && nextLineStart < k_historySize - 2) {
|
||||
nextLineStart++;
|
||||
}
|
||||
nextLineStart++;
|
||||
memcpy(&m_history[i], &m_history[nextLineStart], (k_historySize - 1) - nextLineStart + 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ConsoleStore::deleteFirstLine() {
|
||||
if (m_history[0] == 0) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user