diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-01-11 22:32:47 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-01-11 22:32:47 +0100 |
commit | b972e26307d0f87ffdc5b9a88d95ab3fe319d067 (patch) | |
tree | 728e0e7d6145248db1708720d2c215d8bda757c9 /manager.cpp | |
parent | 7ee15dee3eb9b8d0fc49206b9fd9a56e84bd0a1a (diff) |
Show basic prompt
Diffstat (limited to 'manager.cpp')
-rw-r--r-- | manager.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/manager.cpp b/manager.cpp index 951d84b..059a33f 100644 --- a/manager.cpp +++ b/manager.cpp @@ -19,13 +19,16 @@ void Manager::receive(const Command &cmd){ } else if(cmd[0]=="error"){ pushcursor(); Size termsize=gettermsize(); - moveto(0,termsize.h-1); Style errorStyle={1,9,true,false}; + fillrect(0,termsize.h-1,termsize.w,1,' '); + moveto(0,termsize.h-1); setstyle(&errorStyle); tprintf("%s",cmd[1].data()); popcursor(); } else if(cmd[0]=="quit_app"){ should_quit=true; + } else if(cmd[0]=="display_prompt"){ + runPrompt(); } else { if(activeIdx==-1)bel(); else buffers[activeIdx].receive(cmd); @@ -151,3 +154,38 @@ int Manager::io(){ return 0; } + + +void Manager::runPrompt(){ + Size termsize=gettermsize(); + moveto(0,termsize.h-1); + tputc(':'); + + global_keyinput.cancel(); + + string inputLine; + Buffer promptBuffer(this,true); + while(true){ + termsize=gettermsize(); + promptBuffer.show(1,termsize.h-1,termsize.w-1,1); + redraw(); + + int key=tgetkey(); + + Either<bool,Command> ret=global_keyinput.input(key); + if(ret.isLeft()){ + if(!ret.fromLeft()){ + bel(); + } + } else { + if(ret.fromRight()[0]=="insert_newline"){ + inputLine=promptBuffer.getText(); + break; + } else { + promptBuffer.receive(ret.fromRight()); + } + } + } + + receive({"error",inputLine}); +} |