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/