php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #40221 Readline should re-read the window size
Submitted: 2007-01-24 16:41 UTC Modified: 2007-01-24 20:48 UTC
From: david at acz dot org Assigned:
Status: Not a bug Package: Readline related
PHP Version: 5.2.0 OS: SuSE Linux 9.3
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: david at acz dot org
New email:
PHP Version: OS:

 

 [2007-01-24 16:41 UTC] 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> ");
?>



Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-01-24 17:50 UTC] david at acz dot org
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;
    }
?>
 [2007-01-24 20:48 UTC] tony2001@php.net
Not PHP problem.
ext/readline is just a wrapper for libedit/GNU readline.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 11:01:30 2024 UTC