diff options
-rw-r--r-- | gdb/NEWS | 7 | ||||
-rw-r--r-- | gdb/doc/python.texi | 10 | ||||
-rw-r--r-- | gdb/python/py-value.c | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.python/py-format-string.exp | 20 |
4 files changed, 39 insertions, 5 deletions
@@ -168,6 +168,13 @@ info win manager that temporarily sets the gdb parameter NAME to VALUE, then resets it when the context is exited. + ** The gdb.Value.format_string method now takes a 'styling' + argument, which is a boolean. When true, the returned string can + include escape sequences to apply styling. The styling will only + be present if styling is otherwise turned on in GDB (see 'help + set styling'). When false, which is the default if the argument + is not given, then no styling is applied to the returned string. + * New features in the GDB remote stub, GDBserver ** GDBserver is now supported on OpenRISC GNU/Linux. diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index da88b8a..c1a3f5f 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -1079,6 +1079,16 @@ A string containing a single character representing the format to use for the returned string. For instance, @code{'x'} is equivalent to using the @value{GDBN} command @code{print} with the @code{/x} option and formats the value as a hexadecimal number. + +@item styling +@code{True} if @value{GDBN} should apply styling to the returned +string. When styling is applied, the returned string might contain +ANSI terminal escape sequences. Escape sequences will only be +included if styling is turned on, see @ref{Output Styling}. +Additionally, @value{GDBN} only styles some value contents, so not +every output string will contain escape sequences. + +When @code{False}, which is the default, no output styling is applied. @end table @end defun diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c index 6401d96..b546344 100644 --- a/gdb/python/py-value.c +++ b/gdb/python/py-value.c @@ -639,6 +639,7 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw) "symbols", /* See set print symbol on|off. */ "unions", /* See set print union on|off. */ "address", /* See set print address on|off. */ + "styling", /* Should we apply styling. */ /* C++ options. */ "deref_refs", /* No corresponding setting. */ "actual_objects", /* See set print object on|off. */ @@ -683,13 +684,14 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw) PyObject *symbols_obj = NULL; PyObject *unions_obj = NULL; PyObject *address_obj = NULL; + PyObject *styling_obj = Py_False; PyObject *deref_refs_obj = NULL; PyObject *actual_objects_obj = NULL; PyObject *static_members_obj = NULL; char *format = NULL; if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, - "|O!O!O!O!O!O!O!O!O!O!IIIs", + "|O!O!O!O!O!O!O!O!O!O!O!IIIs", keywords, &PyBool_Type, &raw_obj, &PyBool_Type, &pretty_arrays_obj, @@ -698,6 +700,7 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw) &PyBool_Type, &symbols_obj, &PyBool_Type, &unions_obj, &PyBool_Type, &address_obj, + &PyBool_Type, &styling_obj, &PyBool_Type, &deref_refs_obj, &PyBool_Type, &actual_objects_obj, &PyBool_Type, &static_members_obj, @@ -752,7 +755,7 @@ valpy_format_string (PyObject *self, PyObject *args, PyObject *kw) } } - string_file stb; + string_file stb (PyObject_IsTrue (styling_obj)); try { diff --git a/gdb/testsuite/gdb.python/py-format-string.exp b/gdb/testsuite/gdb.python/py-format-string.exp index 4c78bed..ac1353e 100644 --- a/gdb/testsuite/gdb.python/py-format-string.exp +++ b/gdb/testsuite/gdb.python/py-format-string.exp @@ -991,6 +991,13 @@ proc_with_prefix test_invalid_args {} { "ValueError: a single character is required.*" } +# Check the styling argument to format_string. This function needs to +# be called with TERM set such that styling can be applied. +proc test_styling {} { + gdb_test "python print(gdb.parse_and_eval(\"a_point_t\").format_string(styling=True, raw=True))" \ + "{[style x variable] = 42, [style y variable] = 12}" +} + # Run all the tests in common for both C and C++. proc_with_prefix test_all_common {} { # No options. @@ -1023,9 +1030,16 @@ with_test_prefix "format_string" { # Perform C Tests. if { [build_inferior "${binfile}" "c"] == 0 } { with_test_prefix "lang_c" { - set current_lang "c" - prepare_gdb "${binfile}" - test_all_common + save_vars { env(TERM) } { + # We run all of these tests in an environment where styling + # could work, but we only expect the final call to + # test_styling to actually produce any styled output. + setenv TERM ansi + set current_lang "c" + prepare_gdb "${binfile}" + test_all_common + test_styling + } } } |