]> granicus.if.org Git - php/commitdiff
- Initial work on setting color to prompt
authorFelipe Pena <felipensp@gmail.com>
Sun, 24 Nov 2013 17:00:30 +0000 (15:00 -0200)
committerFelipe Pena <felipensp@gmail.com>
Sun, 24 Nov 2013 17:00:30 +0000 (15:00 -0200)
phpdbg.c
phpdbg.h
phpdbg_set.c
phpdbg_set.h

index 8a2369de181104d2f2237d1ab5ad410997154c3c..72478e0535a1cc89634dafa22c5033f96508b80d 100644 (file)
--- a/phpdbg.c
+++ b/phpdbg.c
@@ -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);
index 8f455e8c7b7efcaf7afa2c2dbd936b4f5622b6ac..327116d6f49567ea576dd57e9b9b60cc51c7a3a7 100644 (file)
--- a/phpdbg.h
+++ b/phpdbg.h
 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 */
index e81b0f4cc559ab5786211210ccf02f00d9b1b8fd..650f2116c8218bff5d5aab29b674092e27ad9a3c 100644 (file)
 */
 
 #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();
index e691a8195f443ef3d0d6419275a2fd8081870b3a..a78558c6360dd43eb4d7c30b8dbcd2a886076088 100644 (file)
 
 #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
 };