Переглянути джерело

Merge pull request #48 from mattventura/master

Avoid putting blank entries in history, allow linefeed for enter
bringup
Jacob Alexander 9 роки тому
джерело
коміт
46fc3e596b
1 змінених файлів з 27 додано та 17 видалено
  1. 27
    17
      Debug/cli/cli.c

+ 27
- 17
Debug/cli/cli.c Переглянути файл

// Check for control characters // Check for control characters
switch ( CLILineBuffer[prev_buf_pos] ) switch ( CLILineBuffer[prev_buf_pos] )
{ {
case 0x0D: // Enter
// Enter
case 0x0A: // LF
case 0x0D: // CR
CLILineBuffer[CLILineBufferCurrent - 1] = ' '; // Replace Enter with a space (resolves a bug in args) CLILineBuffer[CLILineBufferCurrent - 1] = ' '; // Replace Enter with a space (resolves a bug in args)


// Remove the space if there is no command // Remove the space if there is no command
if ( CLILineBufferCurrent == 1 ) if ( CLILineBufferCurrent == 1 )
{
CLILineBufferCurrent--; CLILineBufferCurrent--;
}
else
{
// Only do command-related stuff if there was actually a command
// Avoids clogging command history with blanks


// Process the current line buffer
CLI_commandLookup();
// Process the current line buffer
CLI_commandLookup();


// Add the command to the history
CLI_saveHistory( CLILineBuffer );
// Add the command to the history
CLI_saveHistory( CLILineBuffer );


// Keep the array circular, discarding the older entries
if ( CLIHistoryTail < CLIHistoryHead )
CLIHistoryHead = ( CLIHistoryHead + 1 ) % CLIMaxHistorySize;
CLIHistoryTail++;
if ( CLIHistoryTail == CLIMaxHistorySize )
{
CLIHistoryTail = 0;
CLIHistoryHead = 1;
}
// Keep the array circular, discarding the older entries
if ( CLIHistoryTail < CLIHistoryHead )
CLIHistoryHead = ( CLIHistoryHead + 1 ) % CLIMaxHistorySize;
CLIHistoryTail++;
if ( CLIHistoryTail == CLIMaxHistorySize )
{
CLIHistoryTail = 0;
CLIHistoryHead = 1;
}


CLIHistoryCurrent = CLIHistoryTail; // 'Up' starts at the last item
CLI_saveHistory( NULL ); // delete the old temp buffer
CLIHistoryCurrent = CLIHistoryTail; // 'Up' starts at the last item
CLI_saveHistory( NULL ); // delete the old temp buffer

}


// Reset the buffer // Reset the buffer
CLILineBufferCurrent = 0; CLILineBufferCurrent = 0;
case 0x1B: // Esc / Escape codes case 0x1B: // Esc / Escape codes
// Check for other escape sequence // Check for other escape sequence


// \e[ is an escape code in vt100 compatable terminals
// \e[ is an escape code in vt100 compatible terminals
if ( CLILineBufferCurrent >= prev_buf_pos + 3 if ( CLILineBufferCurrent >= prev_buf_pos + 3
&& CLILineBuffer[ prev_buf_pos ] == 0x1B && CLILineBuffer[ prev_buf_pos ] == 0x1B
&& CLILineBuffer[ prev_buf_pos + 1] == 0x5B ) && CLILineBuffer[ prev_buf_pos + 1] == 0x5B )