Идея этого лежит на поверхности, но почти все, кому я показывал эту штуку, удивлялись и просили дать им ссылку. Хотя идея простая, а про stdin и readline знают почти наверное все.
Так вот, интерактивная консоль — это просто и очень полезно. С историей и автодополнением.
Есть, однако, три вопроса и две проблемы.
1) windows. В windows никакого readline нет, нет, соответственно, и автокомплита. Только stdin. Для него враппер написан, но esc-последовательности смены цвета, к сожалению, не работают (но нужно это просто пофиксить).
2) readline+libedit/libreadline. Их нужно (желательно, вернее) установить. Последняя библиотека и может у вас уже стоять (если нет — то у меня она установилась по команде «emerge libedit»), то php-расширение readline нужно собрать. Делается это примерно так: cd php-5.x.x/ext/readline && phpize && ./configure && make && make install
3) libedit мне лично пришлось настраивать. Файл ~/.editrc выглядит у меня как-то так:
Теперь о проблемах. Первая заключается в том, что код, находящийся внутри eval'а, можно контролировать на parse error, но на fatal error — нельзя. Соответственно, при фатальных ошибках валится вся консоль. Справедливости ради скажу, что у меня fatal error выпадала всего пару раз, большинство ошибок — или notice, или parse error.
Вторая проблема — это кривое расширение readline, которое не принимает ответ «нет вариантов» от функции автокомплита. Я не смог это побороть, и теперь, если нажать Tab сразу же или после пробела, без ввода символа, то будет выводиться список файлов, а это иногда мешает.
Но в целом такая консоль довольно полезна.
Исходники лежат на гуглокоде, прошу.
PS (для тех кому скучно): что выведет строка
Так вот, интерактивная консоль — это просто и очень полезно. С историей и автодополнением.
Есть, однако, три вопроса и две проблемы.
1) windows. В windows никакого readline нет, нет, соответственно, и автокомплита. Только stdin. Для него враппер написан, но esc-последовательности смены цвета, к сожалению, не работают (но нужно это просто пофиксить).
2) readline+libedit/libreadline. Их нужно (желательно, вернее) установить. Последняя библиотека и может у вас уже стоять (если нет — то у меня она установилась по команде «emerge libedit»), то php-расширение readline нужно собрать. Делается это примерно так: cd php-5.x.x/ext/readline && phpize && ./configure && make && make install
3) libedit мне лично пришлось настраивать. Файл ~/.editrc выглядит у меня как-то так:
bind "^R" em-inc-search-prev
bind "^[O5C" vi-next-word
bind "^[O5D" vi-prev-word
bind "^[[1~" ed-move-to-beg
bind "^[[4~" ed-move-to-end
bind "^[[3~" ed-delete-next-char
Теперь о проблемах. Первая заключается в том, что код, находящийся внутри eval'а, можно контролировать на parse error, но на fatal error — нельзя. Соответственно, при фатальных ошибках валится вся консоль. Справедливости ради скажу, что у меня fatal error выпадала всего пару раз, большинство ошибок — или notice, или parse error.
Вторая проблема — это кривое расширение readline, которое не принимает ответ «нет вариантов» от функции автокомплита. Я не смог это побороть, и теперь, если нажать Tab сразу же или после пробела, без ввода символа, то будет выводиться список файлов, а это иногда мешает.
Но в целом такая консоль довольно полезна.
Исходники лежат на гуглокоде, прошу.
PS (для тех кому скучно): что выведет строка
for ($i='a';$i<='z';$i++) echo $i.' ';
?