summaryrefslogtreecommitdiff
path: root/manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'manager.cpp')
-rw-r--r--manager.cpp40
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});
+}