summaryrefslogtreecommitdiffstats
path: root/src/color.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2023-06-16 13:44:21 -0400
committerTavian Barnes <tavianator@tavianator.com>2023-06-16 13:44:21 -0400
commit2eeee3e0d0d3aeca5e6487cc2431c1f65e35a6d8 (patch)
treec481462d4e4ffb4a3c43a50b6f5bec7777b4a7a9 /src/color.c
parentd3f4340a460a023656151f220f5923ec8ccf9894 (diff)
downloadbfs-2eeee3e0d0d3aeca5e6487cc2431c1f65e35a6d8.tar.xz
color: New %pq formatter for shell-escaped strings
Diffstat (limited to 'src/color.c')
-rw-r--r--src/color.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/color.c b/src/color.c
index 87575c9..1edd8b5 100644
--- a/src/color.c
+++ b/src/color.c
@@ -858,6 +858,18 @@ static int print_link_target(CFILE *cfile, const struct BFTW *ftwbuf) {
return ret;
}
+/** Print an shell-escaped string. */
+static int print_wordesc(CFILE *cfile, const char *str) {
+ char *esc = wordesc(str);
+ if (!esc) {
+ return -1;
+ }
+
+ int ret = dstrcat(&cfile->buffer, esc);
+ free(esc);
+ return ret;
+}
+
/** Format some colored output to the buffer. */
BFS_FORMATTER(2, 3)
static int cbuff(CFILE *cfile, const char *format, ...);
@@ -994,6 +1006,12 @@ static int cvbuff(CFILE *cfile, const char *format, va_list args) {
case 'p':
switch (*++i) {
+ case 'q':
+ if (print_wordesc(cfile, va_arg(args, const char *)) != 0) {
+ return -1;
+ }
+ break;
+
case 'F':
if (print_name(cfile, va_arg(args, const struct BFTW *)) != 0) {
return -1;