On 06/08/12 00:37, Ferenc Kovacs wrote:


On Mon, Aug 6, 2012 at 1:22 AM, Andrew Faulds <a...@ajf.me <mailto:a...@ajf.me>> wrote:

    On 06/08/12 00:21, Ferenc Kovacs wrote:

        On Mon, Aug 6, 2012 at 12:18 AM, Johannes Schlüter
        <johan...@schlueters.de <mailto:johan...@schlueters.de>>wrote:

            On Sat, 2012-08-04 at 21:49 +0200, Ferenc Kovacs wrote:

                Hi,

                As most of you know, the current php interactive shell
                is pretty much
                useless without compiling php --with-readline, but for
                the most users

            this

                the first impression what they experience (eg. using
                the php interactive
                shell without readline support).

            Note that for 5.4 I refactored the code so a shared
            readline extension
            is good enough by moving all shell related parts to
            ext/readline. This
            should reduce the pain for distribution package users
            where typically
            everything is shared.

        for the record that would be
        https://bugs.php.net/bug.php?id=53878 and
        
http://git.php.net/?p=php-src.git;a=commit;h=6c734a6b4c9ecf90162cf53fcf5f89864ccabbde
          right?

                There is an alternative readline replacement called
                linenoise (
                https://github.com/antirez/linenoise/) written by the
                author of Redis,

            and

                I would like to know, what do you think about using
                that for the
                interactive shell if php is built without readline
                support.
                It is really small/compact and it is under the two
                clause BSD license so

            I

                think it would be a good candidate for bundling it in php.
                What do you think about it? Is it something worth
                looking into?

            There are two ways to do that: Either move the shell code
            back to
            sapi/cli or making ext/readline play nice with linenoise.

        I have to grasp the code a little bit better to answer that,
        but from a
        quick look I think that it was an improvement, that the
        readline stuff was
        moved out from there, so I think that we should keep that.
        The linenoise would be always available and I think it would
        be only a
        couple of lines, so I think that it would be possible to put
        it into
        php_cli.c but as you mentioned we should make it such a way,
        that even the
        dynamically loaded readline has to be able to override it.


            When using the first approach make sure that the user can
            still pick
            readline, as readline has features linenoise (currently)
            hasn't, like
            searching using Ctrl+r or configuration of the key
            combinations.


        agree, linenoise can't replace readline, so in general I think
        that we
        should only use it, if readline isn't available.


            I'd
            also like if readline can be built shared but still
            overwrite the
            built-in default.

        agree


            Doing the second approach has the benefit that the lib can
            be exported
            to userland in the same run. While then there's little
            benefit as it all
            still depends on an extension ...

            (Actually there would be a third possibility - writing a
            linenoise
            extension which uses sapi/cli's hook but that requires
            duplicating most
            of the shell code and makes things more complicated, let#s
            ignore
            this ;-) )

            What's your plan there?


        to tell you the truth I'm just throwing around ideas and
        waiting for
        somebody with better understanding the actual implementation
        to help me
        out. ;)

    Well if linenoise() isn't that different, you could use #ifdefs to
    make it use the correct lib at compile-time, no?


you mean putting the #ifdefs in ext/readline/readline_cli.c ?
No, I mean moving code bact to sapi/cli/php_cli.c and using either readline or linenoise there as appropriate.
yeah that would be easy, but that would be both hackish and doesn't solve anything, as that ext won't be loaded if readline isn't present. this is why Johannes said, that we have to either move some code back to sapi/cli/php_cli.c or integrate linenoise in such a way, that dynamically loaded extensions could still replace/override it(else we would lose Johannes work in 5.4 which made it possible to dynamically load readline).
Johannes, please correct me if I'm factually wrong here.

--
Ferenc Kovács
@Tyr43l - http://tyrael.hu


--
Andrew Faulds
http://ajf.me/

Reply via email to