diff --git a/lib/modules/Stdio.pmod/Readline.pike b/lib/modules/Stdio.pmod/Readline.pike index 6636f31936c474fbb2962489496c4b4e5d7f4ea0..4b94e248b01f789171df2b928de64d8899795916 100644 --- a/lib/modules/Stdio.pmod/Readline.pike +++ b/lib/modules/Stdio.pmod/Readline.pike @@ -1,4 +1,4 @@ -// $Id: Readline.pike,v 1.33 2000/04/06 09:06:22 hubbe Exp $ +// $Id: Readline.pike,v 1.34 2000/08/29 14:00:18 noring Exp $ class OutputController { @@ -1081,6 +1081,7 @@ class History static private object(OutputController) output_controller; static private object(InputController) input_controller; static private string prompt=""; +static private array(string) prompt_attrs=0; static private string text="", readtext; static private function(string:void) newline_func; static private int cursorpos = 0; @@ -1106,10 +1107,10 @@ string get_prompt() return prompt; } -string set_prompt(string newp) +string set_prompt(string newp, array(string)|void newattrs) { string oldp = prompt; - if(newp!=prompt) + if(newp!=prompt || !equal(prompt_attrs, newattrs)) { if(newline_func) { @@ -1119,11 +1120,13 @@ string set_prompt(string newp) output_controller->bol(); output_controller->clear(1); prompt = newp; + prompt_attrs = newattrs && copy_value(newattrs); cursorpos=strlen(text); redisplay(0, 1); cursorpos=p; }else{ prompt = newp; + prompt_attrs = newattrs && copy_value(newattrs); } } return oldp; @@ -1290,8 +1293,13 @@ void redisplay(int clear, int|void nobackup) output_controller->check_columns(); if(!input_controller->dumb) { - if(newline_func == read_newline) + if(newline_func == read_newline) { + if(prompt_attrs) + output_controller->turn_on(@prompt_attrs); output_controller->write(prompt); + if(prompt_attrs) + output_controller->turn_off(@prompt_attrs); + } output_controller->write(text,0,hide); } cursorpos = sizeof(text); @@ -1393,26 +1401,32 @@ void set_blocking() set_nonblocking(0); } -string edit(string data, string|void local_prompt) +string edit(string data, string|void local_prompt, array(string)|void attrs) { if(data && strlen(data) && input_controller->dumb) { - string ret=edit("", (local_prompt || get_prompt()) +" ["+data+"] "); + string ret=edit("", (local_prompt || get_prompt()) +" ["+data+"] ", attrs); return (!ret || !strlen(ret))?data:ret; } string old_prompt; - + array(string) old_attrs; + if(newline_func == read_newline) return 0; if(local_prompt) { old_prompt = get_prompt(); - set_prompt(local_prompt); + old_attrs = prompt_attrs; + set_prompt(local_prompt, attrs); } function oldnl = newline_func; + if(attrs) + output_controller->turn_on(@attrs); output_controller->write(local_prompt||prompt); + if(attrs) + output_controller->turn_off(@attrs); initline(); newline_func = read_newline; readtext = ""; @@ -1424,14 +1438,14 @@ string edit(string data, string|void local_prompt) set_nonblocking(oldnl); if(local_prompt) - set_prompt(old_prompt); + set_prompt(old_prompt, old_attrs); return (res>=0 || sizeof(readtext)) && readtext; } -string read(string|void prompt) +string read(string|void prompt, array(string)|void attrs) { - return edit("", prompt); + return edit("", prompt, attrs); } void enable_history(array(string)|object(History)|int hist)