ID: 40221 User updated by: david at acz dot org Reported By: david at acz dot org Status: Open Bug Type: Readline related Operating System: SuSE Linux 9.3 PHP Version: 5.2.0 New Comment:
I found a workaround: <? function xreadline($prompt) { global $xreadline, $xreadline_line; $code = '$GLOBALS["xreadline"] = false;' . '$GLOBALS["xreadline_line"] = $line;' . 'readline_callback_handler_remove();'; $cb = create_function('$line', $code); readline_callback_handler_install($prompt, $cb); $signal = defined("SIGWINCH") ? SIGWINCH : 28; posix_kill(posix_getpid(), $signal); $xreadline = true; while ($xreadline) readline_callback_read_char(); return is_null($xreadline_line) ? false : $xreadline_line; } ?> Previous Comments: ------------------------------------------------------------------------ [2007-01-24 16:41:27] david at acz dot org Description: ------------ The readline() function should re-read the window size every time it is called. The edit line and history get messed up if it doesn't get SIGWINCH (for example, if the window was resized in a child process). 1) Start the test program with a typical 80x40 window. 2) At the first prompt, press up to see that the history displays correctly. 3) Press enter to exit readline() and run less. 4) In less, maximize the terminal window, then quit less. 5) At the second prompt, press up and notice that the history is messed up. Reproduce code: --------------- <? $s = ""; for ($i = 65; $i <= 90; $i++) $s .= str_repeat(chr($i), 3) . " "; readline_add_history($s); readline("first> "); $p = popen("less", "w"); fwrite($p, "maximize window"); pclose($p); readline("second> "); ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40221&edit=1