- Initial work on setting color to prompt

This commit is contained in:
Felipe Pena 2013-11-24 15:00:30 -02:00
parent bfccc292a6
commit 8589c0af91
4 changed files with 78 additions and 8 deletions

View File

@ -38,6 +38,8 @@ void (*zend_execute_old)(zend_op_array *op_array TSRMLS_DC);
static inline void php_phpdbg_globals_ctor(zend_phpdbg_globals *pg) /* {{{ */
{
pg->prompt = NULL;
pg->prompt_raw = NULL;
pg->prompt_color = NULL;
pg->exec = NULL;
pg->exec_len = 0;
pg->ops = NULL;
@ -154,6 +156,16 @@ static PHP_RSHUTDOWN_FUNCTION(phpdbg) /* {{{ */
PHPDBG_G(prompt) = NULL;
}
if (PHPDBG_G(prompt_raw)) {
efree(PHPDBG_G(prompt_raw));
PHPDBG_G(prompt_raw) = NULL;
}
if (PHPDBG_G(prompt_color)) {
efree(PHPDBG_G(prompt_color));
PHPDBG_G(prompt_color) = NULL;
}
if (PHPDBG_G(oplog)) {
fclose(
PHPDBG_G(oplog));
@ -687,7 +699,7 @@ phpdbg_main:
PHPDBG_G(flags) = flags;
/* set default prompt */
phpdbg_set_prompt(PROMPT TSRMLS_CC);
phpdbg_set_prompt(PROMPT, "1;64" TSRMLS_CC);
zend_try {
zend_activate_modules(TSRMLS_C);

View File

@ -132,6 +132,8 @@
ZEND_BEGIN_MODULE_GLOBALS(phpdbg)
HashTable bp[PHPDBG_BREAK_TABLES]; /* break points */
char *prompt; /* prompt */
char *prompt_raw; /* prompt unmodified */
char *prompt_color; /* prompt color */
char *exec; /* file to execute */
size_t exec_len; /* size of exec */
zend_op_array *ops; /* op_array */

View File

@ -18,23 +18,40 @@
*/
#include "phpdbg.h"
#include "phpdbg_cmd.h"
#include "phpdbg_set.h"
#include "phpdbg_utils.h"
ZEND_EXTERN_MODULE_GLOBALS(phpdbg);
void phpdbg_set_prompt(const char *prompt TSRMLS_DC) /* {{{ */
void phpdbg_set_prompt(const char *prompt, const char *color TSRMLS_DC) /* {{{ */
{
char *old_prompt_raw = PHPDBG_G(prompt_raw);
if (PHPDBG_G(prompt)) {
efree(PHPDBG_G(prompt));
PHPDBG_G(prompt) = NULL;
}
if (color) {
if (PHPDBG_G(prompt_color)) {
efree(PHPDBG_G(prompt_color));
}
PHPDBG_G(prompt_color) = estrdup(color);
}
if (PHPDBG_G(flags) & PHPDBG_IS_COLOURED) {
spprintf(&PHPDBG_G(prompt), 0, "\033[1;64m%s\033[0m ", prompt);
spprintf(&PHPDBG_G(prompt), 0, "\033[%sm%s\033[0m ",
PHPDBG_G(prompt_color) ? PHPDBG_G(prompt_color) : "1;64", prompt);
} else {
spprintf(&PHPDBG_G(prompt), 0, "%s ", prompt);
}
PHPDBG_G(prompt_raw) = estrdup(prompt);
if (old_prompt_raw) {
efree(old_prompt_raw);
}
} /* }}} */
const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */
@ -42,6 +59,23 @@ const char *phpdbg_get_prompt(TSRMLS_D) /* {{{ */
return PHPDBG_G(prompt);
} /* }}} */
void phpdbg_set_prompt_color(const char *color TSRMLS_DC) /* {{{ */
{
if (memcmp(color, PHPDBG_STRL("blue")) == 0) {
PHPDBG_G(prompt_color) = estrndup("blue", sizeof("blue")-1);
phpdbg_set_prompt(PHPDBG_G(prompt_raw), "0;34" TSRMLS_CC);
} else if (memcmp(color, PHPDBG_STRL("green")) == 0) {
PHPDBG_G(prompt_color) = estrndup("green", sizeof("green")-1);
phpdbg_set_prompt(PHPDBG_G(prompt_raw), "0;32" TSRMLS_CC);
}
} /* }}} */
const char* phpdbg_get_prompt_color(TSRMLS_D) /* {{{ */
{
return PHPDBG_G(prompt_color);
} /* }}} */
PHPDBG_SET(prompt) /* {{{ */
{
switch (param->type) {
@ -50,7 +84,24 @@ PHPDBG_SET(prompt) /* {{{ */
break;
case STR_PARAM:
phpdbg_set_prompt(param->str TSRMLS_CC);
phpdbg_set_prompt(param->str, NULL TSRMLS_CC);
break;
phpdbg_default_switch_case();
}
return SUCCESS;
} /* }}} */
PHPDBG_SET(prompt_color) /* {{{ */
{
switch (param->type) {
case EMPTY_PARAM:
phpdbg_writeln(phpdbg_get_prompt_color(TSRMLS_C));
break;
case STR_PARAM:
phpdbg_set_prompt_color(param->str TSRMLS_CC);
break;
phpdbg_default_switch_case();

View File

@ -24,15 +24,20 @@
#define PHPDBG_SET(name) PHPDBG_COMMAND(set_##name)
void phpdbg_set_prompt(const char* TSRMLS_DC);
const char* phpdbg_get_prompt(TSRMLS_D);
void phpdbg_set_prompt(const char*, const char* TSRMLS_DC);
const char *phpdbg_get_prompt(TSRMLS_D);
void phpdbg_set_prompt_color(const char* TSRMLS_DC);
const char *phpdbg_get_prompt_color(TSRMLS_D);
PHPDBG_SET(prompt);
PHPDBG_SET(prompt_color);
PHPDBG_SET(oplog);
static const phpdbg_command_t phpdbg_set_commands[] = {
PHPDBG_COMMAND_D_EX(prompt, "set prompt", 'p', set_prompt, NULL, 0),
PHPDBG_COMMAND_D_EX(oplog, "set oplog output", 'O', set_oplog, NULL, 0),
PHPDBG_COMMAND_D_EX(prompt, "set prompt", 'p', set_prompt, NULL, 0),
PHPDBG_COMMAND_D_EX(prompt_color, "set prompt color", 'c', set_prompt_color, NULL, 0),
PHPDBG_COMMAND_D_EX(oplog, "set oplog output", 'O', set_oplog, NULL, 0),
PHPDBG_END_COMMAND
};