diff options
author | Andrei Pikas <gdb@mail.api.win> | 2024-10-05 22:27:44 +0300 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2025-01-12 13:30:43 -0700 |
commit | 6447969d0ac774b6dec0f95a0d3d27c27d158690 (patch) | |
tree | e9812cfdd956f4c8e89f596b276ddc1c4ad8da45 /gdb/guile/scm-param.c | |
parent | 338e0b05d8f2dd404eb0015bee31461dfe5ba307 (diff) | |
download | binutils-6447969d0ac774b6dec0f95a0d3d27c27d158690.zip binutils-6447969d0ac774b6dec0f95a0d3d27c27d158690.tar.gz binutils-6447969d0ac774b6dec0f95a0d3d27c27d158690.tar.bz2 |
Add an option with a color type.
Colors can be specified as "none" for terminal's default color, as a name of
one of the eight standard colors of ISO/IEC 6429 "black", "red", "green", etc.,
as an RGB hexadecimal tripplet #RRGGBB for 24-bit TrueColor, or as an
integer from 0 to 255. Integers 0 to 7 are the synonyms for the standard
colors. Integers 8-15 are used for the so-called bright colors from the
aixterm extended 16-color palette. Integers 16-255 are the indexes into xterm
extended 256-color palette (usually 6x6x6 cube plus gray ramp). In
general, 256-color palette is terminal dependent and sometimes can be
changed with OSC 4 sequences, e.g. "\033]4;1;rgb:00/FF/00\033\\".
It is the responsibility of the user to verify that the terminal supports
the specified colors.
PATCH v5 changes: documentation fixed.
PATCH v6 changes: documentation fixed.
PATCH v7 changes: rebase onto master and fixes after review.
PATCH v8 changes: fixes after review.
Diffstat (limited to 'gdb/guile/scm-param.c')
-rw-r--r-- | gdb/guile/scm-param.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/gdb/guile/scm-param.c b/gdb/guile/scm-param.c index 3a1e158..749c5ea 100644 --- a/gdb/guile/scm-param.c +++ b/gdb/guile/scm-param.c @@ -47,6 +47,9 @@ union pascm_variable /* Hold a string, for enums. */ const char *cstringval; + + /* Hold a color. */ + ui_file_style::color color; }; /* A GDB parameter. @@ -130,6 +133,7 @@ enum scm_param_types param_optional_filename, param_filename, param_enum, + param_color, }; /* Translation from Guile parameters to GDB variable types. Keep in the @@ -155,7 +159,8 @@ param_to_var[] = { var_string_noescape }, { var_optional_filename }, { var_filename }, - { var_enum } + { var_enum }, + { var_color } }; /* Wraps a setting around an existing param_smob. This abstraction @@ -179,6 +184,8 @@ make_setting (param_smob *s) return setting (type, s->value.stringval); else if (var_type_uses<const char *> (type)) return setting (type, &s->value.cstringval); + else if (var_type_uses<ui_file_style::color> (s->type)) + return setting (s->type, &s->value.color); else gdb_assert_not_reached ("unhandled var type"); } @@ -239,10 +246,9 @@ static SCM pascm_make_param_smob (void) { param_smob *p_smob = (param_smob *) - scm_gc_malloc (sizeof (param_smob), param_smob_name); + scm_gc_calloc (sizeof (param_smob), param_smob_name); SCM p_scm; - memset (p_smob, 0, sizeof (*p_smob)); p_smob->cmd_class = no_class; p_smob->type = var_boolean; /* ARI: var_boolean */ p_smob->set_func = SCM_BOOL_F; @@ -511,6 +517,13 @@ add_setshow_generic (enum var_types param_type, set_list, show_list); break; + case var_color: + commands = add_setshow_color_cmd (cmd_name, cmd_class, &self->value.color, + set_doc, show_doc, help_doc, + set_func, show_func, + set_list, show_list); + break; + default: gdb_assert_not_reached ("bad param_type value"); } @@ -588,6 +601,7 @@ static const scheme_integer_constant parameter_types[] = { "PARAM_OPTIONAL_FILENAME", param_optional_filename }, { "PARAM_FILENAME", param_filename }, { "PARAM_ENUM", param_enum }, + { "PARAM_COLOR", param_color }, END_INTEGER_CONSTANTS }; @@ -650,6 +664,11 @@ pascm_param_value (const setting &var, int arg_pos, const char *func_name) return gdbscm_scm_from_host_string (str, strlen (str)); } + case var_color: + { + return coscm_scm_from_color (var.get<ui_file_style::color> ()); + } + case var_boolean: { if (var.get<bool> ()) @@ -764,6 +783,12 @@ pascm_set_param_value_x (param_smob *p_smob, break; } + case var_color: + SCM_ASSERT_TYPE (coscm_is_color (value), value, arg_pos, func_name, + _("<gdb:color>")); + var.set<ui_file_style::color> (coscm_get_color (value)); + break; + case var_boolean: SCM_ASSERT_TYPE (gdbscm_is_bool (value), value, arg_pos, func_name, _("boolean")); @@ -1050,6 +1075,8 @@ gdbscm_make_parameter (SCM name_scm, SCM rest) scm_set_smob_free (parameter_smob_tag, pascm_free_parameter_smob); if (var_type_uses<std::string> (p_smob->type)) p_smob->value.stringval = new std::string; + else if (var_type_uses<ui_file_style::color> (p_smob->type)) + p_smob->value.color = ui_file_style::NONE; if (initial_value_arg_pos > 0) { |