Have a look at https://github.com/lumostor/arduino-esp32-LinenoiseBitlash.git for an example of a full implementation.
class Console {
private:
String prompt;
TaskHandle_t console_task_handle;
public:
Console();
void begin(int baud, String p, int hlen);
int termProbe();
void termDumb( bool set );
void historyLen( int len );
void historyAdd(char *line);
char *lineNoise();
void freeLine(char*);
void consoleTaskStart();
void consoleTaskStop();
virtual void consoleTask();
};
#include <Console.h>
Console CON;
setup() {
CON.begin(115200, "HAL> ", 10);
if (CON.termProbe()) { /* zero indicates success */
printf("\n"
"Your terminal application does not support escape sequences.\n"
"Line editing and history features are disabled.\n"
"On linux , try screen.\n"
"On Windows, try using Putty instead.\n");
CON.termDumb(true);
}
CON.consoleTaskStart( ); // will start a task waiting for input but only print back
}
loop() {
// put your loop code here
}