diff options
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}); +} |