diff --git a/library.properties b/library.properties index b31a0cb..2740522 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=TinyConsole -version=0.1.0 +version=0.2.0 author=Francois BIOT, HSaturn, maintainer=Francois BIOT, HSaturn, sentence=A tiny command line and term handler diff --git a/src/TinyConsole.cpp b/src/TinyConsole.cpp index abf7b46..c7cbfc4 100644 --- a/src/TinyConsole.cpp +++ b/src/TinyConsole.cpp @@ -120,7 +120,8 @@ const TinyConsole& TinyConsole::fg(enum TinyConsole::Color c) const const TinyConsole& TinyConsole::prompt() const { - if (term) *serial << "\r\n" << ps1; + if (term) + *serial << CSI << 'G' << ps1 << input << ' ' << CSI << (int)(ps1.size()+cursor+1) << 'G'; return *this; } @@ -167,8 +168,7 @@ void TinyConsole::loop() (*this) << "code(" << (int)c << ')'; restoreCursor(); */ - if (term) - *serial << CSI << 'G' << ps1 << input << ' ' << CSI << (int)(ps1.size()+cursor+1) << 'G'; + prompt(); } } diff --git a/src/TinyConsole.h b/src/TinyConsole.h index 33a3eb4..6036d85 100644 --- a/src/TinyConsole.h +++ b/src/TinyConsole.h @@ -29,6 +29,13 @@ class TinyConsole none = 255 }; + enum Operation + { + hide_cur, + show_cur, + erase_to_end + }; + using CallBack = void(*)(const std::string& command); using CallBackFnKey = void(*)(int fkey); @@ -79,7 +86,16 @@ class TinyConsole console.fg(color); return console; } - + + friend TinyConsole& operator << (TinyConsole& console, Operation op) + { + if (op == erase_to_end) + console.eraseEol(); + else + console.cursorVisible(op == show_cur); + return console; + } + private: char waitChar(); void handleEscape();