Shell-Menüs auf Mac mit Ncurses, Problem mit Edit-Felder
RuD
- php
0 RuD
Seid gegrüßt!
ich versuche mich im Moment an einem Konfigurationsmenü auf Ncurses-Basis.
Bei Ncurses gibt es aber keine Eingabefelder als fertige Objekte. Daher habe ich mir "so etwas ähnliches geschrieben":
function input() {
ncurses_move ($this->zeile+4, 3);
ncurses_addstr("> ");
ncurses_color_set(2);
ncurses_addstr(" ");
ncurses_move ($this->zeile+4, 5);
for ($str = "";;){
$key = ncurses_getch();
switch ($key) {
case 10: // newline
case 13: // Carrige Return
return($str);
default:
$str .= chr($key);
ncurses_refresh();
}
}
ncurses_color_set(1);
return $str;
}
Das ist das leicht abgewandelte Beispiel aus der PHP-Doku. Funtioniert auch wunderbar.
Nun zu meinem Problem:
Im Moment funktionier nur die Eingabe, aber die Korrektur mit Backspace ist nicht möglich. Hat jemand eine Idee, wie ich das erreichen könnte?
Seid gegrüßt!
Fall jemand dieses Problem auch mal haben sollte, hier ist meine Lösung:
function input_new() {
ncurses_move ($this->zeile+4, 3);
ncurses_addstr("> ");
ncurses_color_set(2);
ncurses_addstr(" ");
ncurses_move ($this->zeile+4, 5);
$str_array = array();
$pos = 0;
while (($key != 10 ) && ($key != 13)) {
$key = ncurses_getch();
if (($key == 330 || $key==8) && ($pos > 0)) {
$pos = $pos - 1;
ncurses_move ($this->zeile+4, 5+$pos);
ncurses_addstr(" ");
ncurses_move ($this->zeile+4, 5+$pos);
}else {
$pos = $pos + 1;
ncurses_move ($this->zeile+4, 5+$pos);
$str_array[$pos] = chr($key);
}
}
$string = implode("", $str_array);
ncurses_color_set(1);
return $string;
}